51Testing软件测试论坛

标题: 节省时间!再也不用等前后端一致才测试了 [打印本页]

作者: lsekfe    时间: 2021-6-23 10:59
标题: 节省时间!再也不用等前后端一致才测试了
问题描述
  前后端分离体系中,后端接口变动时,前端需要相应调整,但是往往没有提供详细的接口调整说明,无法开展[url=]测试[/url]
  拟通过编写代码并在构建后端程序时自动执行,自动生成接口文档并可查看变动情况。

  解决方案
  通过Junit自动执行Swagger的API获取工程后台接口信息,并将接口信息写入ShowDoc,通过ShowDoc可直观查看接口变动情况,解决接口变化感知的问题。

  适用技术
  适用于服务端,Java技术栈。

  应用价值点和创新点
  通过Junit自动执行Swagger的API获取工程后台接口信息,然后将获取的接口信息写入ShowDoc,每次后端程序构建时自动写入接口信息,通过ShowDoc可以查看历史接口版本并对比,解决接口变化感知的问题。

  适用工具
  所使用到的工具主要是Junit、Swagger(工程在线接口辅助工具)、ShowDoc,前提默认已经部署ShowDoc的测试环境。
  ShowDoc是一款用于团队级别的在开发测试阶段在线文档分享工具,可以收集json数据并以在线文档的形式展示出来。

  过程描述
  总体的流程如下图所示。

图1 完整流程图


  对工程中的每一个controller增加Swagger插件。
  操作步骤如下:
  (1)引入Swagger的pom文件。
  1.   <dependency>
  2.       <groupId>io.springfox</groupId>
  3.       <artifactId>springfox-swagger2</artifactId>
  4.       <version>${swagger.version}</version>      
  5.     </dependency>
复制代码
(2)在启动类上增加注解。

  1. @EnableSwagger2
  2. @EnableFeignClients
  3. @EnableScheduling
  4. @SpringBootApplication
  5. public class Init{
  6.   public static void main(String[] args) {
  7.     TimeZone.setDefault(TimeZone.getTimeZone("GMT+8"));
  8.     SpringApplication.run(InitActivity.class, args);
  9.   }
  10. }
复制代码
(3)在controller中增加controller的注释编写。

  1. @ApiOperation(value = "test", httpMethod = "POST", response = test.class, notes = "测试接口")
  2.   @RequestMapping(value = "/test", method = RequestMethod.POST, consumes = "application/json")
  3.   public String test(@RequestBody String reqBody)
  4. {}
复制代码
编写[url=]测试用例[/url]获取工程的Swagger在线接口页面的json数据并发送给ShowDoc。操作步骤如下:
  (1)首先,在工程中创建测试用例所在的目录和路径,如图所示。
  这里使用的路径名称是 /src/test/java/com/test。
  (2)编写测试类 SwaggerDocTest:
  1. @RunWith(SpringRunner.class)
  2. @SpringBootTest
  3. public class SwaggerDocTest {
  4.   private MockMvc mvc;
  5.   @Autowired
  6.   private WebApplicationContext wac;
  7.   @Before
  8.   public void getSession() throws Exception {
  9.     mvc = MockMvcBuilders.webAppContextSetup(wac).build();
  10.   }
  11.     @Test
  12.     public void createShowDoc() {
  13.       RestTemplate client = new RestTemplate();
  14.       String swaggerUiUrl ="http://";      //swagger的测试地址
  15.     String apiKey ="fakekey";      //showdoc上用的参数
  16.     String apiToken = "faketoken";    //showdoc上用的参数   
  17.     ResultActions ra;
  18.     String json = "";
  19.     try {
  20.       ra = mvc.perform(MockMvcRequestBuilders.get("/v2/api-docs")
  21.           .contentType(MediaType.APPLICATION_JSON)
  22.           .accept(MediaType.APPLICATION_JSON_UTF8)
  23.           );
  24.       ra.andExpect(MockMvcResultMatchers.status().isOk());
  25.       ra.andDo(MockMvcResultHandlers.print());
  26.       json = ra.andReturn().getResponse().getContentAsString();
  27.       
  28.     } catch (Exception e) {
  29.       e.printStackTrace();
  30.     }
  31.     HttpHeaders headers = new HttpHeaders();
  32.     HttpMethod method = HttpMethod.POST;
  33.     headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
  34.     headers.add("Accept", MediaType.APPLICATION_JSON_UTF8.toString());
  35.     headers.add("apiKey", apiKey);
  36.     headers.add("apiToken", apiToken);
  37.     String reqBody = "{\"reqBody\":"+json+"}";
  38.     HttpEntity<String> strEntity = new HttpEntity<String>(json,headers);
  39. //获取swagger的json数据并发送到showdoc上
  40.     String result =
  41. client.postForObject("http://*****/**?swaggerUiUrl="+swaggerUiUrl, strEntity,String.class);
复制代码
本测试类的的用处在于通过访问本工程Swagger在线接口的地址,获取Swagger在线接口页面所展示的json数据,并将此json数据发送到ShowDoc上,ShowDoc将这些json数据转换成在线接口文档并保存历史[url=]记录[/url]
  发布工程,并执行测试用例,使其自动更新在线接口文档,测试或者前端开发人员观看ShowDoc在线接口的历史版本信息来查看接口的变化情况。步骤如下:
  (1)打开ShowDoc,并点击相应接口的历史版本。
  (2)展示历史版本的变化信息。








欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2