我对Cucumber / Maven有点新意,因此需要有关运行测试用例的帮助。 我使用Cucumber和Selenium在eclipse中开发了一个自动化套件。要运行特定的功能文件/ Junit运行器类,我右键单击Eclipse中的文件并运行它。
但是如何通过命令提示符或Jenkins运行它,通过提供特定命令来运行2-3个功能文件(或)2-3个Junit运行程序类来说50个功能文件或JUnit类?
下面是我在Eclipse中如何构建的包浏览器。
下面是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">
<modelVersion>4.0.0</modelVersion>
<groupId>com.perspecsys</groupId>
<artifactId>salesforce</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>salesforce</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-java</artifactId>
<version>1.1.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-picocontainer</artifactId>
<version>1.1.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-junit</artifactId>
<version>1.1.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>2.48.2</version>
</dependency>
</dependencies>
</project>
答案 0 :(得分:19)
您可以使用cucumber.options
运行单个要素文件,该文件将覆盖@CucumberOptions
注释中的所有选项:
mvn test -Dcucumber.options="src/test/features/com/perspecsys/salesforce/featurefiles/Account.feature"
答案 1 :(得分:3)
如果您想要硬编码,您可以执行以下操作:
batch_size
答案 2 :(得分:3)
您可以使用cucumber.options
运行单个功能文件mvn test -Dcucumber.options="--tags @TestTag"
答案 3 :(得分:2)
鉴于您正在使用Maven并且每个功能已经有一个单独的运行者类,您可以使用 Failsafe 插件或 Surefire 插件来传递参数从这样的命令行,并选择要运行的运行器。
故障安全版:
:
Surefire版本:
-Dit.test=Account*Test,Login*Test
请注意,您可以使用通配符,传递以逗号分隔的测试列表,并引用完整位置并按包过滤。
-Dtest=Account*Test,Login*Test
为此,我通常会使用Failsafe插件,因为Cucumber测试更像集成测试(真正的端到端测试),这就是该插件的用途,而Surefire插件设计用于运行单元测试
有关这两个插件的更多信息:
http://maven.apache.org/surefire/maven-failsafe-plugin/examples/single-test.html
http://maven.apache.org/surefire/maven-surefire-plugin/examples/single-test.html
来自Jenkins的情况完全相同,只需使用Maven Project插件创建一个新的Maven项目,然后在Build部分的目标和选项字段下指定maven命令,如:
-Dit.test=com.perpecsys.salesforce.*Test
https://wiki.jenkins-ci.org/display/JENKINS/Maven+Project+Plugin
或者,如果您没有使用Maven Project插件,只需将 Invoke顶级maven目标步骤添加到Build中,然后在那里添加选项。
希望这有帮助。
答案 4 :(得分:1)
我在执行Maven时遇到了一些问题,据我了解,大多数人都在使用Terminal,但是只有一个人(@Pedro Lopez)描述了一个非常重要的观点-在Maven中传递了'CucumberRunner'类使用控制台,jenkins或其他命令执行该命令时。
同时,可以使用POM:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven-surefire-plugin.version}</version>
<configuration>
<includes>
<exclude>
**/CucumberRunner.java
</exclude>
</includes>
这里是**/CucumberRunner.java
-您将用作传递所有Cucumber选项的运行器的类(@William在我的POM中提到的'RunCukesTest'是 CucumberRunner ),当然,您可以在配置POM之后使用简单的命令,例如mvn test
。
关于问题的第二部分,我找到了一个非常简单的解决方案。可以在“黄瓜”选项部分中描述所有内容。
@CucumberOptions(
features = feature", // here you can pass information about main feature folder that contains all feature files
plugin = "junit:cucumber-report/junit-report.xml",
tags = "@Test1, @Test2, ... , @Test999",//here you can pass all list of related tests by tag
glue = {"com.myApp.stepDefinitions"}
)
我认为这些信息可以帮助将来解决一些问题:)
使用JAVA进行自动化自动化!