前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >BDD测试框架Cucumber

BDD测试框架Cucumber

原创
作者头像
CoffeeLand
修改2020-05-18 11:11:12
1.1K0
修改2020-05-18 11:11:12
举报
文章被收录于专栏:CoffeeLandCoffeeLand

BDD

what is BDD?

代码语言:javascript
复制
BDD: Behaviour-Driven Development (BDD) 行为驱动开发

一般软件的开发涉及到三个角色
PO(Product owner) : 产品经理 
Tester: 测试
Developer: 研发

三者之间的关系:
PO来根据customer需求来写feature, 
software teams根据feature的描述来实现需求
Tester根据featuer来测试develper的实现。

Why BDD?

最早的有TDD, 测试驱动开发, 而BDD 是行为驱动开发, 更加关注用户的行为,

  • BDD根据用户的需求来开发, 能够加快开发速度,
  • 降低PO, Tester, Developer之间的耦合
  • 保障开发的功能和feature需求高度吻合

Cumcumber

What is the cucumber?

代码语言:javascript
复制
cucumber是实现BDD 模式开发的一个框架, 现在很多大的公司使用这种开发模式,来快速迭代开发新的feature

可以用来测试service的API,Service与service之间的调用, 保障系统的可靠性

PO来负责提供feature,
Developer来实现feature 需求
tester可以根据feature来写实现的测试

增加了开发的速度

How does cucumber work?

代码语言:javascript
复制
PO来负责提供feature,
Developer来实现feature 需求
tester可以根据feature来写实现的测试

Runcakes是cucumber来检验feature的一个Driver class.
Runcakes会根据根据feature里的scenarios来匹配对应的step definations并运行scenario来检验feature实现
cucumber workflow
cucumber workflow

How to use install cucumber

代码语言:javascript
复制
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")

Good practise for cucumber

  • feature
代码语言:javascript
复制
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
  • RunCakes class
代码语言:javascript
复制
// Runcake放入test/src/main/java目录下
@RunWith(Cucumber.class)
@CucumberOptions(strict = true, format = {"pretty"}, tags = {"~@wip"})
public class RunCukes
{
}

  • StepDefinations
代码语言:javascript
复制

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);
            }
        });
	}
}

References

https://cucumber.io/docs/cucumber/

https://school.cucumber.io/courses/bdd-with-cucumber-java

https://cucumber.io/docs/bdd/

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • BDD
  • what is BDD?
    • Why BDD?
    • Cumcumber
      • What is the cucumber?
        • How does cucumber work?
          • How to use install cucumber
            • Good practise for cucumber
            • References
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档