• 0
  • 0
分享
  • 节省时间!再也不用等前后端一致才测试了——软件测试圈
  • 曼倩诙谐 2021-07-12 10:41:20 字数 3181 阅读 1186 收藏 0

  问题描述

  前后端分离体系中,后端接口变动时,前端需要相应调整,但是往往没有提供详细的接口调整说明,无法开展测试。

  拟通过编写代码并在构建后端程序时自动执行,自动生成接口文档并可查看变动情况。

  解决方案

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

  适用技术栈

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

  应用价值点和创新点

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

  适用工具

  所使用到的工具主要是Junit、Swagger(工程在线接口辅助工具)、ShowDoc,前提默认已经部署ShowDoc的测试环境。

  ShowDoc是一款用于团队级别的在开发测试阶段在线文档分享工具,可以收集json数据并以在线文档的形式展示出来。

  过程描述

  总体的流程如下图所示。

1.png

图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软件测试网原创

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   关于Jektor  Jektor是一款功能强大的Windows用户模式Shellcode执行测试工具,该工具可以帮助广大研究人员了解和测试恶意软件所使用的各种不同技术。  该工具主要针对的是Shellcode注入技术,可以演示恶意软件在目标系统上执行Shellcode时所使用的技术方法,其中包括:  · 动态解析API函数以避免IAT包含  · 使用未记录的NT Windows API函数  · 通过CreateThread执行本地Shellcode  · 通过CreateRemoteThread执行远程Shellcode  · 通过QueueUse...
            0 0 1055
            分享
          • 一、Monkey简介Android系统自带monkey程序,模拟用户触摸屏幕、滑动Trackball、按键等操作来对设备上的程序进行压力测试,检测程序多久的时间会发生异常。Monkey的使用是在产品稳定了,没有特别多的Bug时候。用monkey去测试待测应用的稳定性、健壮性(是否会发生闪退、崩溃),手机出厂前的整机测试。Monkey犹如其猴子的译名,就是杂乱无章的乱点,通过指定执行点击次数,不断的点击安卓系统,或者指定的App,给系统产生压力。注意:在使用Monkey之前,需要利用adb将PC端与安卓设备连接。二、monkey常见命令1.1、调出说明手册命令:adbshellmonkey–he...
            0 0 2357
            分享
          •   多年之后,当我们回顾过往时,总能发现一些漫不经意的选择却影响了我们一生的走向。  学院路两旁的树叶逐渐发黄掉落,阿聪背着书包从宿舍出发去图书馆。道路上熙熙攘攘的师兄、师姐拿着一踏踏厚厚的求职简历,晃的阿聪的内心泛起波波焦虑。阿聪在旁人眼里是一个从小长到大的听话孩子,在家听父母的话,在学校听老师的话,甚至出去玩也听朋友的话。这样的成长经历,使得阿聪喜欢随大流、喜欢被动。看着周围的同学都出去找实习机会,阿聪也萌生了找个实习机会的想法。  说干就动手,第二天阿聪就整理了一大堆实习机会,有在本地(某内陆省会城市)的实习机会,有北上广深一线城市的实习机会。在本地实习的优点就是吃住不愁,学校都有,缺点...
            0 0 348
            分享
          •   笔者从08年开始做软件测试,到现在有10多年的时间了,以功能测试为主,做过将近两年的自动化测试,目前在家里做电商。  大家都知道今年的行情不太好,前段时间在各大网站上投了几百份简历,只收到了一个面试通知,公司在宝安的一个工业园,坐车过去需要一个多小时。  笔试  约好的面试时间是上午10点,为了不迟到,我8点就出发了,大概9点45分到达公司。然后前台让我填了一下表,接着给了我一份面试题,让我做完以后交给她。  我看了一下题目并不难,基本上都是问答题,主要是关于逻辑思维能力以及如何设计测试用例方面的。由于我有一年多的时间没做测试了,所以很多东西都荒废了,导致有几道题没答好,卷子做完之后就交给...
            0 0 949
            分享
          •   一、request 请求超时设置  timeout 超时时间是可以手动设置的,新建一个 http 请求,在“高级”设置中找到“超时”设置,设置连接、响应时间为2000ms。  1. 请求连接超时,连不上服务器。  现象:  Jmeter表现形式为:前面几个请求是成功的,但是后面请求有的会报错,有的请求成功  报错1:  Response code: Non HTTP response code: java.net.SocketTimeoutException   Response message: Non&nb...
            0 0 993
            分享
      • 51testing软件测试圈微信