Простая автоматизация заполнения форм для 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":

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

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