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

Проблема запуска простого теста с помощью Maven, JUnit, Selenium, Jenkins


(svim) #1

Здравствуйте!

Меня интересует запуск тестов на Jenkins используя Selenium, JUnit, Maven2. Картина следующая....

1) Создаю простой maven проект и в директории test добавляем следующий исходный код.

 

package ru.apache_maven;

import org.junit.Test;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

/**
 * Unit test for simple App.
 */
public class AppTest

{
    @Test
    public void testMethod()
    {
        WebDriver driver = new FirefoxDriver();
        driver.get("http://google.com");
        System.out.println(driver.getTitle());
        System.out.println("<====It's work====>");
    }

}

Код всем понятен, заходим на google, получаем текст заголовка и готово!

2) Далее, заливаю тест на github.

3) Запускаю Jenkins на локальной машине, -> New Job -> Job name = "TestGoogle", -> Build Maven Project. В настройках указал, ссылку на github, готово!

4) Собственно при запуске (build test), вылетает следующее

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running ru.apache_maven.AppTest
org.openqa.selenium.firefox.NotConnectedException: Unable to connect to host 127.0.0.1 on port 7055 after 45000 ms. Firefox console output:

(firefox:5994): Gtk-WARNING **: Locale not supported by C library.
Using the fallback ‘C’ locale.
Error: no display specified

** (firefox:5994): WARNING **: Command line `dbus-launch --autolaunch=e7dd766f6c2e2373bf5eb9cf00000658 --binary-syntax --close-stderr’ exited with non-zero exit status 1: Autolaunch error: X11 initialization failed.\n

(firefox:6004): Gtk-WARNING **: Locale not supported by C library.
Using the fallback ‘C’ locale.
Error: no display specified

** (firefox:6004): WARNING **: Command line `dbus-launch --autolaunch=e7dd766f6c2e2373bf5eb9cf00000658 --binary-syntax --close-stderr’ exited with non-zero exit status 1: Autolaunch error: X11 initialization failed.\n

at org.openqa.selenium.firefox.internal.NewProfileExtensionConnection.start(NewProfileExtensionConnection.java:102)
at org.openqa.selenium.firefox.FirefoxDriver.startClient(FirefoxDriver.java:200)
at org.openqa.selenium.remote.RemoteWebDriver.&lt;init&gt;(RemoteWebDriver.java:94)
at org.openqa.selenium.firefox.FirefoxDriver.&lt;init&gt;(FirefoxDriver.java:147)
at org.openqa.selenium.firefox.FirefoxDriver.&lt;init&gt;(FirefoxDriver.java:85)
at ru.apache_maven.AppTest.testMethod(AppTest.java:16)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:53)
at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:123)
at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:104)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:164)
at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:110)
at org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:175)
at org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcessWhenForked(SurefireStarter.java:107)
at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:68)

Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 46.214 sec <<< FAILURE!

Results :

Tests in error: 
  testMethod(ru.apache_maven.AppTest): Failed to connect to binary FirefoxBinary(/usr/bin/firefox) on port 7055; process output follows: 

Tests run: 1, Failures: 0, Errors: 1, Skipped: 0

 

Тема заезженная, но при ручном сёрче, в гуглу нашёл разные варианты решения данной проблемы, от обновить FF, до возвращения к более старой версии Selenium. Выполнил то что, более подходило к моей ситуации, - не вышло.

Подскажите пожалуйста, в чём же таится проблема? Вполне возможно я не указал какой-то параметр...

PS: Заранее спасибо за ответ!

 


(Sergey Korol) #2

Давайте вернемся к истокам - для чего нужен CI сервер? Изучив данный вопрос, вы поймете, что все крутится вокруг удаленной работы. Впрочем, поднимая любой сервер, вы вряд ли посадите за него человека для выполнения повседневных рутинных обязанностей. Уже не первый раз люди сталкиваются с проблемой решения тривиальных задач при помощи сложных систем. Но они не для этого предназначены! Ну вы сами порассуждайте: кто будет запускать тесты прямо на CI сервере? Правильно, никто. Чтобы все же настроить такой запуск, нужно либо Jenkins сконфигурировать соответствующим образом, либо архитектуру тестов продумать для таких целей. В вашем случае, наиболее простым вариантом будет следующее:

1) Переписываем код под RemoteWebDriver. 

2) Поднимаем хаб, FF нод.

3) Запускаем джоб.


(svim) #3

Спасибо за ответ!

Сейчас решил сделать таким образом. Но встретился с проблемой...

Имеется удалённая машина на которой установлен Jenkins, Selenium RC 2.31.0, FF 16.0.2.

Проект хранится на github'е. Приведу пример простого maven проекта,
 

pom.xml

  <dependencies>
      <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.11</version>
      </dependency>
      <dependency>
          <groupId>org.seleniumhq.selenium</groupId>
          <artifactId>selenium-java</artifactId>
          <version>2.31.0</version>
      </dependency>
      <dependency>
          <groupId>org.seleniumhq.selenium</groupId>
          <artifactId>selenium-firefox-driver</artifactId>
          <version>2.31.0</version>
      </dependency>
  </dependencies>

AppTest.java

package ru.apache_maven;

import org.junit.Test;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;

import java.net.URL;

/**
 * Unit test for simple App.
 */
public class AppTest

{
    @Test
    public void testMethod() throws Exception
    {
        WebDriver driver = new RemoteWebDriver(
                new URL("http://localhost:4444/wd/hub"),
                DesiredCapabilities.firefox());

        driver.get("http://www.google.com");
        System.out.println(driver.getTitle());
        driver.close();

    }

}

 

Аналогичную операцию проводил на локальной машине, - все ок. При запуске же на удалённом сервере, Jenkins выдает

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running ru.apache_maven.AppTest
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 47.973 sec <<< FAILURE!

Results :

Tests in error:
testMethod(ru.apache_maven.AppTest): Unable to connect to host 127.0.0.1 on port 7055 after 45000 ms. Firefox console output:

Tests run: 1, Failures: 0, Errors: 1, Skipped: 0

[ERROR] There are test failures.

Please refer to /var/lib/jenkins/jobs/TestGPage/workspace/target/surefire-reports for the individual test results.
[JENKINS] Recording test results

[INFO] 
[INFO] --- maven-jar-plugin:2.3.2:jar (default-jar) @ testproject1 ---
[INFO] Building jar: /var/lib/jenkins/jobs/TestGPage/workspace/target/testproject1-1.0-SNAPSHOT.jar
[INFO] 
[INFO] --- maven-install-plugin:2.3.1:install (default-install) @ testproject1 ---
[INFO] Installing /var/lib/jenkins/jobs/TestGPage/workspace/target/testproject1-1.0-SNAPSHOT.jar to /var/lib/jenkins/.m2/repository/ru/apache_maven/testproject1/1.0-SNAPSHOT/testproject1-1.0-SNAPSHOT.jar
[INFO] Installing /var/lib/jenkins/jobs/TestGPage/workspace/pom.xml to /var/lib/jenkins/.m2/repository/ru/apache_maven/testproject1/1.0-SNAPSHOT/testproject1-1.0-SNAPSHOT.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 56.404s
[INFO] Finished at: Tue Mar 26 10:27:00 EET 2013
[INFO] Final Memory: 7M/69M
[INFO] ------------------------------------------------------------------------

 

На эту ошибку в интернете информации - вагон. Пробовал сменить на более старую версию RC + FF, пробовал удалить старый профиль FF и создать новый. Ничего...