在本文中,我将介绍如何对使用服务器端 Kotlin(Spring Boot)创建的 Web API 进行 API 集成测试。通过结合MockMVC和DatabseRider,可以轻松实现API集成测试。
MockMVC
MockMVC 是 Spring Test 中包含的测试框架之一。无需手动向实现的服务器发送请求即可进行 API 测试。
MockMVC 需要 @AutoConfigureMockMvc 和 @SpringBootTest 进行初始化。
class SampleTest { @SpringBootTest @AutoConfigureMockMvc @TestInstance(TestInstance.Lifecycle.PER_CLASS) class Get { @Autowired lateinit var mockMvc: MockMvc
@BeforeAll fun reset() = //每次测试时执行的操作
@Test fun test() {
} } }
|
使用 MockMvc 发送请求参数如下。还可以评估响应状态和响应正文。
val response = mockMvc.perform( MockMvcRequestBuilders .get("/path/to/api") .contentType(MediaType.APPLICATION_JSON) ).andReturn().response val actualStatus = response.status val actualResponseBody = response.contentAsString
|
DatabaseRider
DatabaseRider 是一个 Java 库,它允许您使用注释简洁地编写 DB 测试。如下图,注解可以让你插入输入数据,测试后期待DB,测试完成后将表写入文件。这意味着您可以在测试之前指定要插入数据库的数据,并在测试之后比较数据库应该是什么。E2E API测试除了能保证响应外,还能保证DB状态,与API测试非常兼容。
@Test @DBRider @DataSet("path/to/input/data.{yml,csv,cml}")// 指定输入数据文件 @ExpectedDataSet( value = ["path/to/expected/data.{yml,csv,cml}"], //指定预期数据的文件 orderBy = ["id"]。 ignoreCols = ["createdAt", "upedAt"], // 忽略元数据 ) // 注意:一旦数据被导出,注释掉 @ExportDataSet( format = DataSetFormat.YML, // 指定测试完成后数据导出的格式。 outputName = "path/to/export/data.{yml,csv,cml}", // 指定要导出的文件。 includeTables = ["customer"] // 指定要包括的列 ) fun `test`() { // 编写测试。 }
|
更多见:Github