Простая автоматизация заполнения форм для Android QA инженера

Здравствуйте, друзья,
Статья для тех, кто часто сталкивается с заполнением различных форм регистрации, персональных данных и так далее. Как правило это, инженеры отдела качества и разработчики, которые проверяют работоспособность собственного продукта.
Если вы до сих пор делаете это вручную, то вы просто обязаны дочитать до конца 🙂
Исходные данные: Приложение для Android 2.2, имеет 2 формы:

  1. Форма регистрации пользователя (6 полей ввода и кнопка сабмит)
  2. Форма подтверждения регистрации с кнопкой возврата на форму регистрации

Задача: нам нужно протестировать поля ввода, кнопку Submit и возврат со второй формы на первую, за результатом следим самостоятельно.
Напишем скрипт, который за нас будет N раз заполнять форму регистрации (bash, Ubuntu 11.04, Android 2.2). При вызове скипта, передается целочисленный параметр N, который определяет количество повторений.
Не судите строго, это просто пример того, как можно автоматизировать достаточно нудный и рутинный процесс, цель поста показать как это сделать, а не то, как глубоко можно с этим зайти 🙂
# author: y.paulavets@softteco.com
# # User registration form stress test example
# Repeats 5 times
# adb shell input keyevent 23 - DPAD Center, to focus field
# adb shell input keyevent 20 - DPAD Down, to move to the next field
# adb shell input keyevent 66 - Enter, to hit the button

for (( i=1; i<=$1; i++ ))
do

echo “Iteration started: $i from $1”

adb shell input text “testuser@softteco.com”
adb shell input keyevent 23
adb shell input keyevent 20
adb shell input text “password”
adb shell input keyevent 23
adb shell input keyevent 20
adb shell input text “UserName”
adb shell input keyevent 23
adb shell input keyevent 20
adb shell input text “UserLastName”
adb shell input keyevent 23
adb shell input keyevent 20
adb shell input text “+375441122334”
adb shell input keyevent 23
adb shell input keyevent 20
adb shell input text “Male”
adb shell input keyevent 23
adb shell input keyevent 20

adb shell input keyevent 66

sleep 5

adb shell input keyevent 20
adb shell input keyevent 66

sleep 5

echo “Iteration finished: $i from $1”

done
Если сохранить этот скрипт, как test.sh, то после того, как вы ему дадите права на выполнение (используя chmod), вызвать его можно будет так:
~$ ./test.sh 5
Тестовое приложение, для Android 2.2 можно скачать здесь: git pull https://github.com/ypaulavets/Test-user-registration-form Приложение абсолютно примитивное, исключительно для демонстрации выше изложенного скрипта 🙂
Таблица кодов, которые вы можете использовать в команде "adb shell input keyevent":

КодЗначение
0KEYCODE_UNKNOWN
1KEYCODE_MENU
2KEYCODE_SOFT_RIGHT
3KEYCODE_HOME
4KEYCODE_BACK
5KEYCODE_CALL
6KEYCODE_ENDCALL
7KEYCODE_0
8KEYCODE_1
9KEYCODE_2
10KEYCODE_3
11KEYCODE_4
12KEYCODE_5
13KEYCODE_6
14KEYCODE_7
15KEYCODE_8
16KEYCODE_9
17KEYCODE_STAR
18KEYCODE_POUND
19KEYCODE_DPAD_UP
20KEYCODE_DPAD_DOWN
21KEYCODE_DPAD_LEFT
22KEYCODE_DPAD_RIGHT
23KEYCODE_DPAD_CENTER
24KEYCODE_VOLUME_UP
25KEYCODE_VOLUME_DOWN
26KEYCODE_POWER
27KEYCODE_CAMERA
28KEYCODE_CLEAR
29KEYCODE_A
30KEYCODE_B
31KEYCODE_C
32KEYCODE_D
33KEYCODE_E
34KEYCODE_F
35KEYCODE_G
36KEYCODE_H
37KEYCODE_I
38KEYCODE_J
39KEYCODE_K
40KEYCODE_L
41KEYCODE_M
42KEYCODE_N
43KEYCODE_O
44KEYCODE_P
45KEYCODE_Q
46KEYCODE_R
47KEYCODE_S
48KEYCODE_T
49KEYCODE_U
50KEYCODE_V
51KEYCODE_W
52KEYCODE_X
53KEYCODE_Y
54KEYCODE_Z
55KEYCODE_COMMA
56KEYCODE_PERIOD
57KEYCODE_ALT_LEFT
58KEYCODE_ALT_RIGHT
59KEYCODE_SHIFT_LEFT
60KEYCODE_SHIFT_RIGHT
61KEYCODE_TAB
62KEYCODE_SPACE
63KEYCODE_SYM
64KEYCODE_EXPLORER
65KEYCODE_ENVELOPE
66KEYCODE_ENTER
67KEYCODE_DEL
68KEYCODE_GRAVE
69KEYCODE_MINUS
70KEYCODE_EQUALS
71KEYCODE_LEFT_BRACKET
72KEYCODE_RIGHT_BRACKET
73KEYCODE_BACKSLASH
74KEYCODE_SEMICOLON
75KEYCODE_APOSTROPHE
76KEYCODE_SLASH
77KEYCODE_AT
78KEYCODE_NUM
79KEYCODE_HEADSETHOOK
80KEYCODE_FOCUS
81KEYCODE_PLUS
82KEYCODE_MENU
83KEYCODE_NOTIFICATION
84KEYCODE_SEARCH
85TAG_LAST_KEYCODE

На заметку: 1. Если вы используете "adb shell input text "bla bla bla", будьте внимательны с использованием пробелов, данная команда вводит текст до первого пробела 🙂
2. Скрипт также можно полностью параметризировать, например заменить все вводимые значения в ковычках на $2 $3 $4 $5 $6 $7 соответственно, в этом случае, вызов теста будет выглядеть так:
./test.sh 5 "testuser@me.by" "pass" "MyFirstName" "MyLastName" "+375283334456" "Male"
3. Исходя из пункта #2 можно сделать более серьезную автоматизации, точно так же, как удобный помощник для ввода текста на Андроид устройстве, например прописав скрипт в
.bashrc,
как
alias testRegistration="/home/yahor/test.sh 5 "testuser@me.by" "pass" "MyFirstName" "MyLastName" "+375283334456" "Male""
и вызывать по мере необходимости будет очень просто и удобно. 4. Если у вас подключенно постоянно несколько устройств, то необходимо добавить в скрипт параметр серийного номера устройства, чере параметр -s:
adb -s $2 shell [...]
В этом случае вызов скрипта будет таким:
./test.sh 5 emulator-5554
5. Практически аналогичным способом можно оттестировать и более сложные сценарии, симулируя пользовательское нажатие на экран и кнопки устройства, если вам это интересно – сообщите, я напишу еще один пост 🙂 6. Для устранения большого числа копи паста, разумно одинаковые блоки кода собирать в функции (должны быть объявлены строго в начале файла):
function clickNextField { adb shell input keyevent 23 adb shell input keyevent 20 }

Тестируйте в радость! (:
С уважением,
Егор