0%

SpringBoot集成Contract以及使用dbrider进行契约测试

SpringBoot集成Contract以及使用dbrider进行契约测试

环境

  • SpringBoot ver.2.0.4.RELEASE
  • rider-spring ver.1.2.11
  • Java ver.1.8.0_161

相关知识点

  1. SpringBoot集成Contract进行契约测试

    • 添加依赖(版本自选)

      1
      testCompile('org.springframework.cloud:spring-cloud-starter-contract-verifier')
      1
      2
      3
      4
      5
      dependencyManagement {
      imports {
      mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
      }
      }
      1
      apply plugin: 'spring-cloud-contract'
      1
      classpath "org.springframework.cloud:spring-cloud-contract-gradle-plugin:2.0.0.RC1"
    • 指定testbase类

      1
      2
      3
      contracts {
      baseClassForTests = 'com.thoughtworks.contractProducer.BaseMvcTest'
      }
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      public abstract class BaseMvcTest {

      @Mock
      private UserService userService;
      @Before
      public void setupController() {
      RestAssuredMockMvc.standaloneSetup(new UserController(userService));
      }

      @Before
      public void setUpUserControllerData() {
      List<User> users = new ArrayList<>();
      users.add(new User("李四", 12));
      users.add(new User("张三", 14));
      given(userService.getAll()).willReturn(users);
      }
      }
  2. contract文件

    通常以yml或者groovy编写测试文件:

    • groovy写法
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Contract.make {

    Map<String, String> userMap = new HashMap<>()
    userMap.put("name", "张三")
    userMap.put("role", "test1")
    userMap.put("name", "李四")
    userMap.put("role", "test2")


    request {
    url("/users")
    method(HttpMethods.HttpMethod.GET)
    }

    response {
    status(200)
    body(userMap)
    }
    }
    • yml写法

    • name: "should return users"
      
      request:
        url: /users
        method: GET
      
      response:
        status: 200
        bodyFromFile: user.json
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13

      3. dbrider测试数据写法

      ```yaml
      user:
      - id: 1
      name: "张三"
      role: "test1"
      password: "123"
      - id: 2
      name: "李四"
      role: "test2"
      password: "321"
  3. 集成dbrider至contract

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    @SpringBootTest(classes = ContractProducerApplication.class,webEnvironment = SpringBootTest.WebEnvironment.MOCK)
    @RunWith(SpringRunner.class)
    @DBRider
    @DBUnit(caseSensitiveTableNames = true)
    @DataSet("simple_users.yml")
    @ActiveProfiles("test")
    public abstract class BaseMvcTest {

    @Autowired
    private UserController userController;

    @Before
    public void setupController() {
    RestAssuredMockMvc.standaloneSetup(userController);
    }

    }

后记

项目Demo地址:https://github.com/RoyFoo1995/contractProducer