среда, 27 ноября 2013 г.

Распараллеливание DDT (Data Driven Tests) в Unit Testing

На просторах инета я не нашел решения "как распараллелить DDT в Unit Testing", нашел только информацию, что Microsoft не реализовало данную возможность в Visual Studio 2010.
Так что пришлось выкручиваться.

Вот рабочий пример DDT, распараллеленный на 4 потока.
Создаем TestsMultiThread.csv файл
Вот код для обработки данного файла:
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
 
namespace Wireless.Tests
{
    [TestClass]
    public class TestTry 
    {
        [TestClass]
        public class TestsCoupons 
        {
            public TestContext TestContext { getset; }
 
            [TestCleanup]
            public void StopTest()
            {
            }
 
            [TestInitialize]
            public void StartTest()
            {
            }
 
            [ClassInitialize]
            public static void StartTests(TestContext context)
            {
            }
 
            private void ExecuteTest(int thread)
            {
                var threadcfg = Convert.ToInt16(TestContext.DataRow["Thread"]);
                if (threadcfg != thread)
                    Assert.Inconclusive("Test not executed");
                var var1 = Convert.ToInt16(TestContext.DataRow["Var1"]);
                var var2 = Convert.ToInt16(TestContext.DataRow["Var2"]);
                var expResut = Convert.ToInt16(TestContext.DataRow["Result"]);
                Assert.AreEqual(expResut, var1 + var2);
 
            }
 
            [DeploymentItem("DDT\\TestsMultiThread.csv"),
             DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV""|DataDirectory|\\TestsMultiThread.csv""TestsMultiThread#csv",
             DataAccessMethod.Sequential),
             TestMethod]
            public void TestThread1()
            {
                ExecuteTest(1);
            }
 
            [DeploymentItem("DDT\\TestsMultiThread.csv"),
             DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV""|DataDirectory|\\TestsMultiThread.csv""TestsMultiThread#csv",
             DataAccessMethod.Sequential),
             TestMethod]
            public void TestThread2()
            {
                ExecuteTest(2);
            }
 
            [DeploymentItem("DDT\\TestsMultiThread.csv"),
             DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV""|DataDirectory|\\TestsMultiThread.csv""TestsMultiThread#csv",
             DataAccessMethod.Sequential),
             TestMethod]
            public void TestThread3()
            {
                ExecuteTest(3);
            }
 
            [DeploymentItem("DDT\\TestsMultiThread.csv"),
             DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV""|DataDirectory|\\TestsMultiThread.csv""TestsMultiThread#csv",
             DataAccessMethod.Sequential),
             TestMethod]
            public void TestThread4()
            {
                ExecuteTest(4);
            }
        }
    }
}

При запуске TestControler распараллеливает  4 метода на 4 виртуальные машины.
Вот результат запуска:
Поток 1

Поток 2

вторник, 26 ноября 2013 г.

Ranorex - организация автоматического тестирования C# приложения

Я занимаюсь тестированием сложного C# приложения, для retail (WS) с помощью Ranorex. В этой статье я расскажу как я организовал окружение, для автоматического тестирования.
Используемые продукты:
  1. Ranorex
  2. MS Visual Studio with MSTest
  3. MS Test Controller + Test Agent
  4. TFS
  5. TeamCity
Проекты:
WS- тестируемый проект
AutomationTesting - проект тестирования


Схема окружения

  1. Проект AutomationTesting берется из TFS и собирается на локальной машине или в TeamCity.Так же в TeamCity собирается проект WS. 
  2. Из TeamCity проект WS деплоится на виртуальные машины.
  3. Запуск UnitTests можно сделать с локальной машины или TeamCity(вручную или по расписанию.

    Пример задания в TeamCity для сборки тестируемого проекта WS:
  • Проект WS забирается из TFS(красное на схеме)
  • Собирается WS
  • Копируется исполняемые файлы и библиотеки на виртуальные машины(черное на схеме)
         Пример задания в TeamCity для сборки и выполнения проекта AutomationTesting:
  • Проект AutomationTesting забирается из TFS(красное на схеме)
  • Собирается AutomationTesting
  • Запускаются через RDP виртуальные машины, так как нам нужен UI
  • Запускаются тесты (зеленое и голубое на схеме)
Какие тесты исполнять и где определяет TestController, распределяя нагрузку между виртуальными машинами(Test Agents)

Запуск виртуальных машин происходит в фоне, без запроса пароля. Пример cmd файла:
taskkill.exe /F /IM mstsc.exe
 
cmdkey /add:"TERMSRV/nameVM" /user:"userName" /pass:userPassword
start mstsc.exe file.rdp /v:nameVM /h:1024 /w:1280 /admin

вторник, 5 ноября 2013 г.

Программа для тренировки-тестирования вибры

У Jiayu G3S есть проблема, моторчик вибры как бы залипает. Программа тренирует вибру, говорят это помогает. 
В импульсном режиме можно тестировать, если оставить на долго и вибра залипает значит проблемма есть.

вторник, 17 сентября 2013 г.

Рeдактор NCB для ноутов ASUS

Данная программа позволяет редактировать данные в блоке NCB BIOS(SLIC, MSDM, msdm.bin, serial number, OEM number, MAC, UUID). Инструкция в хелпе программы
Пользуетесь на свой страх и риск.
Скачать программу
Если есть замечания, вопросы - пишите.

воскресенье, 18 августа 2013 г.

Выжать все! OverClocking notebook N56VM

Повторение данных действий может привести к печальным последствиям для вашего ноутбука и кошелька. Помните! Я за кирпич из ноута не ответственен.  Все что вы будете делать - это только ваше решение. Перед любыми изменениями BIOS я настоятельно рекомендую иметь под рукой программатор. Я намерено не буду подробно расписывать шаги, т. к. те кто понимают, что они делают, знают как это делать или могут нагуглить.

И так, что можно выжать из ноутбука Asus N56VM.
1. Это увеличить скорость памяти
2. Это увеличить скорость графики GT 630M
3. Это увеличить скорость шины и процессора

По п. 3 сразу скажу, что пока до него не удалось добраться, а вот пункты 1 и 2 я сейчас и распишу.

п. 1 Увеличиваем скорость памяти попутно открываем скрытые настройки BIOS.

Для этого нам понадобятся следующие утилиты:
1. Hex редактор HxD
2. Утилита AMIBCP_Aptio_4.53.0.50
3. Утилита MMTool-4.50 (AMI Aptio EFI)
4. Набор утилит intel_tools_8.1.10.1286, нам нужна будет Flash Programming Tool

И так:
С помощью Flash Programming Tool сливаем наш BIOS и открываем все нужные настройки в AMIBCP. 
После этого нам будут доступны все меню кроме меню Chipset. Для того чтоб открыть меню Chipset  Нам нужно будет намного покопаться, я так и не нашел в инете инструкцию как его открыть, по этому пришлось копать самому. Производитель решил очень глубоко спрятать это меню, по этому его невозможно открыть с помощью AMIBCP. После долгого гугления я как то наткнулся на утекшие сырцы UEFI Bios, что мне помогло после их изучения наткнуться на вот такой код в модуле Setup:
BOOLEAN FormsetVisible[] = {
    TRUE, //Main formset is always displayed
    SHOW_ADVANCED_FORMSET, //Advanced formset
    SHOW_CHIPSET_FORMSET, //Chipset formset
    TRUE, //Boot formset is always displayed
    SHOW_SECURITY_FORMSET, //Security formset
    TRUE //Exit formset is always displayed
};
  Получается что нам всего лишь нужно найти Hex последовательность байт 010100010101
и заменить на 010101010101, т. е. все включить.
С помощью MMTool был выгружен и распакован модуль Setup, а с помощью HxD заменен нужный байт, но вот беда в модуле должна быть прописана нужная контрольная сумма, она находится по адресу x11h, т. к. фактически мы изменили всего один бит, то нам нужно уменьшить число по адресу x11h на 1. У меня было xC9h, стало xC8h, после этого закинуть полученный новый Setup модуль в BIOS c помощью MMTool. После прошивки и выключения-включения(обязательно), у вас в настройках BIOS появится меню Chipset.
А в нем еще настройки памяти, я у себя установил тайминги вместо 11-11-11-28 на 9-9-9-24.

Внимание! Данное действие или изменение частоты может привести к тому, что ноут не загрузится! Восстановление только на программаторе! Я предупредил!
Некоторые неправильные настройки в BIOSe могут привести к не включению ноута, восстановить который можно только на программаторе.

п. 2 Увеличиваем скорость графики GT 630M. Редактируем VBIOS

Дополнительная утилита NiBiTor.v6.06
С помощью MMTool выгрузить драйвер GT 630M 10de - 0de9.
Адреса частот core и boost (спасибо за наводки на адреса Klem):
6f8b - boost
7009 - boost
7066 - boost
7089 - core
Частота высчитывается следующим образом: частота * 2 конвертируем в hex и меняем в файле(помним про последовательность байтов). Я заменил core на частоту 720MHg, boost на 900MHg. Оставил тротлинг, это все таки защищает чип от перегрева.
Далее с помощью утилиты NiBiTor.v6.06 меняем частоты памяти (у меня 1025) и шрейдера (1600), сохраняем. Утилита сама посчитает контрольную сумму. И возвращаем драйвер в BIOS.

Вот и все! У кого получился кирпич, я не виноват!
PS: Я намеренно не выкладываю файлы, чтоб уменьшить кол-во кирпичей. Вы можете их запросить у меня по почте (файлы а не кирпичи ;)

Если вы знаете как разблокировать частоты процессора, прошу мне подсказать, буду очень благодарен, это как я понял где то в регионе ME.

среда, 1 мая 2013 г.

Свои действия на мультимедийные кнопки в Asus

По просьбе Олега Петушкова написал программу управления мультимедийными кнопками.
Проект вырос с проекта Мигаем подсветкой клавиатуры.
Программа заменяет C:\Program Files (x86)\ASUS\ATK Package\ATK Media\DMedia.exe
Чтоб все корректно работало DMedia.exe убрана из автозагрузки
Теперь о программе.
Возможности:

  1. Мигает подсветкой клавиатуры при приходе сообщения или поступления звонка Skype (Внимание! Microsoft прекращает поддержку Skype Desktop API т. о. данная функциональность может пропасть при установке новых версий Skype)
  2. Включает подсветку по расписанию
  3. Динамически подсвечивает клавиатуру когда нажимаете кнопки
  4. "Цветомузыка" - мигаем в такт музыке.
  5. Запускает 6 приложений кнопками FN+: Media(Instant key), 1, T, C, V и Enter цифровой клавиатуры (Настраивается)
  6. Посылает short cuts в программы указанные в списке.
  7. Имеет на каждую multimedia кнопку курсора 2 действия.   

Программа перехватывает все события посланные в DMedia от HControl и передает дальше в зависимости от настроек.
Установка:
  1. Установить программу из инсталляции.
  2. Настроить под свою программу (по умолчанию в списке присутствует управление VLC плейром).
 Настройка:
Управляемые программы ищутся по заголовку окна который определяется в поле "Title" с помощью regex 
Поле "Name" - просто имя программы(не несет функциональности)
Поле "Active" - использовать данное правило. (если галочка не стоит то обрабатываться не будет)
Поле "Post/Send" - использует разные методы работы с программой Send(галочка присутствует)  - посылает в активное окно нажатия кнопок, по этому окно которым управляем становится активным, Post посылает сообщения в любое окно и не делает это активным (нестабильно, использовать на свой страх и риск, может приводить к падению программ)
Поле "IfForeGround" - команды будут обрабатываться только если вы работаете в этом окне, окна помеченные этой галочкой обрабатываются в первую очередь.
Поле "RetToFront" -  возвращает в активность окно с которым вы работали перед нажатием кнопок, используется совместно с "Send"
Действия кнопок курсора программируются с помощью Keys Enumeration вписываем Member name кнопки через +. Пример CTRL+Left: ControlKey+Left
Кнопки поддерживают двойное быстрое нажатие таким образом можно запрограммировать 8 действий.
Скачать инсталляцию
Если есть баги(а они есть ;), то пишите)
02.05.2013 12:53 - новая версия исправил проблему со Скайпом. По идее если скайп не установлен, то теперь не будет вылетать, а только отключать функциональность мигания.
03.05.2013 - Пофиксил ошибки, спасибо Олегу Петушкову за помощь в тестировании и вылавливании ошибок.
05.05.2013 - Версия 2.0.2: В метод Post добавлена работа с кнопками alt, ctrl, shift
для окна определенного с помощью ".*" в Title события идут в текущие окно, таким образом можно делать глобальные short cuts. Мелкие исправления.
05.05.2013 - Версия 2.0.3: Добавил возможность запуска приложений с параметрами
Пример: открытия любимого сайта explorer.exe http://google.com
05.05.2013 - Версия 2.0.4: Теперь программа ест намного меньше памяти
07.05.2013 - Версия 2.0.5: "*." обрабатывается после окон помеченных "IfForeGround"
Добавлена в установку настройка для медиа кнопок и youtube.
12.05.2013 - Версия 2.0.6: Исправлена работа со Skype, убраны настройки youtube.
26.05.2013 - Версия 2.0.7: Добавлена автоматическое включение подсветки клавиатуры по времени, Добавлена динамическое включение подсветки, нажали на кнопку подсветка загорелась и через заданный промежуток потухла.
01.06.2013 - Версия 2.0.8: Добавлена "Цветомузыка" мигаем в такт музыке ;) Полезности ни какой, за то прикольно. Мелкие исправления и улучшения.
18.06.2013 - Версия 2.0.9: Много исправлений, меню в трее.
19.06.2013 - Версия 2.1.0: Исправление ошибок,  переименование проекта.
20.06.2013 - Версия 2.1.1: Добавлена функция Spark, устранена утечка памяти из-за SkypeApi.
02.11.2013 - Версия 2.2.1: Добавленна возможность на enter цифровой клавиатуры назначить своё приложение.
11.09.2014 - Подтверждена работа на ноутках Nx6, G550 и др.

Известные проблемы: При приходе сообщения не мигает - Skype API генерирует события после первых 2-х...4-х сообщений.

Примеры для Title:
.*VLC - ищет окно с названием в конце VLC
.* - любое окно

Примеры для кнопок:
для Alt + Ctrl + Shift + 2  вписываем LMenu+ControlKey+ShiftKey+D2

Пример запуска VLC:
"C:\Program Files\VideoLAN\VLC\vlc.exe" d:\music
Откроет VLC и проиграет музыку которая в d:\music


Скриншоты:

Если в окно Title ввести ".*", поставить галку на "Post/Send" и ввести в качестве горячих Up - MediaStop, Down - MediaPlayPause, Left - MediaPreviousTrack, Right - MediaNextTrack, то можно управлять приложением, поддерживающим клавиши мультимедиа, например Winamp


воскресенье, 17 марта 2013 г.

Мигаем подсветкой клавиатуры

Дело было вечером, делать было нечего. Купил я как то ноут Asus N56VM, в нем есть подсветка клавиатуры и подумалось мне, что просто подсветка это не интересно.
Что можно сделать с подсветкой? - Правильно! Помигать!
Вот и взялся я посмотреть как включается подсветка. После некоторых поисков, локализовал управление подсветкой с помощью клавиатуры в "C:\Program Files (x86)\ASUS\ATK Package\ATK Hotkey\HControl.exe". После дебагинка в IDA были найдено следующие:
что подсветка включалась - выключалась с помощью вызова DeviceIoControl с определенными параметрами. В результате была написана функция включения и регулировки подсветки.
        public static int GetLevel()
        {
            return Level(0, 0x424B4C47);
        } 
        public static int SetLevel(int level)
        {
            return Level(level, 0x424B4C53);
        }
        public static int Level(int level, int code)
        {
            byte[] outBuffer = new byte[0x300];
            int[] inBuffer = new int[6] { 2, 0, 1, 8, 0x040000, 0x80 };
            inBuffer[1] = code;
            inBuffer[5] = level | 0x80;
            bool result = false;
            int bytesReturned = 0;
            SafeFileHandle _hdev = new SafeFileHandle(CreateFile("\\\\.\\ATKACPI", 0xC0000000, 3, IntPtr.Zero, 3, 0, IntPtr.Zero), true);
            if (_hdev.IsClosed | _hdev.IsInvalid)
            {
                WarningMessage("Error opening device");
                return -1;
            }
            unsafe
            {
                fixed (byte* p1 = &outBuffer[0])
                {
                    fixed (int* p = &inBuffer[0])
                    {
                        result = DeviceIoControl(_hdev, 0x00222404, (IntPtr)p, 0x18, (IntPtr)p1, 0x300, out bytesReturned, IntPtr.Zero);
                    }
                }
            }
            if (result == false)
            {
                int error_code = Marshal.GetLastWin32Error();
                WarningMessage("error code: " + error_code);
                return -1;
            }
            if (code == 0x424B4C47)
            {
                return outBuffer[0x10];
            }
            return level;
        }
 Консольную утилиту для регулировки и мигания подсветки для Asus Nx6 можно скачать тут

 Но просто мигать подсветкой не интересно, по этому после непродолжительного изучения SkypeAPI была написана программа  которая мигает подсветкой при приходе сообщения или поступления звонка. Программа висит в трее и позволяет регулировать подсветку и мигает при событии от skype. Инсталляция убрана в связи с не актуальностью.
Программа работает на серии ноутбуков Asus Nx6  при установленном Skype.

Если у вас есть идеи как еще можно использовать подсветку клавиатуры, то пишите в комментариях.

14.04.3013 Добавлена возможность запускать свои приложения при нажатии fn+ 1, V, C