2016-06-23 9 views
0

Ich muss zwei Testfälle durchführen, die parallele Prüfung in der Gurke verwenden.wie man paralleles Testen in Gurke durchführt

Was ich jetzt habe, sind zwei Testfälle. Einer öffnet google.com und der andere öffnet youtube.com. Ich habe bestimmte Abhängigkeiten in pom.xml hinzugefügt und einige Konfigurationen vorgenommen.

Auch ich habe die Läufer Klassen hinzugefügt.

Dies ist der Google Testfall, läufer Klasse und Funktion Dateiinhalt:

package com.cucumber.learning; 

import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.firefox.FirefoxDriver; 
import cucumber.api.java.en.Given; 

public class GoogleTest { 

public static WebDriver driver = new FirefoxDriver(); 

@Given("go to google") 
public static void main() { 

    driver.get("https://www.google.co.in/?gfe_rd=cr&ei=iHJrV_DiJ8SL8QfEipjgBg"); 

} 

} 

google runner Klasse

package com.cucumber.learning; 

import org.junit.runner.RunWith; 
import cucumber.api.CucumberOptions; 
import cucumber.api.junit.Cucumber; 

@RunWith(Cucumber.class) 
@CucumberOptions(
    features = "src/test/resources/com/cucumber/learning" 
    //,glue={"stepDefinition"} 
    ) 

public class GoogleRunnerIT { 

} 

google Funktion Datei: [Feature Dateiname: 1.google.feature]

@Google 
Feature: Google test 

Scenario: navigate to google 
Given go to google 

Ich habe ähnlich wie oben für youtube.com Testfall auch gemacht.

der pom.xml-Code wird wie unten dargestellt:

<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"> 
<modelVersion>4.0.0</modelVersion> 
<groupId>com.bdd</groupId> 
<artifactId>CucumberModule</artifactId> 
<version>0.0.1-SNAPSHOT</version> 
<url>http://maven.apache.org</url> 
<dependencies> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.11</version> 
    </dependency> 
    <dependency> 
     <groupId>info.cukes</groupId> 
     <artifactId>cucumber-junit</artifactId> 
     <version>1.1.7</version> 
     <type>jar</type> 
    </dependency> 
    <dependency> 
     <groupId>info.cukes</groupId> 
     <artifactId>cucumber-java</artifactId> 
     <version>1.1.7</version> 
     <type>jar</type> 
    </dependency> 
    <dependency> 
     <groupId>info.cukes</groupId> 
     <artifactId>gherkin</artifactId> 
     <version>2.12.1</version> 
    </dependency> 
    <dependency> 
     <groupId>org.seleniumhq.selenium</groupId> 
     <artifactId>selenium-java</artifactId> 
     <version>2.53.0</version> 
    </dependency> 
</dependencies> 
<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <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.18.1</version> 
      <dependencies> 
       <dependency> 
        <groupId>org.apache.maven.surefire</groupId> 
        <artifactId>surefire-junit47</artifactId> 
        <version>2.18.1</version> 
       </dependency> 
      </dependencies> 
      <executions> 
       <execution> 
        <id>acceptance-test</id> 
        <phase>integration-test</phase> 
        <goals> 
         <goal>test</goal> 
        </goals> 
        <configuration> 
         <includes> 
          <include>**/*RunnerIT.class</include> 
         </includes> 
         <parallel>all</parallel> 
         <threadCountSuites>2</threadCountSuites> 
         <useUnlimitedThreads>true</useUnlimitedThreads> 
         <testFailureIgnore>true</testFailureIgnore> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 
</project> 

Als ich das oben Projekt in Eclipse „Ausführen als‚Maven Test‘“ ausführen, erhalte ich die BUILD SUCCESS Nachricht aber kein Browser öffnet oder der Testfall wird ausgeführt.

Jede Hilfe wird sehr geschätzt. Danke im Voraus.

Console Fehler:

[INFO] Scanning for projects... 
[WARNING] 
[WARNING] Some problems were encountered while building the effective model for com.bdd:CucumberModule:jar:0.0.1-SNAPSHOT 
[WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-compiler-plugin is missing. @ line 39, column 12 
[WARNING] 
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build. 
[WARNING] 
[WARNING] For this reason, future Maven versions might no longer support building such malformed projects. 
[WARNING] 
[INFO]                   
[INFO] ------------------------------------------------------------------------ 
[INFO] Building CucumberModule 0.0.1-SNAPSHOT 
[INFO] ------------------------------------------------------------------------ 
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ CucumberModule --- 
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent! 
[INFO] skip non existing resourceDirectory /home/test/workspace/customparalleltesting/src/main/resources 
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ CucumberModule --- 
[INFO] No sources to compile 
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ CucumberModule --- 
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent! 
[INFO] Copying 3 resources 
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ CucumberModule --- 
[INFO] Nothing to compile - all classes are up to date 
[INFO] 
[INFO] --- maven-surefire-plugin:2.18.1:test (default-test) @ CucumberModule --- 
[INFO] Surefire report directory: /home/test/workspace/customparalleltesting/target/surefire-reports 
[INFO] Using configured provider org.apache.maven.surefire.junitcore.JUnitCoreProvider 
[INFO] parallel='none', perCoreThreadCount=true, threadCount=0, useUnlimitedThreads=false, threadCountSuites=0, threadCountClasses=0, threadCountMethods=0, parallelOptimized=true 

------------------------------------------------------- 
T E S T S 
------------------------------------------------------- 
Running com.cucumber.learning.YoutubeTest 
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.003 sec <<< FAILURE! - in com.cucumber.learning.YoutubeTest 
initializationError(com.cucumber.learning.YoutubeTest) Time elapsed: 0.001 sec <<< ERROR! 
cucumber.runtime.CucumberException: 

Classes annotated with @RunWith(Cucumber.class) must not define any 
Step Definition or Hook methods. Their sole purpose is to serve as 

ein Einstiegspunkt für JUnit. Schrittdefinitionen und Hooks sollten in ihren eigenen Klassen definiert werden. Dadurch können sie über Funktionen hinweg wiederverwendet werden. com.cucumber.learning.YoutubeTest Klasse

at  cucumber.runtime.junit.Assertions.assertNoCucumberAnnotatedMethods(Assertions.java:13) 
at cucumber.api.junit.Cucumber.<init>(Cucumber.java:55) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
at java.lang.reflect.Constructor.newInstance(Constructor.java:526) 
at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:29) 
at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:21) 
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59) 
at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26) 
at org.junit.runner.Computer.getRunner(Computer.java:40) 
at org.junit.runner.Computer$1.runnerForClass(Computer.java:31) 
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59) 
at org.junit.runners.model.RunnerBuilder.runners(RunnerBuilder.java:101) 
at org.junit.runners.model.RunnerBuilder.runners(RunnerBuilder.java:87) 
at org.junit.runners.Suite.<init>(Suite.java:80) 
at org.junit.runner.Computer.getSuite(Computer.java:28) 
at org.junit.runner.Request.classes(Request.java:75) 
at org.apache.maven.surefire.junitcore.JUnitCoreWrapper.createRequestAndRun(JUnitCoreWrapper.java:97) 
at org.apache.maven.surefire.junitcore.JUnitCoreWrapper.executeEager(JUnitCoreWrapper.java:78) 
at org.apache.maven.surefire.junitcore.JUnitCoreWrapper.execute(JUnitCoreWrapper.java:54) 
at org.apache.maven.surefire.junitcore.JUnitCoreProvider.invoke(JUnitCoreProvider.java:144) 
at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:203) 
at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:155) 
at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103) 

Running com.cucumber.learning.GoogleTest 
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0 sec <<< FAILURE! - in com.cucumber.learning.GoogleTest 
initializationError(com.cucumber.learning.GoogleTest) Time elapsed: 0 sec <<< ERROR! 

cucumber.runtime.CucumberException: Beleidigendes Klasse

Classes annotated with @RunWith(Cucumber.class) must not define any 
Step Definition or Hook methods. Their sole purpose is to serve as 
    an entry point for JUnit. Step Definitions and Hooks should be defined 
in their own classes. This allows them to be reused across features. 
Offending class: class com.cucumber.learning.GoogleTest 

at cucumber.runtime.junit.Assertions.assertNoCucumberAnnotatedMethods(Assertions.java:13) 
at cucumber.api.junit.Cucumber.<init>(Cucumber.java:55) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
at java.lang.reflect.Constructor.newInstance(Constructor.java:526) 
at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:29) 
at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:21) 
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59) 
at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26) 
at org.junit.runner.Computer.getRunner(Computer.java:40) 
at org.junit.runner.Computer$1.runnerForClass(Computer.java:31) 
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59) 
at org.junit.runners.model.RunnerBuilder.runners(RunnerBuilder.java:101) 
at org.junit.runners.model.RunnerBuilder.runners(RunnerBuilder.java:87) 
at org.junit.runners.Suite.<init>(Suite.java:80) 
at org.junit.runner.Computer.getSuite(Computer.java:28) 
at org.junit.runner.Request.classes(Request.java:75) 
at org.apache.maven.surefire.junitcore.JUnitCoreWrapper.createRequestAndRun(JUnitCoreWrapper.java:97) 
at org.apache.maven.surefire.junitcore.JUnitCoreWrapper.executeEager(JUnitCoreWrapper.java:78) 
at org.apache.maven.surefire.junitcore.JUnitCoreWrapper.execute(JUnitCoreWrapper.java:54) 
at org.apache.maven.surefire.junitcore.JUnitCoreProvider.invoke(JUnitCoreProvider.java:144) 
at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:203) 
at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:155) 
at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103) 


Results : 

Tests in error: 
GoogleTest.initializationError » Cucumber 

Classes annotated with @RunWith(Cu... 
YoutubeTest.initializationError » Cucumber 

Classes annotated with @RunWith(C... 

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

[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD FAILURE 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 2.375 s 
[INFO] Finished at: 2016-06-23T16:21:53+05:30 
[INFO] Final Memory: 10M/218M 
[INFO] ------------------------------------------------------------------------ 
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.18.1:test (default-test) on project CucumberModule: There are test failures. 
[ERROR] 
[ERROR] Please refer to /home/test/workspace/customparalleltesting/target/surefire-reports for the individual test results. 
[ERROR] -> [Help 1] 
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. 
[ERROR] Re-run Maven using the -X switch to enable full debug logging. 
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles: 
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException 
+0

Mögliche Duplikate von [So führen Sie Gurken-Feature-Datei parallel] (http://stackoverflow.com/questions/41034116/how-to-execute-cucumber-feature-file-parallel) –

+0

Werfen Sie einen Blick auf http://stackoverflow.com/a/41100104/2895913 –

Antwort

1

Es gibt viele Dinge, die in Ihrem Setup nicht korrekt sind, müssen Sie den Browser instanziiert von Gurken Läufer Klasse so, dass alle Ihre Schritt Definitionen können in diesem Fall laufen jeder, wie wenn man es separat ausführen möchten, haben Sie so etwas wie dies zu tun:

package com.cucumber.learning; 

import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.firefox.FirefoxDriver; 
import cucumber.api.java.en.Given; 

    public class GoogleTest extends GoogleRunnerIT { 


@Given("go to google") 
public static void main() { 

public static WebDriver driver = new FirefoxDriver(); 

driver.get("https://www.google.co.in/?gfe_rd=cr&ei=iHJrV_DiJ8SL8QfEipjgBg"); 

} 

} 

Ein effizienter Weg besteht jedoch darin, eine gängige Methode in der Runner-Klasse zu erstellen, um die URL Ihrer App instanziieren und weiterleiten zu können.

+0

Hat das, was Sie erwähnt haben, sowohl in GoogleTest.java als auch YoutubeTest.java [erweitert YoutubeRunnerIT] und instanziiert den Treiber innerhalb der Methoden. Kann immer noch nicht ausgeführt werden. Ich füge den Konsolenfehler hinzu, den Sie in der Frage erhalten haben, damit Sie ihn überprüfen können. –

+0

In Ihrer Gurken-Läufer-Klasse wird der Kleber aus irgendeinem Grund kommentiert ?? –

+0

Nein. Keine Gründe. –

0

Try forkCount in dem Konfigurations-Tag der Maven-todsichere Plugin Mit forkCount = 4, wie in Beispiel unten um es 4 Testklassen parallel ausgeführt werden, die mit RunnerIT enden

<plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-surefire-plugin</artifactId> 
     <version>2.18.1</version> 
     <dependencies> 
      <dependency> 
       <groupId>org.apache.maven.surefire</groupId> 
       <artifactId>surefire-junit47</artifactId> 
       <version>2.18.1</version> 
      </dependency> 
     </dependencies> 
     <executions> 
      <execution> 
       <id>acceptance-test</id> 
       <phase>integration-test</phase> 
       <goals> 
        <goal>test</goal> 
       </goals> 
       <configuration> 
        <includes> 
         <include>**/*RunnerIT.class</include> 
        </includes> 
        <forkCount>4</forkCount> 
        <parallel>all</parallel> 
        <threadCountSuites>2</threadCountSuites> 
        <useUnlimitedThreads>true</useUnlimitedThreads> 
        <testFailureIgnore>true</testFailureIgnore> 
       </configuration> 
      </execution> 
     </executions> 
    </plugin> 

Referenz Aus : -
https://opencredo.com/running-cucumber-jvm-tests-in-parallel/

+0

Ich habe forkCount = 2 hinzugefügt, da ich 2 RunnerIT.class habe, aber nicht funktioniert [die Tests werden ausgeführt, aber die Ausführung ist nicht parallel. Tests werden nacheinander ausgeführt]. –

0

können Sie die Signatur und Annotation für das Verfahren in der Klasse Schritt Definition
ausgeführt werden ändern


Ich habe Zweifel, dass die Schrittdefinition in der Hauptmethode definiert ist.

+0

Versucht, was Sie erwähnt haben, funktioniert immer noch nicht. –

Verwandte Themen