Сегодня я хочу помочь вам лучше управлять вашими автоматизированными тестами GUI (Selenium). В прошлом я видел много разных способов, которыми люди справляются с этим. Некоторые люди просто пишут эти простые HTML TestCases с помощью Selenium-IDE, сохраняют их где-то на жестком диске и запускают вручную при необходимости. Другие даже не используют Selenium-IDE. Они пишут чистый Java для примера и автоматизируют их выполнение с помощью JUnit. Мое сегодняшнее решение лежит между ними.
непременное условие
- Я хочу простой HTML TestCases, созданный с помощью Selenium-IDE. Так что кто-то с небольшими навыками программирования может создавать их.
- Я хочу, чтобы эти тесты GUI запускались автоматически в процессе сборки, чтобы мой CI-Tool мог уведомлять меня об ошибках.
- Я также хочу, чтобы все TestCases в Versioncontrol находились в моем репозитории проектов, поскольку тесты растут вместе с источником.
- Я хочу самых маленьких усилий с самым высоким результатом. Поэтому я не хочу экспортировать тесты JUnit из моих тестовых примеров HTML, поскольку это будет своего рода дублирование — и я хочу придерживаться принципа СУХОЙ.
Решение
Прежде всего, я создаю Папку в своем Проекте для Selenium-Tests.
Структура папок
Пример TestSuite
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><head> <meta content="text/html; charset=UTF-8" http-equiv="content-type"/> <title>Test Suite</title></head><body><table id="suiteTable" cellpadding="1" cellspacing="1" border="1" class="selenium"> <tbody> <tr> <td><b>Test Suite</b></td> </tr> <tr> <td><a href="./SomeTest1.html">SomeTest1</a></td> </tr> <tr> <td><a href="./SomeTest2.html">SomeTest2</a></td> </tr> </tbody></table></body></html> |
Пример теста
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <link rel="selenium.base" href=""/> <title>SomeTest1.html</title></head><body><table cellpadding="1" cellspacing="1" border="1"> <thead> <tr> <td rowspan="1" colspan="3">SomeTest1</td> </tr> </thead> <tbody> <tr> <td>open</td> <td>/</td> <td></td> </tr> <tr> <td>waitForElementPresent</td> <td>//div[@id='someId']</td> <td></td> </tr> <tr> <td>click</td> <td>css=button.create</td> <td></td> </tr> <!-- Some Steps --> <tr> <td>assertText</td> <td> //div[@id='someId'] </td> <td>${expectedText}</td> </tr> </tbody></table></body></html> |
Настройка веб-сервера
Так что у меня есть мой TestSuite на месте. Но как мне их запустить? Самое главное, он должен работать в рамках процесса сборки Maven, поэтому он также будет работать на Jenkins-CI или чем-то еще. Поскольку мы проводим тестирование с реально работающим WebApp, это IntegrationTest для каждого определения. В Maven у нас есть возможность проводить такие тесты в рамках фазы интеграционных тестов . Если вы хотите узнать больше о жизненном цикле сборки Maven и его этапах, проверьте это . Поэтому нам нужен какой-то WebServer для запуска нашего WebApp, иначе тесты не будут работать. WebServer должен быть запущен до фазы тестирования интеграции , а затем остановлен. Мы могли бы использовать Tomcat7 или Jetty, например. В этом примере я буду использовать tomcat7-maven-plugin. Я настраиваю свой pom.xml для запуска предварительного тестирования Tomcat7.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
<plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.0</version> <executions> <execution> <id>tomcat-run</id> <goals> <goal>run-war-only</goal> </goals> <phase>pre-integration-test</phase> <configuration> <port>8080</port> <fork>true</fork> </configuration> </execution> <execution> <id>tomcat-shutdown</id> <goals> <goal>shutdown</goal> </goals> <phase>post-integration-test</phase> </execution> </executions></plugin> |
Если вы выполняете несколько проектов на CI-сервере, вы можете рассмотреть возможность использования разных номеров портов для каждого проекта.
Наконец: запустите тесты
И последнее, но не менее важное: нам нужно запустить тесты. К счастью, есть этот плагин Selen-Maven, который делает эту работу.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
|
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>selenium-maven-plugin</artifactId> <version>2.3</version> <configuration> <browser>*firefox</browser> <suite>src/test/selenium/TestSuite.html</suite> </configuration> <executions> <execution> <id>run-selenium-tests</id> <phase>integration-test</phase> <goals> <goal>selenese</goal> </goals> </execution> </executions></plugin> |
Теперь, когда мы выполняем mvn clean verify или даже mvn clean install в консоли, тесты запускаются и отчеты сохраняются в целевом каталоге. Это также будет сделано вашим CI-Tool.
Вывод
У нас есть полная и чистая установка.
- У нас есть место для хранения наших тестов,
- Они находятся в пределах исходного кода и контроля версий
- Они могут запускаться автоматически CI-Tools
- Даже не разработчики могут добавлять новые тестовые случаи
Кстати: не сдавайтесь, если что-то не работает, как задумано. Селен кажется немного глючным, и иногда приходится копать немного, чтобы решить проблемы. Но это действительно работает, я понял это.
