2017-02-16 3 views
1

Я создал тестовую структуру, используя Cucumber, Selenium и Maven. Я использую плагин cucumber-jvm-parallel для параллельной работы моих тестов. Ниже, как мой pom.xml выглядит:Задание нескольких целей в Maven и запуск их отдельно

<?xml version="1.0" encoding="UTF-8"?> 
<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.tests</groupId> 
<artifactId>test-project</artifactId> 
<version>1.0</version> 

<name>Test Project</name> 
<properties> 
    <maven.compiler.target>1.8</maven.compiler.target> 
    <maven.compiler.source>1.8</maven.compiler.source> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    <cucumber.version>1.2.3</cucumber.version> 
    <extentreports.version>2.41.0</extentreports.version> 
    <selenium.version>2.53.1</selenium.version> 
    <cucumber.jvm.parallel.version>2.1.0</cucumber.jvm.parallel.version> 
</properties> 

<dependencies> 
    <dependency> 
     <groupId>com.github.temyers</groupId> 
     <artifactId>cucumber-jvm-parallel-plugin</artifactId> 
     <version>${cucumber.jvm.parallel.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>info.cukes</groupId> 
     <artifactId>cucumber-junit</artifactId> 
     <version>${cucumber.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.12</version> 
    </dependency> 
    <dependency> 
     <groupId>org.assertj</groupId> 
     <artifactId>assertj-core</artifactId> 
     <version>1.7.0</version> 
    </dependency> 
    <dependency> 
     <groupId>org.seleniumhq.selenium</groupId> 
     <artifactId>selenium-java</artifactId> 
     <version>${selenium.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>info.cukes</groupId> 
     <artifactId>cucumber-java</artifactId> 
     <version>${cucumber.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>com.sitture</groupId> 
     <artifactId>cucumber-jvm-extentreport</artifactId> 
     <version>1.0.1</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.directory.studio</groupId> 
     <artifactId>org.apache.commons.codec</artifactId> 
     <version>1.8</version> 
    </dependency> 
    <dependency> 
     <groupId>info.cukes</groupId> 
     <artifactId>cucumber-picocontainer</artifactId> 
     <version>1.2.3</version> 
    </dependency> 
    <dependency> 
     <groupId>com.vimalselvam</groupId> 
     <artifactId>cucumber-extentsreport</artifactId> 
     <version>1.1.1</version> 
    </dependency> 

</dependencies> 
<profiles> 
    <profile> 
     <id>win</id> 
     <activation> 
      <os> 
       <family>windows</family> 
      </os> 
     </activation> 
     <properties> 
      <webdriver.chrome.path>${basedir}${file.separator}resources${file.separator}chromedriver.exe</webdriver.chrome.path> 
     </properties> 
    </profile> 
    <profile> 
     <id>linux</id> 
     <activation> 
      <os> 
       <family>!windows</family> 
      </os> 
     </activation> 
     <properties> 
      <webdriver.chrome.path>resources${file.separator}chromedriver</webdriver.chrome.path> 
     </properties> 
    </profile> 
</profiles> 
<build> 
    <plugins> 
     <plugin> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.1</version> 
      <configuration> 
       <fork>true</fork> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>com.github.temyers</groupId> 
      <artifactId>cucumber-jvm-parallel-plugin</artifactId> 
      <version>${cucumber.jvm.parallel.version}</version> 
      <executions> 
       <execution> 
        <id>generateRunners</id> 
        <phase>generate-test-sources</phase> 
        <goals> 
         <goal>generateRunners</goal> 
        </goals> 
        <configuration> 
         <outputDirectory>${project.build.directory}/generated-test-sources/cucumber</outputDirectory> 
         <featuresDirectory>src/test/resources/features</featuresDirectory> 
         <cucumberOutputDir>target/cucumber-parallel</cucumberOutputDir> 
         <format>json,html,rerun</format> 
         <strict>true</strict> 
         <monochrome>true</monochrome> 
         <useTestNG>false</useTestNG> 
         <namingPattern>Parallel{c}IT</namingPattern> 
         <namingScheme>simple</namingScheme> 
         <parallelScheme>FEATURE</parallelScheme> 
         <glue>com.cucumber.stepdefinitions</glue> 
         <tags>"[email protected]"</tags> 
         <filterFeaturesByTags>true</filterFeaturesByTags> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <version>2.19</version> 
      <configuration> 
       <additionalClasspathElements> 
        <additionalClasspathElement>resources</additionalClasspathElement> 
       </additionalClasspathElements> 
       <!-- Increase Fork Count to increase parallel execution count. 
       Currently it is set to 2 which means 2 runners will run in parallel--> 
       <forkCount>2</forkCount> 
       <reuseForks>true</reuseForks> 
       <includes> 
        <include>**/Parallel*IT.java</include> 
       </includes> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-release-plugin</artifactId> 
      <version>2.2.1</version> 
      <executions> 
       <execution> 
        <id>default</id> 
        <goals> 
         <goal>perform</goal> 
        </goals> 
        <configuration> 
         <pomFileName>${basedir}${file.separator}pom.xml</pomFileName> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

Я использую

mvn clean install 

запустить свой пакет. По завершении запуска у меня есть задание в нисходящем направлении, настроенное в Jenkins, которое генерирует файл с неудачными случаями. Я создаю для них отдельные бегуны. Теперь я искал повторные неудачные тестовые примеры, и я создал файлы под названием failedScenario1.java, failedScenario2.java и так далее. Теперь я хотел бы запустить их. Я предполагаю, что мне нужно определить что-то похожее на org.apache.maven.plugins в приведенном выше POM и запустить запуск. Может кто-то, пожалуйста, дайте мне знать, как я могу включить это в тот же POM. Также как я могу запустить этот запуск для failedScenario*.java.

+0

Это не касается вашего вопроса, но используется версия 3.1 ['maven-compiler-plugin'] (http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22org .apache.maven.plugins% 22% 20AND% 20a% 3A% 22maven-compiler-plugin% 22) намеренно? Это почти 5 лет. [ 'Maven-релиз-плагин: 2.2.1'] (http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22org.apache.maven.plugins%22%20AND%20a%3A % 22maven-release-plugin% 22) еще старше. –

+0

Правильно ли я: вы планируете создавать новые проекты Maven (новые POM, 'pom.xml's) на лету, с' failScenario * .java' в качестве тестовых источников, а затем создавать их, включая 'test' фаза? –

+0

№.На самом деле я думал, могу ли я указать профиль или цель в том же помпе, что будет работать только с ошибками. * .Java – BountyHunter

ответ

1

Я боюсь, что это невозможно, как вам нравится, в том же POM.

Вам нужно будет что-то вроде следующего:

<profiles> 
    <profile> 
     <id>suite</id> 
     <activation> 
     <property> 
      <name>re-test</name> 
      <value>!true</value> 
     </property> 
     <activation> 

     ... your suite's declarations ... 

    </profile> 

    <profile> 
     <id>failed-scenario</id> 
     <activation> 
     <property> 
      <name>re-test</name> 
      <value>true</value> 
     </property> 
     <activation> 
     <build> 
     <testSourceDirectory>${project.build.directory}/generated-test-sources/cucumber</testSourceDirectory> 
     <plugins> 
      <plugin> 
      <artifactId>maven-compiler-plugin</artifactId> 
       <executions> 
       <execution> 
        <id>failed-scenario-test-compile</id> 
        <goals> 
        <goal>testCompile</goal> 
        </goals> 
       </execution> 
       </executions> 
      ... 
     <plugin> 
      <artifactId>maven-surefire-plugin</artifactId> 
      ... 

Но см Introduction to Build Profiles, Profiles in POMs:

профили, указанные в POM можно изменить следующие элементы POM:

  • . ..

  • подмножество <build> элемента, который состоит из:

    <defaultGoal>

    <resources>

    <testResources>

    <finalName>

Так, <testSourceDirectory> отсутствует.

Если бы generate-test-sources по умолчанию <testSourceDirectory>${project.basedir}/src/test/java можно использовать maven-surefire-plugin «s <excludes>/<includes> в re-test профиле. Недостатком является то, что все failedScenarioX будут также выполняться при следующем создании вашего пакета, если вы не удалите их раньше.

+0

Я сослался на ваш ответ и придумал решение на аналогичных строках. Я создаю профиль, называемый Failed-Cases, для запуска неудачных тестов и использования clean install -PFailed-Cases для запуска неудачных сценариев. после завершения выполнения я удаляю файлы бегунов. Однако это хорошо работает, похоже, это скорее исправление, чем постоянное решение. Любые другие идеи реализации этого? – BountyHunter

+1

@BountyHunter Re "_more like hot fix_": Это не обычный сценарий с точки зрения Maven в любом случае. Обычно это один проект, один тест (набор), один набор результатов теста, который отражает все тесты всего проекта. Единственная другая идея, которую я получил, - передать «failedScenarioX's» в отдельный проект, причем исходный проект является одной из его зависимостей. –

Смежные вопросы