Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

WebDriver + Ant + Junit


(Миша) #1

Доброе время суток. 

Задача: нужно что бы Ant запускал все тесты из папки "seneries". (тесты запускаются с помощью Junit , всё работает если запускать из IDE)

Пока что build.xml  умеет только компилировать из папки "src"  в папку  "staging".  

Я не могу понять почему не запускаются тесты из заданой папки. 


(Shaman) #2

насколько я вижу, у вас сначала идет запуск, а затем компиляция, попробуйте поменять содержимое тегов <target> местами.

 

+ укажите наверное полный путь к папке со сценариями.


(Миша) #3

А где вы видите что у меня идёт запуск а потом компиляция ? В консоль написано :

compile:

runjunit:

в правильном порядке.

путь к папке указывал всеми возможными способами и пробывал конкретно тест запустить 

F:\eclipse_file\Workspace\MarketwireNew\staging\sceneries\TestSMR

F:\eclipse_file\Workspace\MarketwireNew\staging\sceneries\TestSMR.class

F:\eclipse_file\Workspace\MarketwireNew\staging\sceneries, 

./staging/sceneries


(Shaman) #4

прошу прощения, не заметил депенденси параметр.


(Alexander Ivanovsky) #5
  1. <test name = "Test"/> -- неправильно задано имя теста. В атрибуте name указывается полное имя класса теста (например, "sceneries.TestPL"), а если вам нужно запустить все тесты с именем "Test*", то используйте batchtest (подробности здесь -- http://ant.apache.org/manual/Tasks/junit.html).
  2. <pathelement location = "staging/sceneries"/> -- неправильно задан путь. Нужно указывать путь к корневой папке, где лежат классы (т.е. "staging"), а "sceneries" уже относится к имени пакета. Читаем http://ant.apache.org/manual/using.html#path
  3. Посоветовал бы использовать JUnit 4-ой версии, положить соответствующий jar-файл в папку lib, и указывать относительный путь вместо абсолютного ("F:\eclipse...").

(Миша) #6

Пробывал и так тоже, результат одинаковый.

<test name = "sceneries.TestPL"/>

<pathelement location = "staging"/> 

Заменил 3 на 4 junit.jar и поместил в папочку lib. Теперь путь выглядит так . 

<pathelement location = "./lib/junit.jar"/>


(Alexander Ivanovsky) #7

Попробовал запустить этот билд-файл у себя и понял, почему сообщение об ошибке такое неинформативное.

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

<junit ...>
    <classpath .../>
    <formatter type="plain" usefile="false"/>
    <test .../>
</junit>

И тогда подробные результаты тестов будут видны в консоли.

А тест ваш падает из-за того, что не все нужные библиотеки указаны в classpath. И, кстати, ваш билд-файл должен падать еще на этапе компиляции (по той же причине), но т.к. классы уже скомпилировал Eclipse, этого не происходит (Ant использует уже готовые).

P.S. поправки из моего предыдущего комментария всё также актуальны.


(Миша) #8

Утром подправил : 

Добавил строку  <formatter type="plain" usefile="false"/> Появилось информативное сообщение об ошибке. Полез на СТековерфлов нашел ответ . 

  1. Go to Preferences | Java | JUnit
  2. Click "Add Package" and add "org.hamcrest.*"

добавил и как бы всё заработало. Но только один раз.( 

 

теперь опять ошибка 

 

Buildfile: F:\eclipse_file\Workspace\MarketwireNew\build.xml
compile:
runjunit:
    [junit] Running sceneries.TestPL
    [junit] Testsuite: sceneries.TestPL
    [junit] Tests run: 1, Failures: 0, Errors: 1, Time elapsed: 0.027 sec
    [junit] Tests run: 1, Failures: 0, Errors: 1, Time elapsed: 0.027 sec
    [junit] Testcase: initializationError took 0.002 sec
    [junit] Caused an ERROR
    [junit] org/hamcrest/SelfDescribing
    [junit] java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing
    [junit] at java.lang.ClassLoader.defineClass1(Native Method)
    [junit] at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
    [junit] at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
    [junit] at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    [junit] at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    [junit] at org.eclipse.ant.internal.launching.remote.EclipseDefaultExecutor.executeTargets(EclipseDefaultExecutor.java:32)
    [junit] at org.eclipse.ant.internal.launching.remote.InternalAntRunner.run(InternalAntRunner.java:424)
    [junit] at org.eclipse.ant.internal.launching.remote.InternalAntRunner.main(InternalAntRunner.java:138)
    [junit] Caused by: java.lang.ClassNotFoundException: org.hamcrest.SelfDescribing
    [junit] at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    [junit] Test sceneries.TestPL FAILED
BUILD SUCCESSFUL
Total time: 1 second
 

Если я правильно понимаю то "org.hamcrest" библиотека входит в junit4. Но почему вот появляесят ошибка. И почему ругается на "java.lang" 


(Alexander Ivanovsky) #9
  1. Настройки из раздела "Preferences | Java | JUnit" не влияют на работу Ant, проблему нужно исправлять в самом билд-файле.
  2. Обычно "NoClassDefFoundError" означает только одно -- вы забыли добавить какую-то либу в classpath.
  3. Hamcrest -- это отдельная либа, но некоторые классы из нее входят в полную версию библиотеки JUnit.
    Если же у вас либа с именем junit-dep-*.jar (которая идет в комплекте с WebDriver), то там этих классов нет, они берутся из файла hamcrest-*.jar (его-то и нужно добавить в classpath).
  4. И чтобы таких проблем больше не возникало, в classpath можно добавить все используемые либы следующим образом:
<path id="my_all_libs">
    <fileset dir="./lib" includes="*.jar" />
</path>
...
<javac ... classpathref="my_all_libs" />
...
<junit ...>
    <classpath>
        <path refid="my_all_libs" />
        ...
    </classpath>
...
</junit>

(lokofc) #10

Помогите пожалуйста разобраться как запустить билд и посмотреть результаты. Получаю файл build.xml далее выбираю его ->Run As-> Настраиваю Ant Build, в таргетах выбираю хотя бы 1 класс(который содержит какой-нибудь простой тест) нажимаю run. В результате получаю то что на скрине. Хотя, если просто так запускать этот тест через Junit, то все ок - без ошибок. И еще не могу посомтреть, куда выгружается сам отчет о прохожении/не прохождении теста

 


(lokofc) #11

Все, сам разобрался.