Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Тестирование приложений > авто тестирование


Автор: Vidocq 27.4.2005, 17:32
Мои кривые ручонки наконец-то добрались и до автотестинга.

Что ж, пристуупим smile

Тулов автотестинга выпущено множество великое, но большинство из них - буржуйские. А буржуи, как известно, за здорово живешь кодить не будут. Поэтому бесплатных тулов не так много, как хотелось бы. smile

Мне попался под руку TestComplete 2.0.2.0 компании AutomatedQA's (автоматизированное обеспечение качества, то бишь smile). Правда демоверсия.
Больше всего меня интересовала в этом чуде вражеской техники, ессно, возможность записи скриптов с последующим их воспроизведением. И я, начитавшись вумных мануалов, взялся за дело.

Прежде всего надо создать проект. Затем - приложение для тестирования, указав путь к исполняемому файлу. Автоматически создастся юнит, в который будет писАться скрипт.

Чисто прикола ради я выбрал фар в качестве тестируемого приложения.

Записывать и проигрывать скрипты оказалось простым и очень интетесным делом. Весь процесс очень сильно напоминает запись макросов в M$ Office или анимации в 3D MAX'e. Затем всё просто и красиво: запускаешь приложение и жмёшь кнопку "Запись". Потом выполняешь необходимую последовательность действий, которая составляет собственно тест. Когда необходимые манипуляции завершены, жмёшь кнопку "Stop", останавливая запись скрипта.

Совсем забыл сказать, TestComplete поддерживает аж 4 языка скриптов: VBScript, C++Script, DelphiScript и JScript. Перед созданием проекта надо указать, на каком языке будет производиться запись. Я выбрал VBScript, хотя это и потребовало даунлода MSD (Скрипт Дебаггер) с сайта Микрософта. Хотя если пофиг, на каком языке скрипты дебажить, то лучше выбрать C++Script. Он не требует скачивания MSD.

Остановив запись, видим что во вкладке Editor/Test Log появился сам скрипт.
Код

Sub Main
    Call Test1
End Sub

Sub Test1
    Set p = Sys.Process("Far")
    Set w = p.Window("ConsoleWindowClass", "*")
    w.Activate
    Call Sys.Keys("~[Win]~[F9][Enter][Home][Enter][F7][Enter][Enter][Tab]![End][F5][Enter][Tab][Enter][F8][Enter][Right][Enter]")
End Sub


Запись производится в отдельную процедуру (Test1), а вызывается из процедуры Main.
Этот скрипт описывает, как я вызвал Фар, поднялся из его папки в корень С:\, создал там папку, зашёл в неё, перепрыгнул на другую панель и скопировал содержимое текущей папки во вновь созданную. Затем удалил её.

Как видно, TestComplete просто записал последовательность нажатых мной клавиш, возложив их выполнение на Фар. Таким образом понятно, что скрипт сработает только в контексте тестируемого приложения.
После этого я проиграл скрипт. Интересно было заметить, что он был помечен как успешный, хотя в Фаре прошёл только процесс копирования. А вот удаление не прошло.

Попарившись совсем малость, я заставил скрипт удалять скопированные файлы. Пришлось полученный скрипт немного переписать ручками:
Код

Sub Test4
    Set p = Sys.Process("Far")
    Set w = p.Window("ConsoleWindowClass", "*")
    w.Activate
    Call Sys.Keys("[Enter][Home][Enter][F7][Enter][Enter][Tab][Down]![End][F5][Enter]")
    Call Sys.Delay(10000)
    
    Call Sys.Keys("[Tab]![End][F8]")
    Call Sys.Delay(1000)
    
    Call Sys.Keys("[Enter]")
    Call Sys.Delay(1000)
    
    Call Sys.Keys("[Enter]")
    Call Sys.Delay(1000)    
    
    Call Sys.Keys("[Right]")
    Call Sys.Delay(1000)    
    
    Call Sys.Keys("[Enter]") 
End Sub

Фича Sys.Delay(ms int) как раз откладывает (приостанавливает) выполнение скрипта на заданное количество миллисекунд.

В целом запись и "произведение" скрипта я нашёл удобным. Понятный язык скриптов позволяет легко переписывать код под изменения в тестируемой проге. А при минимальной работе с хелпом добиться от скрипта того, чтоб он тестирвал именно то, что нужно, ваще не проблема.

Всё.
Спасибо за внимание и до новых встреч в эфире smile smile smile

Автор: batigoal 27.4.2005, 18:30
Тебе спасибо.
А вот такой вопрос: если мне нужно что-то забивать в форму, то как это отразить в скрипте, чтобы он вводил каждый раз новое значение (напр., случайную строку)?

Автор: Vidocq 28.4.2005, 15:57
LamerВ George
Пока не разобрался, так что приходится в скрипте каждый раз менять. smile

Автор: Guest 31.5.2005, 14:28
Интересно, а как ты собираешься делать проверку того, что ты тестируешь?

Автор: Vidocq 6.6.2005, 16:34
2 Guest,
Извини, не понял smile

Автор: chief39 10.6.2005, 12:18
Если гвеста правильно понял....
Не знаю какая задача у Vidocq.... НО!

Лично у нас ведутся переговоры о внедрении такой системы (какая именно будет - не скажу - не знаю).

Суть не в том чтоб сделать то что Junit делает, а просто кусок рутины переложить с тестера.

Мне, например, чтобы протестить одну процедурку с архи-хитро-реализованным расчётом пришлось попросить тестера создать нужную ситуацию.
В реале, такую ситуацию создают часами и днями много людей. Прошу понять меня правильно - это просто результат деятельности нескольких дней в реальной жизни. smile
Но мне она нужна срочно. Тестер потратил около получаса тыкая в кнопки разных наших клиентских прог чтобы её создать. Причём он может ошибиться при вводе - и всё насмарку.
А если мне надо 5-6 таких тестов... то... smile ( Причём откатить "испорченный" процесс назад гораздо сложнее чем пересоздать - иногда просто невозможно).
Если применять вышеописанную систему - работа тестера сократится до 1-2 минут:
- взять скрипт
- изменить данные немного под конкретный случай
- запустить эту утилитку

А) 30 минут >> 1-2 минуты
Б) кол-во ошибок (сколько их сделает человек за полчаса рутины и сколько за минуту правки значений)

ЗЫ: Вроде бы уже решили эту систему писать самостоятельно, заточенную под нас




Автор: chief39 10.6.2005, 12:35
Да! забыл, собственно, ответить на вопрос:
Цитата(Guest @ 31.5.2005, 14:28)
Интересно, а как ты собираешься делать проверку того, что ты тестируешь?

Отвечаю: никак.
Не в этом суть smile
Тестирование ведь состоит из:
- Подготовки к нему (приведение тестируемого к состоянию от которого "понеслась")
Например, для тестирования приложения которое работает с БД необходима, как
минимум, БД. Ну и некая структура данных. И данные ессно.
- Выполнение тестируемых действий - собственно тестирование ( не только "правильные"
действия юзера, но и "неправильные", но вполне возможные ).
- Собственно, "разглядывание" результатов smile
- Ну и выводы с мерами пресечения: вплоть до перепроектирования системы.

Эту штуковину можно использовать для первого пункта (как мне бы сейчас было полезно smile ). И для второго тоже. В принципе. Хотя во втором пункте может быть дебаг кода (как у меня smile )
Ну а третий пункт.... тоже неплохо бы smile
И ещё четвёртый - чтоб от кофе не отвлекаться на всякие глупости вроде проектирования и кодирования smile

Автор: stron 10.6.2005, 15:12
У нас для тестирования используется SilkTest

Автор: BearBeer 12.5.2011, 13:07
под Виндовс категорически рекомендую AutoIt
+ Freeware
+ очень продвинуто community (правда большей частью на английском, но встречал и русские форумы)
+ хороший Help

- нет возможности мапить обьекты в базу, но если наловчиться, то не так страшно
- рекордер оставляет желать лучшего - преимущественно писать руками стоит
- всякие чекпоинты и логи тоже лучше самому написать, под себя

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)