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

GUI-тестирование "по-русски". Скажем так. "Анонс существующих возможностей"

Вот тут - http://18delphi.blogspot.ru/2013/11/gui_4.html я описал слово "Нажать". Которое позволяет нажимать клавиши и отправлять их текущему контролу.

Используется это слово так:

"Нажать {('Enter')}"
"Нажать {('Tab')}"
"Нажать {('Shift-Tab')}"
"Нажать {('Down')}"

А если надо нажать скажем 5 раз?

 Ну можно написать так:
"Нажать {('Down')}"
"Нажать {('Down')}"
"Нажать {('Down')}"
"Нажать {('Down')}"
"Нажать {('Down')}"

А если 100? А тысячу?

 На самом деле у нас в языке конечно есть циклы. Разные.

 Один из них - LOOP.

 Его использование выглядит так:

 5 LOOP "Нажать {('Down')}"

Этот пример нажимает клавишу "стрелка вниз" 5 раз. 

Кстати давайте его сразу перепишем:

Введём в словарь определение:

CONST "Стрелка вниз" 'Down'

Тогда пример можно переписать так:

 5 LOOP "Нажать {("Стрелка вниз")}"

По-русски? Да вроде бы - да, но не совсем.

Как это переписать "по-русски"?

До сих пор нам встречались определения новых слов такие как PROCEDURE и FUNCTION.

Они умеют работать с "параметрами слева", т.е. с теми значениями, которые помещены на стек значений.

Но. Есть и ещё одно слово для определения НОВЫХ пользовательских слов.

Называется - WORDWORKER.

Оно умеет работать не только с "параметрами слева", но и с "параметрами справа". Давайте посмотрим на пример его использования.

Напишем:
 WORDWORKER раз INTEGER IN aCount // - aCount это "параметр слева"
  aCount LOOP // - LOOP - уже знакомый нам оператор цикла
  ( 
   WordToWork // - WordToWork - "параметр справа", т.е. ссылка на то, что идёт за нашим словом
   DO // - вычисляет значение WordToWork. В терминах паскаля DO "эквивалентен" операции ^, или в терминах C - *
  )
 ; // раз 

Теперь наш пример можно написать так:

 5 раз "Нажать {("Стрелка вниз")}"

А если нам надо нажать 2 раза? Но пока это выглядит так:

 2 раз "Нажать {("Стрелка вниз")}"

По-русски? Вроде - да.

Но не совсем. Коряво очень. "По-колхозному".

Что можно сделать?

Можно конечно определить слово "раза", через WORDWORKER, но это не очень здорово. Дублирование кода и всё такое...

Но на наше счастье у нас в аксиоматике есть слово WordAlias. Которое занимается тем, что определяет синонимы к уже определённым словам.

При этом это именно - синонимы, а не вызов или повторение кода.

 Воспользуемся словом WordAlias:

 WordAlis раза раз
 // - это синоним к слову "раз"

Как только мы это написали, то мы можем писать так:

 5 раз "Нажать {("Стрелка вниз")}"
 2 раза "Нажать {("Стрелка вниз")}" 

Ну и ещё один штрих:

WordAlias "Стрелку вниз" "Стрелка вниз"

Тогда пример можно переписать так:

 5 раз "Нажать {("Стрелку вниз")}"
 2 раза "Нажать {("Стрелку вниз")}" 

Надеюсь, что идея понятна.

Ну и в завершение - хочу сказать, что это был пример использования слова WORDWORKER.

На самом деле при наличии слова WordAlias - изначально можно было написать так:

WordAlias раз LOOP
 // - это синоним к слову LOOP
WordAlis раза раз
 // - это синоним к слову "раз"

Все остальные примеры - остаются без изменений.

Думаю, что в ближайшем будущем - я напишу заметку о том, "как это устроено внутри" со стороны Delphi.

А следующая серия незамедлительно следует вот тут - http://18delphi.blogspot.com/2013/11/gui-2_6.html (в ближайшие 30 мин я её напишу). Но она тоже из разряда "анонсов".

P.S. Что характерно - мы в этой статье практически нигде не упомянули Delphi и код на нём.

Т.е. мы уже "достаточно быстро" оторвались от базового языка и начали оперировать терминами DSL (http://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%B5%D0%B4%D0%BC%D0%B5%D1%82%D0%BD%D0%BE-%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F)

P.P.S. Можно кстати и "по-английски":

WordAlias times LOOP
 // - это синоним к слову LOOP
WordAlias "Press" "Нажать"

Тогда можно написать код:

5 times "Press {('Down')}"

Понятное дело, что грамматика остаётся ФОРМАЛЬНОЙ.

И есть всякие скобочки/закорючки.

И о "программировании на естественном языке" - речь не идёт.

 Но! Для тестов это по-моему - самое оно.

Тестировщик может открыть код теста и повторить ТО ЖЕ САМОЕ руками.

Конечно он должен знать (или догадываться) о назначении скобочек и закорючек.

Комментариев нет:

Отправить комментарий