Разбираемся в запуске тестов в Jenkins (+Maven +TestNG +WebDriver на Java) или туториал новичка

maven
testng
java
jenkins
webdriver
Теги: #<Tag:0x00007fedbfd95cd8> #<Tag:0x00007fedbfd959b8> #<Tag:0x00007fedbfd95800> #<Tag:0x00007fedbfd95148> #<Tag:0x00007fedbfd94ea0>

(Кирилл) #1

Есть задача: запускать тесты, написанные на #selenium #webdriver ( #java + #testng ) после чего сделать сборку на #maven и все это исполнять автоматически в Continious Integration System #jenkins . При этом все делать максимально просто c помощью визуальных средств.

Я буду описывать тезисно предпринятые шаги, сложности с которыми столкнулся и пути их решения, надеюсь на вашу помощь и советы. Тестировал почту ukr.net, я только начинающий в этих технологиях, поэтому не судите строго, все что здесь написано это мои пробы, ошибки и выводы... часто тоже ошибочные :slight_smile:

Цель: самообучение и помощь тем, кто захочет освоить те же инструменты.

Необходимые знания: #webdriver и уметь писать на нем тесты, понимание test suite, #testng - буквально самые базовые аннотации, #eclipse .

Вдохновил меня вебинар А. Дзыни - Строим Web Testing #framework за 20 минут где он быстро пробежался по фреймворку #page-object + #page-factory и закинул это все в Jenkins, сборка через #maven. Я решил сделать нечто подобное, но у меня пока есть сложности с этим...

Что уже проделано:

I. #eclipse, #testng, #webdriver

1. Создаем проект на #eclipse.

Особенности:

  1. структура проекта (как расположены, папки, а в нем пекеджи (что является тоже папками)) важна для сборки в #maven::tag:
    папки:
    • src/main/java - внутри пекедж net.ukr.pages - находятся классы страниц ( шаблон #page-object)
    • src/main/resources - на всякий случай для разных ресурсов, файлов, проперти и т.д.
    • src/test/java - здесь пекедж net.ukr.tests - в нем находятся классы тестов
  2. не забываем добавить в build path библиотеки selenium и #testng

2. Пишем код теста на #java используя команды #selenium #webdriver и аннотации #testng

Я использовал Паттерн #page-object без Page Factory т.к. есть ряд неудобств связанных с инициализацией сразу всех элементов на странице если она динамическая, более подробно если интересно на блоге автора http://iainrose.tumblr.com/post/27612544255/closing-the-page-factory но это не так важно для нас.

http://iainrose.tumblr.com/post/27612544255/closing-the-page-factory

Про паттерн #page-object написано много, здесь я описывать его не буду, отличное видео вот: http://youtu.be/RlppaRSqvhs и http://youtu.be/MwVSvUIqOE0.

3. Запуск тестов +создание TestNG.xml

Для #eclipse есть специальный плагин #testng с ним проще запускать тесты, установить его можно прямо с #eclipse. Запускаем, смотрим чтобы все работало. (Run as...)

Когда все работает нам нужно создать файл в формате xml который будет нести информацию как именно запускать тесты (какие включать, какие - нет, группы, пекеджи, классы и т.д.).

Почитать как настраивать такой файл можно в этом оф. туториале http://testng.org/doc/documentation-main.html#testng-xml

Вот мой простенький код, он говорит что нужно запускать только мой один пекедж где мои классы тестов и лежат.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="net.ukr.TestNG by packages">
 <test verbose="2" name="net.ukr.tests">
    <packages>
     <package name="net.ukr.tests"/>
    </packages>
 </test>
</suite>

Сохранить этот код нужно в корне папки проекта назвав его testng.xml.

Обновляем проект чтобы файл появился в дереве Package Explorer (правой кнопкой на проекте - Refresh)

Теперь нужно запустить тесты через этот testng.xml чтобы проверить правильно ли мы его создали. Для этого надо зайти в Run Configurations там создать новый запуск #testng, выбрать нужный проект и поле Run... выбрать Suite - выбираем наш testng.xml.

Запускаем, если все работает через этот файл мы можем переходить к созданию билда в #maven.

II. #maven

1. Подготовление к запуску #maven

Мавен делает сборки проектов. Делается это через командную строку. Чтобы мавен знал что и как собрать, а так же что туда добавить (например зависимости - dependencies) мы все это описываем в файле pom.xml который лежит в корне проекта.

Для облегчения процесса сборки и создания pom.xml файла для эклипса был создан плагин m2eclipse. Установить m2eclipse можно прямо с эклипса в окне Install New Software (Help).

Будем работать через этот плагин, он фактически является графическим интерпретатором кода который заносится в pom.xml.

Итак, установили m2e плагин, теперь делаем из проекта - мавен проект - правой кнопкой на проект Configure - Convert to #maven project.

Заполняем форму и получаем pom.xml файл в корне папки проекта.

//если выскочит еррор "Build path specifies execution environment J2SE-1.5. There are no JREs installed in the workspace that are strictly compatible with this environment." - заходим в Build Path проекта и там JRE System Library [JavaSE-1.Х] - жмет Edit... и выбираем нужную версию, ошибка должна пройти

Dependency

Так как в нашем проекте есть как минимум две зависимости (dependency) это testng-6.7.jar и selenium-server-standalone-2.21.0.jar необходимо их внести в пом файл.
Для этого заходим в него (двойной клик) и выбираем вкладку Dependencies - Add...
и там начинаем вводить в третей строчке для поиска - "testng", находим нужный нам (org.testng) и добавляем. Так же находим и селениум написав "selenium java" и выбрали последний билд.

И org.apache.maven.plugins - maven-surefire-plugin -после его добавления внимательно проверить чтобы этот плагин в пом файле разместился внутри тега <plugins><plugin></plugins></plugin>, а не в депенденси тегах.

Подключение testng.xml

Обновляем пом файл чтобы оно видело testng.xml который покажет какие методы запускать.

вставить нужно такой код:

<plugins>
   [...]
     <plugin>
       <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-surefire-plugin</artifactId>
       <version>2.12.2</version>
       <configuration>
         <suiteXmlFiles>
           <suiteXmlFile>testng.xml</suiteXmlFile>
         </suiteXmlFiles>
       </configuration>
     </plugin>
   [...]
</plugins>

Готовый pom.xml файл

Итак у нас есть готовый пом файл, проверим на всякий случай его исходник чтобы быть увереными что все в нем есть:

нам для запуска необходимо иметь минимум два плагина maven-compiler-plugin и maven-surefire-plugin (в тегах которого мы прописали наш testng.xml), а так же для нашего проекта подключенные две зависимости тестэнджи и селениум, +testng.xml.

Получился такой код pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"&gt;
  <modelVersion>4.0.0</modelVersion>
  <groupId>net.ukr</groupId>
  <artifactId>net.ukr</artifactId>
  <version>1.0-SNAPSHOT</version>
  <name>UkrNet_MavenName</name>
  <description>UkrNet_MavenDescription</description>
  <build>
    <plugins>
      <plugin>
      <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.3.2</version>           
        <configuration>
          <source>1.7</source>
          <target>1.7</target>
        </configuration>
      </plugin>
      <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.12</version>
          <inherited>true</inherited>
            <configuration>
          <suiteXmlFiles>
            <suiteXmlFile>testng.xml</suiteXmlFile>
          </suiteXmlFiles>
        </configuration>
      </plugin>
    </plugins>
  </build>
  <dependencies>
      <dependency>
          <groupId>org.testng</groupId>
          <artifactId>testng</artifactId>
          <version>6.7</version>
          <scope>test</scope>
      </dependency>
      <dependency>
          <groupId>org.seleniumhq.selenium</groupId>
          <artifactId>selenium-java</artifactId>
          <version>2.24.1</version>
      </dependency>
  </dependencies>
</project>

2. Запуск #maven

Запускаем: Run As... #maven Test

// если видим такой еррор:
[ERROR] Unable to locate the Javac Compiler in:
[ERROR] C:\Program Files\Java\jre7..\lib\tools.jar
[ERROR] Please ensure you are using JDK 1.4 or above and
[ERROR] not a JRE (the com.sun.tools.javac.Main class is required).
[ERROR] In most cases you can change the location of your Java
[ERROR] installation by setting the JAVA_HOME environment variable.

Решение: в свойствах проекта если зайти в Java Build Path видно что проект запускается через JRE. Необходимо изменить на jdk (если его нет - скачать). Edit.. - и выбрать jdk запускальщик.

В итоге мейвен создает сборку, запускает тест, унас открывается браузер и проходит тестирование как обычно. Теперь переходим к передачи запуска в Jenkins.

III Jenkins

1. Установка и подготовка к работе

http://jenkins-ci.org/ - оф. страница, справа сразу можно скачать под нужную ОС сам Jenkins.

Устанавливаем, заходим в браузере localhost:8080 и попадаем в ИнфоПанель.

Настроики: Скорее всего это не все, потому что на данный момент у меня не запускается правильно мой тест съют, но в любом случае вот вкладки которые я настраивал

заходим в Настроить #jenkins - Конфигурирование системы :

JDK:

JDK имя: jdk1.7.3

JAVA_HOME: C:\Program Files\Java\jdk1.7.0_03

Maven

Maven имя: MAVEN

MAVEN_HOME: C:\My Files\Distrib\apache-maven-3.0.4-bin\apache-maven-3.0.4 (скачать можно здесь http://www.apache.org/dyn/closer.cgi?path=/maven/binaries/apache-maven-3.0.4-bin.zip )

больше ничего не менял.

2. Запуск

Необходимо создать новый job (Переходим в меню в "Новая задача"). Выбираем "Создать проект maven2/3", пишем имя для нашей Новой Задачи например MyTEST1.

Дальше появляется окно настроек нового джоба. Я изменил только поля раздела Сборка

Корневой POM: C:\Users\HP\workspace\net.ukr - полный путь к папке проекта где лежит пом файл. net.ukr - у меня так проект называется.

Goals and options: clean test

Жмем Сохранить и получаем новую задачу. Запускаем ее - кликнув по "Запустить сейчас".

Слева появится полоска прогресса процесса сборки. Кликнув на нее перейдем на конкретную сборку. В ней можно посмотреть текущее положение дел нажав "Вывод консоли".

Как результат вывод консоли у меня следующий:

Started by user anonymous
Building in workspace C:\Program Files (x86)\Jenkins\workspace\UkrNetMavenJenkinsTest
Parsing POMs
[net.ukr] $ "C:\Program Files\Java\jdk1.7.0_03/bin/java" -cp "C:\Program Files (x86)\Jenkins\plugins\maven-plugin\WEB-INF\lib\maven3-agent-1.2.jar;C:\Program Files (x86)\Jenkins\tools\Maven\MAVEN\boot\plexus-classworlds-2.4.jar" org.jvnet.hudson.maven3.agent.Maven3Main "C:\Program Files (x86)\Jenkins\tools\Maven\MAVEN" "C:\Program Files (x86)\Jenkins\war\WEB-INF\lib\remoting-2.16.jar" "C:\Program Files (x86)\Jenkins\plugins\maven-plugin\WEB-INF\lib\maven3-interceptor-1.2.jar" 56253
<===[JENKINS REMOTING CAPACITY]===>channel started
log4j:WARN No appenders could be found for logger (org.apache.commons.beanutils.converters.BooleanConverter).
log4j:WARN Please initialize the log4j system properly.
Executing Maven:  -B -f C:\Users\HP\workspace\net.ukr\pom.xml clean test
[INFO] Scanning for projects...
Projects to build: [MavenProject: net.ukr:net.ukr:1.0-SNAPSHOT @ C:\Users\HP\workspace\net.ukr\pom.xml]
projectStarted net.ukr:net.ukr:1.0-SNAPSHOT
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building UkrNet_MavenName 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
mojoStarted org.apache.maven.plugins:maven-clean-plugin:2.4.1(default-clean)
[INFO] 
[INFO] --- maven-clean-plugin:2.4.1:clean (default-clean) @ net.ukr ---
[INFO] Deleting C:\Users\HP\workspace\net.ukr\target
mojoSucceeded org.apache.maven.plugins:maven-clean-plugin:2.4.1(default-clean)
mojoStarted org.apache.maven.plugins:maven-resources-plugin:2.5(default-resources)
[INFO] 
[INFO] --- maven-resources-plugin:2.5:resources (default-resources) @ net.ukr ---
[debug] execute contextualize
[WARNING] Using platform encoding (Cp1251 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 2 resources
mojoSucceeded org.apache.maven.plugins:maven-resources-plugin:2.5(default-resources)
mojoStarted org.apache.maven.plugins:maven-compiler-plugin:2.3.2(default-compile)
[INFO] 
[INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ net.ukr ---
[WARNING] File encoding has not been set, using platform encoding Cp1251, i.e. build is platform dependent!
[INFO] Compiling 7 source files to C:\Users\HP\workspace\net.ukr\target\classes
mojoSucceeded org.apache.maven.plugins:maven-compiler-plugin:2.3.2(default-compile)
mojoStarted org.apache.maven.plugins:maven-resources-plugin:2.5(default-testResources)
[INFO] 
[INFO] --- maven-resources-plugin:2.5:testResources (default-testResources) @ net.ukr ---
[debug] execute contextualize
[WARNING] Using platform encoding (Cp1251 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory C:\Users\HP\workspace\net.ukr\src\test\resources
mojoSucceeded org.apache.maven.plugins:maven-resources-plugin:2.5(default-testResources)
mojoStarted org.apache.maven.plugins:maven-compiler-plugin:2.3.2(default-testCompile)
[INFO] 
[INFO] --- maven-compiler-plugin:2.3.2:testCompile (default-testCompile) @ net.ukr ---
[WARNING] File encoding has not been set, using platform encoding Cp1251, i.e. build is platform dependent!
[INFO] Compiling 3 source files to C:\Users\HP\workspace\net.ukr\target\test-classes
mojoSucceeded org.apache.maven.plugins:maven-compiler-plugin:2.3.2(default-testCompile)
mojoStarted org.apache.maven.plugins:maven-surefire-plugin:2.12(default-test)
[INFO] 
[INFO] --- maven-surefire-plugin:2.12:test (default-test) @ net.ukr ---
[INFO] Surefire report directory: C:\Users\HP\workspace\net.ukr\target\surefire-reports
 
-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running TestSuite
Attempt of waitingForIsdisplayed with Locator - By.xpath: .//*[@id='msglist_rows'] is: 1
Comparing .getText (Операция выполнена) from element (locator: By.xpath: .//*[@id='info-block']) with CharSequence [Операция выполнена] - PASSED. Return true. 
Letter sent. Confirmation is displayed. Assert - pass
sentLetterCountOld 3
Tests run: 3, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 2,230.54 sec <<< FAILURE!
 
Results :
 
Failed tests:   testSendMail(net.ukr.tests.MainFunctions): Element not found in the cache - perhaps the page has changed since it was looked up(..)
 
Tests run: 3, Failures: 1, Errors: 0, Skipped: 0
 
mojoSucceeded org.apache.maven.plugins:maven-surefire-plugin:2.12(default-test)
[ERROR] There are test failures.
 
Please refer to C:\Users\HP\workspace\net.ukr\target\surefire-reports for the individual test results.
[JENKINS] Recording test results
projectSucceeded net.ukr:net.ukr:1.0-SNAPSHOT
sessionEnded
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 37:20.883s
[INFO] Finished at: Mon Aug 20 20:32:12 EEST 2012
[INFO] Final Memory: 21M/178M
[INFO] ------------------------------------------------------------------------
Projects to build: [MavenProject: net.ukr:net.ukr:1.0-SNAPSHOT @ C:\Users\HP\workspace\net.ukr\pom.xml]
[JENKINS] Archiving C:\Users\HP\workspace\net.ukr\pom.xml to C:\Program Files (x86)\Jenkins\jobs\UkrNetMavenJenkinsTest\modules\net.ukr$net.ukr\builds\2012-08-20_19-54-48\archive\net.ukr\net.ukr\1.0-SNAPSHOT\net.ukr-1.0-SNAPSHOT.pom

Ожидаю пока #jenkins закончит сбор данных

ERROR: Illegal address
channel stopped
ERROR: Illegal address
javax.mail.internet.AddressException: Illegal address in string ``''
        at javax.mail.internet.InternetAddress.<init>(InternetAddress.java:114)
        at hudson.tasks.Mailer.StringToAddress(Mailer.java:152)
        at hudson.tasks.MailSender.createEmptyMail(MailSender.java:317)
        at hudson.tasks.MailSender.createUnstableMail(MailSender.java:187)
        at hudson.tasks.MailSender.getMail(MailSender.java:158)
        at hudson.tasks.MailSender.execute(MailSender.java:99)
        at hudson.maven.MavenModuleSetBuild$MavenModuleSetBuildExecution.cleanUp(MavenModuleSetBuild.java:1012)
        at hudson.model.Run.execute(Run.java:1546)
        at hudson.maven.MavenModuleSetBuild.run(MavenModuleSetBuild.java:477)
        at hudson.model.ResourceController.execute(ResourceController.java:88)
        at hudson.model.Executor.run(Executor.java:236)
Finished: SUCCESS

Важно: Если у вас тест запускается но очень долго, то возможно это проблемы сервера сайта который вы тестируете!

[...]
-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running TestSuite

и значек загрузки.... и так пол часа..

В моем примере один простенький тест на поиск слова в поиске главной страницы проходил больше 3 минут в Дженкинсе, когда напрямую в Эклипсе он занимал не больше нескольких секунд. Тест из трех тест кейсов которые тестировали отправку писем, удаление и сохранение в черновик тестировалось 37 (!) минут в Дженкинсе, что заставило искать ошибку у себя. Только потом проверив на простеньких тестах понял что это не моя ошибка.

UPD: Проблема была у самого #jenkins версии 1.477 в совместимости с #maven при работе с некоторыми серверами.

Итак тест исполнился, задача выполнена. Всем спасибо)

Так же для полной картины необходимо использовать CVS (Concurrent Versions System, «Система Одновременных Версий»)

Если что-то непонятно или не получается, а также по вопросам поддержки или личных консультаций пишите сюда


Изучение Selenium + Jenkins. Хочу более подробно все изучить.
Создание java приложения для запуска автоматизации не из IDE
(nautilus) #2

У меня была такая же ситуация что тесты не запускались через maven. Попытайся добавить в pom.xml вот такие строчки в блок dependencies:

<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-server</artifactId>
<version>2.24.1</version>
</dependency>
 
Мне помогло,. тесты начали выполнятся нормально.

(Кирилл) #3

mfedechko, спасибо за совет, проверил pom.xml у меня прописана зависимость селениум, правда называется по-другому

          <groupId>org.seleniumhq.selenium</groupId>
          <artifactId>selenium-java</artifactId>
          <version>2.24.1</version>

я добавил зависимость которую ты посоветовал selenium-server, но ситуация не поменялась. Тесты по прежнему очень долго запускаются. 37 минут на 3 теста, по 13 минут на каждый.

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


(Кирилл) #4

В попытке понять почему тесты в Дженкинсе проходят настолько долго я поменял в конфигурациях Дженкинс: вместо автоматической загрузки мавена - поставил путь MAVEN_HOME на установленную вручную мавен директорию. Не помогло.

upd: По прежнему ищу ошибку в пом файле, в зависмости tesng добавил scope тег. Не помогло.

<groupId>org.testng</groupId>
          <artifactId>testng</artifactId>
          <version>6.7</version>
          <scope>test</scope>

upd: добавил в пом файл maven compiler plugin теги <source> <target> со значениями 1.7 (версия джавы),

добавил в maven-surefire-plugin тег <inherited>true</inherited>

 

не знаю что еще...


(Кирилл) #5

Так... похоже я разобрался.

Для выявления причины такой долгой прогонки тестов я создал совсем простой тест с главной страницей google.com он запустился за пару секунд. После чего я добавил еще один простой тест на страницу почты ukr.net и после этого время прогонки теста существенно замедлилось. Время прохождения простого "найти-поисковое-поле-и-ввести-значение" прошло за 3 минуты! Аналогичный тест с mail.ru поиском прошел за 16 секунд.

 

Вывод: я потерял день пытаясь найти ошибку у себя но как выяснилось это не моя ошибка.

Сайт ukr.net очень долго тестируется через дженкинс. И мне посчастливилось первый свой проект в Дженкинсе запустить именно с этим глючным сайтом :)

 

Если есть вопросы задавайте) Советы как лучше запускать тесты на дженкинсе приветствуются!


(Alexander Petrovich) #6

Видимо, я какой-то тёмный. Как связан дженкинс и ukr.net? 


(Кирилл) #7

Никак, просто почту укр.нет я взял в качестве объекта тестирования. Заодно потренировался тестировать АЯКС страницы.


(Alexander Petrovich) #8

Просто я не улавливаю взаимосвязи между увеличением времени прогона тест сьюта с помощью Дженкинса и ukr.net
Для чистоты эксперимента... Попробуйте уже готовый тест сьют и настройки перепилить для ukr.net (в смысле переделать сами тесты)


(johan) #9

У меня такая же проблема: в eclipse тест сьют с 3 тестовыми классами (всего около средних по размеру 30 тест кейсов) запускается и прогоняется за 8 мин. , а через Jenkins это дело занимает до 3 часов.... жесть просто.Не знаю как с этим бороться :(


(Кирилл) #10

Провел маленькое сравнение:

простенький скрипт на вебдрайвере который открывает страницу, забивает в поиск слово "apple", кликает искать и смотрит есть ли оно в тайтле новой страницы.

Сравнивал два сайта mail.ru и ukr.net:

Eclipse: mail.ru 10 секунд, ukr.net 15 sec

Jenkins: mail.ru - 17 sec total time, ukr.net - 3min 17 sec total time!

Разница 13 раз! Один и тот же код, один и тот же проект, одни и те же настройки.

Вывод: Jenkins на некоторых сайтах жутко тормозит тестирование.

 

+ Совет: пока тестировал нашел интересный баг - Если в конце теста не вызвать driver.quit(); - билд Jenkins вообще не завершит (или завершит но за сколько неизвестно)


(Alexander Petrovich) #11

Вообще, в дженкинсе должна быть статистика подробная, сколько каждый тест длился. Посмотрите туда. И мне кажется вся запара в процессе сборки прожекта. Ну не вижу я объективных причин влияния дженкинса на быстродействие вэб-приложения


(Кирилл) #12

Если смотреть в реальном времени то вся сборка и запуск мавен пробегает за пару секунд, зависание начинается когда в консоли появляется:

-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running TestSuite
 
 
Если посмотреть в отчеты TestNG reports то ситуация немного проясняется:
Methods in chronological order:
setUp                              0 ms
          UkrNetTest          6892 ms
tearDown                      190076 ms
 
тоесть практически все зависание происходит на методе tearDown который имеет единственный метод у себя это driver.quit();
почему так -?

(johan) #13

У меня сборка в Jenkins проиcxодит за пару секунд, но метод setUp с драйвером браузера занимает около 5 минyт в Jenkins, но это не самое страшное - метод tearDown занимает почти 30 мин для одного драйвера браузера.

------------------------------------------------------

 

 T E S T S
-------------------------------------------------------
Running TestSuite
Aug 22, 2012 10:29:22 AM com.xxx.Tests.TestBase setUp
INFO: setUp start

Aug 22, 2012 10:34:49 AM com.xxx.Tests.TestBase setUp
INFO: setUp complete FirefoxDriver: firefox on XP (c64c399a-ae21-4063-8b0e-7dd447bba6a3)

Aug 22, 2012 11:01:39 AM com.xxx.Tests.TestBase tearDown
INFO: tearDown start FirefoxDriver: firefox on XP (c64c399a-ae21-4063-8b0e-7dd447bba6a3)

Aug 22, 2012 11:03:11 AM com.xxx.Tests.TestBase tearDown
INFO: tearDown end

(Mykhailo Poliarush) #14

попробуйте еще подключить http://opensource.webmetrics.com/browsermob-proxy/ и посмотреть, что грузиться и насколько долго

вы какие-то такие страшные вещи рассказываете, ужас.

надо разбираться что не так у вас. 

или у меня все постоянно было хорошо, или мне просто везло каждый раз :)


(Alexander Petrovich) #15

Вы и топик стартер, а дайте ваши тест кейсы поглазеть


(johan) #16

этот класс у меня занимает более 30 мин прогнать с Jenkins, когда в Eclipse на это уходит меньше минуты.

public class LoginTests extends TestBase {
 
@Test(dataProvider = "invalidLoginFromExcel", dataProviderClass = LoginFromExcel.class)
public void loginInvalidTest(LoginObject invalidLogins) throws Exception {
...
    }
 
@Test
public void loginValidTest() throws Exception {
....
    }
 
 
 
@Test(dataProvider = "forgotPasswordFromExcel", dataProviderClass = ForgotPasswordFromExcel.class)
public void loginForgotPasswordInvalidUsersTest(String user) throws Exception {
....
    }
 
@Test
public void loginForgotPasswordValidUserTest() throws Exception {
.....
    }
}

(Mykhailo Poliarush) #17

добавьте логику dataProviderClass и класса где у вас прописан setUp


(Кирилл) #18

Спасибо за проявленый интерес к вопросу! Выкладываю код теста:

Весь джава проект состоит из одного класса TestClass, вод его код:

package com.google.com;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

public class TestClass {
    public WebDriver driver;
    
    @BeforeMethod
    public void setUp() {
        driver = new FirefoxDriver();
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    }
    
    @AfterMethod
    public void tearDown() {
        driver.quit();
    }

    @Test (enabled = false)
    public void mailRuTest(){
        driver.get("http://www.mail.ru");
        driver.findElement(By.name("q")).sendKeys("apple");
        driver.findElement(By.id("search__button__wrapper__field")).submit();
        System.out.println("Current URL is: " + driver.getCurrentUrl() + "The title of this page is: " + driver.getTitle());
        System.out.println("Apple is in title: " +    driver.getTitle().contains("apple"));
    }
    
    @Test(enabled = true)
    public void UkrNetTest(){
        driver.get("http://www.ukr.net");
        driver.findElement(By.id("q")).sendKeys("apple");
        driver.findElement(By.xpath("//input[@class='s-submit']")).click();
        System.out.println("Current URL is: " + driver.getCurrentUrl() + " The title of this page is: " + driver.getTitle());
        System.out.println("Apple is in title: " +    driver.getTitle().contains("apple"));
    }
}

Запускаю через Eclipse - Run as... - Maven Test:

... [INFO] Total time: 23.874s ...

Запускаю через Jenkins (настройки проекта: Goals and options: clean test) :

...[INFO] Total time: 3:17.336s ...
TestNG report:

Methods in chronological order

setUp                   0 ms
UkrNetTest         6575 ms
tearDown           190753 ms

(Кирилл) #19

Пробовал подключить /browsermob-proxy/ но когда подтягиваю dependency из мейвен репозитария и прописываю это в пом файл - не хочет билдиться проект, только после чистки пом файла от этой зависимости все работает.

Но если очень критично подключить эту утилиту тогда буду серьезней вникать


(Alexander Petrovich) #20

Режим виндузятника активирован.
Я так думаю, вы ставили дженкинс 1.478
Вот у меня на проекте вертится 1.473 и никаких проблем (правда мэйвен мы не пользуем). Попробуйте ка откатиться. В чейнджлогах к версиям были проблемы некие с мэйвен и тиарДаун, правда давно. Может просто баг? Если да  -  помогите комьюнити ;)

Режим виндузятника деактивирован