java - 使用 Cucumber 运行测试场景并生成 JVM 报告作为 Java 应用程序
问题描述
我正在尝试构建一个 java 应用程序,它在执行命令后复制 cucumber 的功能mvn clean install
。目前做完之后mvn clean install
,cucumber 会执行所有的场景,并在指定的目录下创建 JVM 报告。但mvn clean install
我不想通过运行我的应用程序 jar 来复制完全相同的功能。(java 应用程序 jar 中的主要方法应该调用黄瓜类和方法来执行测试场景并生成报告)
以下是我用来运行测试场景和生成测试报告的 pom.xml 和类定义 mvn clean install
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" 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>hellocucumber</groupId>
<artifactId>hellocucumber</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>jar</packaging>
<properties>
<cucumber.version>6.8.1</cucumber.version>
<junit.version>4.13</junit.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-java</artifactId>
<version>${cucumber.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-junit</artifactId>
<version>${cucumber.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2.1</version>
<executions>
<execution>
<id>package-jar-with-dependencies</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>com.example.mainclass</mainClass>
</manifest>
</archive>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<encoding>UTF-8</encoding>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>net.masterthought</groupId>
<artifactId>maven-cucumber-reporting</artifactId>
<version>3.6.0</version>
<executions>
<execution>
<id>execution</id>
<phase>verify</phase>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<projectName>cucumber-jvm-example</projectName>
<!-- this is similar report as jenkins report -->
<outputDirectory>AllReports/cucumber-JVM-reports</outputDirectory>
<!-- to generate better report-similar to Jenkin report,maven-cucumber-reporting plug-in is used,which reads the generated cucumber.json file in local directory and generates cucumber-JVM-reports -->
<cucumberOutput>AllReports/report.json</cucumberOutput>
<skippedFails>true</skippedFails>
<enableFlashCharts>false</enableFlashCharts>
<buildNumber>42</buildNumber>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
运行黄瓜测试.java
package hellocucumber;
import io.cucumber.junit.Cucumber;
import io.cucumber.junit.CucumberOptions;
import org.junit.runner.RunWith;
@RunWith(Cucumber.class)
@CucumberOptions(
plugin = {"pretty", "html:AllReports/cucumber-html-report",
"json:AllReports/report.json", "junit:AllReports/cucumber.xml"},
features = "testcases/features")
public class RunCucumberTest {
}
StepDefinitions.java
package hellocucumber;
import io.cucumber.java.en.Given;
import io.cucumber.java.en.When;
import io.cucumber.java.en.Then;
import static org.junit.Assert.*;
class IsItFriday {
static String isItFriday(String today) {
return "Friday".equals(today) ? "TGIF" : "Nope";
}
}
public class StepDefinitions {
private String today;
private String actualAnswer;
@Given("today is {string}")
public void today_is(String today) {
this.today = today;
}
@When("I ask whether it's Friday yet")
public void i_ask_whether_it_s_Friday_yet() {
actualAnswer = IsItFriday.isItFriday(today);
}
@Then("I should be told {string}")
public void i_should_be_told(String expectedAnswer) {
assertEquals(expectedAnswer, actualAnswer);
}
}
解决方案
Cucumber 核心带有一个命令行界面。有关使用说明,请使用:
mvn exec:java \
-Dexec.classpathScope=test \
-Dexec.mainClass=io.cucumber.core.cli.Main \
-Dexec.args="--help"
或主要方法:
import io.cucumber.core.cli.Main;
public class Example {
public static void main(String[] args) {
byte status = Main.run("--help");
System.exit(status);
}
}
推荐阅读
- ios - 如何使用 AudioKit Sequencer 为节拍器配置拍号?
- typescript - 画布中的事件(在 Android 编译中)只有键 isTrusted(Ionic 6)
- testing - 如何正确使用 Testcafé 截取整页截图?
- c# - 如何计算 3D 折线拉伸的顶点?
- java - 从数组映射中获取一个数组(在firestore中)
- sql - 从第二个表中为一组用户选择 SQL 表中均匀分布的记录?
- javascript - jsPDF无法正确打印
- php - 如何在用户注销后立即暂停用户而不是
- huawei-mobile-services - Huawei AppGallery Connect API 是否可以用于特定项目?
- c - OpenGL Meshing 比不 Meshing 慢