• 0
  • 1
分享

前言

一转眼做技术也有 7、8 年时间,担任测试开发教学也有4个年头了。

因为常年帮助各个公司的测试同仁们解决问题,自然比待在某个固定的环境能接触到更多的实际案例,也能见到更多团队的痛点。同时又有时间去系统学习,完善自己的技术栈。

既然有这个优势,也有这个精力,那就去分享更多有价值的东西。行业整体技术提升了,大家都是受益者。这才是我们创建 **"片言"** 的初衷--更高效地帮助技术人员解决问题。

可以分享的内容实在太多,所以在想什么对大家最有

价值呢?越来越多的公司

开始注重服务端的测试。接口测试正是服务端最好的测试方式,也是我认为

所有的测试手段里性价比最高的一个。但是本次不讲基础,接口测试的基础知识大家可以参考我2019年的书

《接口测试最佳实践》

本篇系列连载

《高效接口测试》

更加贴合现在企业快速迭代下,对接口测试以及接口自动化测试的新需求。也可以当作去年那本书的下册!

废话不多说,先上目录:

1. 《更从容地应对接口变更:Swagger自动化解析》

2. 《更智能地模拟数据:如何开发好的Mock服务》

3. 《更快捷地测试无文档接口:使用MitmProxy自动化录制接口信息》

4. 《接口也能精准化测试:接口测试的代码覆盖率统计》

5. 《设计一个好的测试框架:如何深入理解测试框架4要素》

6. 《让接口工具更加人性化:接口自动化的关键字驱动》

正文

01 更从容地应对接口变更:Swagger自动化解析

1.1 什么是Swagger?它能干什么?

相信无论是前端还是后端开发,都或多或少地被接口文档折磨过。前端经常抱怨后端给的接口文档与实际情况不一致。后端又觉得编写及维护接口文档会耗费不少精力,经常来不及更新。测试人员吐槽待测试的接口调不通,每个参数是什么含义也不清楚。

那么能不能有一套规范,后端开发人员只要写了类似代码注释一样的东西,就可以自动生成接口文档呢?Swagger定义了这样一套注释的编写与文档展示的规范。再进一步,能不能只编写一个配置文件,比如:yaml、json。就可以生成一个在线的接口文档,发布到某个服务上提供给项目全体成员访问。接着我又提出了一个"过分"的需求,能不能再给我一个在线的接口调试页面--一个在线的Postman?Swagger衍生出来的一系列项目和工具,满足了我的全部需求。

但即便如此,对于许多开发来说,编写这个yml或json格式的描述文件,本身也是有一定负担的工作,特别是在后面持续迭代开发的时候,往往会忽略更新这个描述文件,直接更改代码。久而久之,这个描述文件也和实际项目渐行渐远,基于该描述文件生成的接口文档也失去了参考意义。

就在此时Java届服务端的大一统框架Spring,迅速将Swagger规范纳入自身的标准,建立了Spring-swagger项目,后面改成了现在的Springfox。通过在项目中引入Springfox,可以扫描相关的代码,生成该描述文件,进而生成与代码一致的接口文档和客户端代码。这种通过代直接码生成接口文档的形式,在后面需求持续迭代的项目中,显得尤为重要和高效。

```

总结:Swagger发展到今天,已经是一组工具包了。它可以集成到各种语言的开发框架中,比如Java、Python、PHP、Go现在全部支持。

后端开发人员更新接口代码后,Swagger相关工具会自动生成接口文档。项目组所有成员可以在线查看,手动点击调用并查看响应内容。

```

我们来看一个具体的例子:

```
http://49.232.147.132:8080/
```

我在上面的阿里云上部署了一个Java的 SpringBoot服务。这个服务是一套完整的商城后台管理系统接口。在该项目中,集成了Swagger模块生成在线接口文档。

大致的项目配置如下(如果你不是一个开发人员,可以不必深究):

- 新增maven依赖

```
<!--swagger2-->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.8.0</version>
</dependency>
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.8.0</version>
</dependency>
```


- 新建配置类

```
/**
 * Swagger2API文档的配置
 */
@Configuration
@EnableSwagger2
public class Swagger2Config {
    @Bean
    public Docket createRestApi(){
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.macro.mall.demo"))
                .paths(PathSelectors.any())
                .build();
    }
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("SwaggerUI演示")
                .description("Demo模块")
                .contact("macro")
                .version("1.0")
                .build();
    }
}
```


- 在对应的controller类中,符合Swagger的编写规范


图1.jpg


配置完毕后,在项目部署的端口后面,增加部分后缀。就可以查看接口在线文档,地址如下:

```
http://49.232.147.132:8080/swagger-ui.html
```


图2.jpg


从上面的图中可以看出,对于一个典型的Java Web项目。每一个控制器(也就是Controller),你可以把它理解成一个子模块。每个模块中有不同的方法,每个方法其实就是我们平时测试的一个业务接口。

展开页面中的某个接口方法,可以看到该接口详细的信息。包括:响应的标准样例,每个请求参数的说明和参数类型,响应的常见错误码说明。点击最下方的 "try it out" 按钮,可以完成在线接口调用并在下方看到本次调用的具体响应数据。是不是比postman还要好用?只是没有自动化测试的功能。


图3.jpg

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

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   这篇文章会产生,是因为刚好有一个项目,同时用到了这两款工具,而正是工具的使用让我解放了双手,感受到了什么是高效、智能化。  故事背景  某个功能模块的测试数据无法通过界面操作,为了模拟出真实的测试场景,开发人员提供了一个内部的接口文档,希望通过接口调用复现真实使用环境。  这里我大概讲一下测试流程及顺序,首先普及一下什么是Swagger UI。  Swagger UI  Swagger是一组开源项目,接口的文档可以在线自动生成,不需要频繁更新接口文档,保证接口文档与代码的一致性。  这里的实时更新是它的一大优点。试想一下,有些公司基本上使用word维护接口文档,假如出现涉及到接口变更情况,...
            12 13 3358
            分享
          • 一、前言应用程序访问与操作数据库,需要与数据库建立一条连接。但建立数据库连接是一个比较消耗时间和资源的过程。尤其在多并发访问时,会造成数据库连接频繁的创建与关闭,导致程序性能急剧下降,严重时可以造成应用程序崩溃。目前最常用的解决方案是使用数据库连接池管理数据库连接。数据库连接池是数据库连接对象的缓存技术,负责分配、管理、释放数据库连接。应用程序在启动时创建指定数量的数据库连接组成数据库连接池,由应用程序动态的对池中的连接进行复用、增加和释放。连接池技术避免了重复创建和关闭数据库连接带来的消耗,极大的复用了内存资源,从而提高了程序的运行效率。二、数据库连接池测试1、测试背景我司因数据库连接池的选...
            0 1 1698
            分享
          •   盲区预警(BSW blind spot detection)  通过车辆周围排布的传感器及盲点探测器,在超车、换道、大雾、雨天等易发生危险的情况下,通过后视镜以及仪表显示提醒驾驶员。当驾驶员开启该功能时,车速处于20-70km/h的行车工况下,未开启转向时,当同向车道有同速度车辆,进行后视镜显示报警信息,当开启转向时,增加仪表信息显示报警。  车道偏离预警(LDW lane departure warning)  当系统开启时,摄像头会时刻采集车道线,通过图像处理获取车辆的位置参数,当检测到车辆偏离汽车轨道时,传感器会及时手机车辆数据和驾驶员操作状态,发出警报,如果驾驶员打开转向灯,则不发...
            0 0 220
            分享
          •   一、十年测试感悟  恍惚间,已经进入测试岗位十年多的时间了,回顾过往,思绪良多,一路走来,或多或少的经历了一些坎坷,也遇到了不少的困难,也曾一时间四顾迷茫,在此,我结合了自己的一些心得,愿本篇文章,能让想进入测试行业的朋友们有一个方向,避免和我一样,独自闯荡江湖还没成为大侠,却已经走了不少弯路。  二、写给刚进入测试岗位的你  刚入测试行业,你会发现自身的期望与现实落差很大,随着时间迁移越来越迷茫,当时的我也是摸着石头过河,随着时代的飞速发展 ,技术的变更也越来越快,测试人员需要学的越来越多,在此给出几点建议。  三、勾画职业蓝图  明确中前期测试工程师本身的发展规划,在此建议大目标、小阶...
            0 0 1210
            分享
          • 1、功能性:软件所实现的功能满足用户需求的程度.功能性反映了所开发的软件满足用户称述的或蕴涵的需求的程度,即用户要求的功能是否全部实现了。2、可靠性:在规定的时间和条件下,软件所能维持其性能水平的程度。可靠性对某些软件是重要的质量要求,它除了反映软件满足用户需求正常运行的程度,且反映了在故障发生时能继续运行的程度。3、易使用性:对于一个软件,用户学习、操作、准备输入和理解输出时,所做努力的程度。易使用性反映了与用户的友善性,即用户在使用本软件时是否方便。4、效率:在指定的条件下,用软件实现某种功能所需的计算机资源(包括时间)的有效程度。效率反映了在完成功能要求时,有没有浪费资源,此外"...
            0 0 11113
            分享
      • 51testing软件测试圈微信