pom
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-junit</artifactId>
<version>4.2.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-spring</artifactId>
<version>4.2.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-java</artifactId>
<version>1.2.5</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-junit</artifactId>
<version>1.2.5</version>
<scope>test</scope>
</dependency>
类WebApplicationTest
@SpringBootApplication(scanBasePackages = "com")
public class WebApplicationTest {
public static void main(String[] args) {
SpringApplication.run(WebApplicationTest.class, args);
}
}
类AbstractDefs
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = WebApplicationTest.class)
@SpringBootTest(classes = WebApplicationTest.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class AbstractDefs {
}
类ControllerStep
public class ControllerStep extends AbstractDefs{
@Autowired
private TestRestTemplate testRestTemplate;
HttpEntity formEntity;
private String response;
private String rq;
private String api;
private String filePath;
@假如("文件目录为{string}")
public void 文件目录为(String filePath) {
this.filePath="data/"+filePath;
}
@假如("请求api为{string}")
public void 请求api为(String api)
{
this.api=api;
}
@假如("api请求为{string}")
public void api请求为(String rqFileName) {
rq=CommonTool.readJsonFromClassPath(filePath+"/"+rqFileName);
HttpHeaders headers = new HttpHeaders();
headers.set("username","cucumber-user");
headers.set("Content-Type","application/json;charset=UTF-8");
formEntity = new HttpEntity(rq,headers);
}
@当("api向服务发起请求后")
public void api向firstsvc发起请求后() {
response=testRestTemplate.exchange(api, HttpMethod.POST,formEntity,String.class).getBody();
}
@那么("服务的返回应该是{string}")
public void firstsvc的返回应该是(String rsFileName) {
System.out.println(response);
String fileRs=CommonTool.readJsonFromClassPath(filePath + "/" + rsFileName);
Object parseResponse = JSON.parseObject(response);
Object parseFile = JSON.parseObject(fileRs);
assertEquals(parseResponse,parseFile);
}
}
类RunCucumberTest
@RunWith(Cucumber.class)
@CucumberOptions( monochrome = true,plugin = {"html:target/cucumber-html-report", "json:target/cucumber/cucumber-json-report.json" },
features = "classpath:features/",tags = {"@CONTROLLER"})
public class RunCucumberTest {
}
文件 demo.feature
@CONTROLLER
功能: 文件编号cucumber-demo
背景:
假如 文件目录为"cucumber-demo"
场景大纲: <caseDetail>
假如 请求api为"<api>"
假如 api请求为"<request>"
当 api向服务发起请求后
那么 服务的返回应该是"<response>"
例子:
| caseDetail | api | request | response |
|getDemon| /demo/getDemon |rq.json | rs.json|