BDD: Behaviour-Driven Development (BDD) 行为驱动开发
一般软件的开发涉及到三个角色
PO(Product owner) : 产品经理
Tester: 测试
Developer: 研发
三者之间的关系:
PO来根据customer需求来写feature,
software teams根据feature的描述来实现需求
Tester根据featuer来测试develper的实现。
最早的有TDD, 测试驱动开发, 而BDD 是行为驱动开发, 更加关注用户的行为,
cucumber是实现BDD 模式开发的一个框架, 现在很多大的公司使用这种开发模式,来快速迭代开发新的feature
可以用来测试service的API,Service与service之间的调用, 保障系统的可靠性
PO来负责提供feature,
Developer来实现feature 需求
tester可以根据feature来写实现的测试
增加了开发的速度
PO来负责提供feature,
Developer来实现feature 需求
tester可以根据feature来写实现的测试
Runcakes是cucumber来检验feature的一个Driver class.
Runcakes会根据根据feature里的scenarios来匹配对应的step definations并运行scenario来检验feature实现
gradle
dependencies
{
classpath "ru.alfalab.gradle:cucumber-reporting-gradle-plugin:$cucumberReportingVersion"
classpath "ru.alfalab.gradle:cucumber-reporting-gradle-plugin:$cucumberReportingVersion"
}
apply plugin: "ru.alfalab.cucumber-reporting"
testImplementation("info.cukes:cucumber-java8:$cucumberVersion")
testImplementation("info.cukes:cucumber-junit:$cucumberVersion")
testImplementation("info.cukes:cucumber-spring:$cucumberVersion")
Feature: The service is responsible for xxx .
"""This feature tests service's REST layer functionality"""
@SAFETY_NO
@REGULATORY_NO
@FUNCTIONAL
Scenario: SWAGGER: User attempts to use swagger API documentation
Given Swagger API ui is available at swagger-ui.html
When user invokes /api context via HTTP GET
Then client is redirected to swagger ui
// Runcake放入test/src/main/java目录下
@RunWith(Cucumber.class)
@CucumberOptions(strict = true, format = {"pretty"}, tags = {"~@wip"})
public class RunCukes
{
}
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.MvcResult;
@AutoConfigureMockMvc
@ContextConfiguration
@SpringBootTest(classes = SharingApplication.class)
public class RestStepDefs implements En
{
@Autowired
private MockMvc mockMvc;
private ResultActions result;
public RestStepDefs()
{
Given("^Swagger API ui is available at ([\\w|\\-|.]+)$", (final String page) ->
swaggerPage = page);
When("^user invokes /api context via HTTP GET$", () ->
{
try
{
result = mockMvc.perform(get("/api"));
}
catch (Exception e)
{
throw new CucumberException(e);
}
});
Then("^client is redirected to swagger ui$", () ->
{
try
{
result.andExpect(status().is3xxRedirection())
.andExpect(status().is(FOUND.value()))
.andExpect(redirectedUrl(swaggerPage));
}
catch (Exception e)
{
throw new CucumberException(e);
}
});
}
}
https://cucumber.io/docs/cucumber/
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。