节省时间!再也不用等前后端一致才测试了

发表于:2021-6-23 09:45

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:赵文涛 朱晓萌    来源:51Testing软件测试网原创

  问题描述
  前后端分离体系中,后端接口变动时,前端需要相应调整,但是往往没有提供详细的接口调整说明,无法开展测试
  拟通过编写代码并在构建后端程序时自动执行,自动生成接口文档并可查看变动情况。

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

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

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

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

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

  对工程中的每一个controller增加Swagger插件。
  操作步骤如下:
  (1)引入Swagger的pom文件。
      <dependency>
      <groupId>io.springfox</groupId>
      <artifactId>springfox-swagger2</artifactId>
      <version>${swagger.version}</version>      
    </dependency>

  (2)在启动类上增加注解。
@EnableSwagger2
@EnableFeignClients
@EnableScheduling
@SpringBootApplication
public class Init{
  public static void main(String[] args) {
    TimeZone.setDefault(TimeZone.getTimeZone("GMT+8"));
    SpringApplication.run(InitActivity.class, args);
  }
}


  (3)在controller中增加controller的注释编写。
    @ApiOperation(value = "test", httpMethod = "POST", response = test.class, notes = "测试接口")
  @RequestMapping(value = "/test", method = RequestMethod.POST, consumes = "application/json")
  public String test(@RequestBody String reqBody)
 {}


  编写测试用例获取工程的Swagger在线接口页面的json数据并发送给ShowDoc。操作步骤如下:
  (1)首先,在工程中创建测试用例所在的目录和路径,如图所示。
  这里使用的路径名称是 /src/test/java/com/test。
  (2)编写测试类 SwaggerDocTest:
@RunWith(SpringRunner.class)
@SpringBootTest
public class SwaggerDocTest {
  private MockMvc mvc;
  @Autowired
  private WebApplicationContext wac; 
  @Before
  public void getSession() throws Exception {
    mvc = MockMvcBuilders.webAppContextSetup(wac).build();
  }
    @Test
    public void createShowDoc() {
      RestTemplate client = new RestTemplate();
      String swaggerUiUrl ="http://";      //swagger的测试地址
    String apiKey ="fakekey";      //showdoc上用的参数
    String apiToken = "faketoken";    //showdoc上用的参数    
    ResultActions ra;
    String json = "";
    try {
      ra = mvc.perform(MockMvcRequestBuilders.get("/v2/api-docs")
          .contentType(MediaType.APPLICATION_JSON)
          .accept(MediaType.APPLICATION_JSON_UTF8)
          );
      ra.andExpect(MockMvcResultMatchers.status().isOk());
      ra.andDo(MockMvcResultHandlers.print());
      json = ra.andReturn().getResponse().getContentAsString();
      
    } catch (Exception e) {
      e.printStackTrace();
    }
    HttpHeaders headers = new HttpHeaders();
    HttpMethod method = HttpMethod.POST;
    headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
    headers.add("Accept", MediaType.APPLICATION_JSON_UTF8.toString());
    headers.add("apiKey", apiKey);
    headers.add("apiToken", apiToken);
    String reqBody = "{\"reqBody\":"+json+"}";
    HttpEntity<String> strEntity = new HttpEntity<String>(json,headers);
//获取swagger的json数据并发送到showdoc上
    String result = 
client.postForObject("http://*****/**?swaggerUiUrl="+swaggerUiUrl, strEntity,String.class);


  本测试类的的用处在于通过访问本工程Swagger在线接口的地址,获取Swagger在线接口页面所展示的json数据,并将此json数据发送到ShowDoc上,ShowDoc将这些json数据转换成在线接口文档并保存历史记录
  发布工程,并执行测试用例,使其自动更新在线接口文档,测试或者前端开发人员观看ShowDoc在线接口的历史版本信息来查看接口的变化情况。步骤如下:
  (1)打开ShowDoc,并点击相应接口的历史版本。
  (2)展示历史版本的变化信息。

      版权声明:本文出自51Testing会员投稿,51Testing软件测试网及相关内容提供者拥有内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像,否则将追究法律责任。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号