如何解决使用一个Maven“命令”在同一项目中运行spring-boot应用程序及其黄瓜测试
概述
一个使用 spring boot 的 maven 项目,针对该项目实施了一些 cucumber 测试(在同一项目中!)。
src
|
|-main
| |
| |-java
| |
| |-SpringBootApp
| |-Controller
|
|-test
|
|-java
| |
| |-cucumbertests
| |
| |-StepDefinitions
| |-CucumberTestsRunner
|
|-resources
|-features
|-hello.feature
控制器
@RestController
@RequestMapping("/")
public class Controller {
@GetMapping("hello")
public String hello() {
return "Hello!";
}
}
CucumberTestsRunner
@RunWith(Cucumber.class)
@CucumberOptions(glue = "cucumbertests")
pulic class CucumberTestsRunner {
}
StepDefinitions
public class StepDefinitions {
private String response;
@When("I say hello")
public void iSayHello() {
// rest assured call
response = get("<base_url>/hello").extract().asString();
}
@Then
public void iMGreetedWithHello() {
assertEquals("Hello!",response);
}
}
有了这个,
- 我可以在控制台
mvn spring-boot:run
中运行(从SpringBoot应用程序启动的地方) - 然后在另一个控制台
mvn test -Dtest=CucumberTestsRunner
中,从此处针对Web服务运行Cucumber测试
到目前为止,测试顺利通过,没有任何问题。
问题
我希望能够发出单个命令来启动SpringBoot应用程序,然后对已启动的应用程序运行测试。然后,在测试完成后,终止SpringBoot应用程序。
理想情况下,它打算用于Jenkins之类的CI系统。
我正在探索Apache Maven AntRun plugin作为一种选择,但这是我第一次进行这种设置,但我不确定这是否是正确的方法。以前,我曾经看到过这样的设置,但是是在独立的项目上进行的(在与经过测试的应用程序不同的应用程序中进行测试)。
解决方法
您可以使用spring-boot:start和spring-boot:stop来代替在一个控制台中使用spring-boot:run和在第二个控制台中运行测试。
诸如mvn spring-boot:start test spring-boot:stop
之类的东西将启动应用程序,运行测试,然后再次停止应用程序。
除了使用MyList = ['Happy Family','2122540624','213 E Broadway # A,New York,NY 10002,United States']
MyList[0] = MyList[0] +','
或使用['Happy Family,',United States']
并在mvn spring-boot:start test spring-boot:stop
中启动应用程序并在mvn verify
阶段将其停止之外,还可以使用{{1 }}并使用Mock MCV进行测试。
pre-integration-test
post-integration-test
cucumber-spring
├── pom.xml
└── src
├── main
│ └── java
│ └── com
│ └── example
│ └── Application.java
└── test
├── java
│ └── com
│ └── example
│ └── CucumberTest.java
└── resources
├── com
│ └── example
│ └── hello.feature
└── junit-platform.properties
<?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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.1.RELEASE</version>
</parent>
<groupId>com.example</groupId>
<artifactId>com.example</artifactId>
<version>1.0.0-SNAPSHOT</version>
<properties>
<java.version>11</java.version>
<cucumber.version>6.5.0</cucumber.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-java</artifactId>
<version>${cucumber.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-spring</artifactId>
<version>${cucumber.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-junit-platform-engine</artifactId>
<version>${cucumber.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。