不用写代码,也能做好接口测试 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
muxuClover
V2EX    分享创造

不用写代码,也能做好接口测试

  •  
  •   muxuClover 201-10-11 15:31:19 +08:00 3191 次点击
    这是一个创建于 2564 天前的主题,其中的信息可能已经有所发展或是发生改变。

    本文你将了解到

    1、接口测试基本概念,包含什么是接口,什么是接口测试,为什么要做接口测试

    2、接口测试用例设计

    3、怎样不用写代码,也能快速的根据开发的 API 文档完成接口自动化测试脚本

    注:如果你对接口基本概念和接口测试用例已熟悉,可以直接跳过,其实看一遍也无防,就当作 温故知新了。

    适合本文人群

    1、之前学习接口测试从入门到放弃的初级测试工程师

    2、想快速完成 接口测试脚本编写的测试工程师(强烈推荐)

    3、因某种原因(比如公司没有专职测试人员),需要自己写接口测试脚本的开发人员(强烈推荐)

    一、接口测试基本概念

    首先了解被 测试对象:接口

    接口是指外部系统与系统之间以及内部各子系统之间的交互点。

    包括外部接口、内部接口,内部接口又包括:上层服务与下层服务接口(比如 serivce 层调用 DAO 层接口)、同级接口(比如用户注册,会先调用查询用户信息的接口,查看该用户是否已经注册)。

    不管是内部接口还是外部接口,一般是以 API 形式出现,通常在规范的 API 接口文档中,应该包含:接口描述、接口 URL、请求方式、请求参数、参数类型、参数含义说明、取值限制、是否必填、返回参数、成功与失败示例等。

    然后了解对接口进行的测试活动:接口测试

    广义的理解 接口测试就是,对模块或系统间接口进行测试;

    狭义的理解接口测试就是,对接口的入参、接口处理逻辑、设计的返回内容进行测试。

    接口测试形式:单个接口测试(包含性能测试)和通过接口调用进行场景测试。

    接口测试原理:通过工具或自己撸代码,模拟客户端(根据测试用例定义请求参数)向服务器端请求访问接口,检查服务器端返回内容是否与预期值一致。

    接口测试流程(仅指迭代中的流程):需求评审 -> 接口定义 -> 用例设计 -> 脚本编写 -> 执行脚本 -> 结果分析

    最后了解做接口测试的意义,即:为什么要做接口测试

    简单来说就是,降低测试成本,提高开发效率。

    充分来说就是:

    1、接口测试相对容易实现自动化持续集成。

    2、接口测试能让测试提早介入,发现潜在问题;保证接口质量,提高前后端联调开发效率。

    3、接口测试进行安全验证比较容易:前后端是否统一校验和敏感信息打印(接口返回内容中的敏感信息)是否加密过。


    二、接口测试 用例设计

    这里只说单个接口测试用例设计,场景接口测试用例设计和 UI 功能的场景测试用例一样,只是通过调用接口来实现而已。

    设计接口测试用例,主要从接口入参、接口处理逻辑、接口返回参数等 3 个方面入手:

    1、设计接口入参测试用例,常见参数类型有:数值、字符串、数组或链表、结构体

    针对这些类型入参,通常我们通过等价类方法和边界值方法 去设计测试用例

    等价类方法:关注取值为范围内、取值为范围外的情况;通常会出现 取值在范围外时,接口没有正确返回错误信息的问题。

    边界值方法:关注取值范围的边界值、入参的数据类型边界值;通常会出现数据类型边界值溢出问题,比如 int 类型数据的最大值和最小值时。

    为了补充用例,还要考虑特殊值的情况,比如 0、空、null、负数、非特定类型值和重复值等;通常会出现接口没有正确处理逻辑导致异常退出的问题。

    2、设计接口处理逻辑测试用例,主要是验证前后端是否统一校验

    针对接口处理逻辑,通过从以角度分析:

    约束条件分析,常见的约束条件:数值限制、状态限制(登陆状态)、关系限制(绑定了某种关系)、权限限制(会员、非会员等)。

    操作对象分析,比如项目 ID 为 PJ000 属于用户 A 的,访问这个项目的接口,需要传项目 ID,用户 B 传参时,使用 PJ000 这的 ID 时,检查是否应该不能访问这个项目。

    状态转换分析,比如优惠券已使用,是否通过接口仍能使用等情况。

    时序分析,比如不按流程顺序执行,是否出现数据异常情况。

    3、设计接口返回参数测试用例

    针对接口处理逻辑,通过从以下角度分析:

    返回结果分析,覆盖所有返回码。

    接口超时分析,接口超时通常会出现,未进行超时处理,导致流程阻塞或超时后,又收到接口返回,导致逻辑出错。


    三、不用写代码,也能做好接口测试:No Code, Still API Test

    不用写代码,也能做好接口测试,当然需要借助神器,才能完成这项工作,这个神器叫做:eolinker,官网 https://www.eolinker.com

    在用 eolinker 之前,我是用 jmeter 做接口测试的,用 jmeter 之前是用 python requests,觉得 jmeter 效率更高,效率高体现在:

    1、测试不需要写代码,大家知道 测试用代码写测试脚本跟开发写产品代码一样,需要编写-调试-测试-维护,对于测试来讲,需要消耗太多时间和精力,除非公司有专人做测试开发。

    2、UI 模式,填空就可以,很简单,最多就是用 Beanshell 写少量的函数调用或断言

    做接口测试只是用到 eolinker 的自动化测试功能模块,其他功能去官网注册账号后,自行了解,这里只说下 eoLinker 自动化测试功能模块的特点,也是我选用的理由:

    1、开发的 API 文档编写和测试的接口测试脚本编写,可以都在 eolinker 上进行,所以写测试脚本时,可以直接从 eolinker 的 API 文档功能模块中,导入 API 接口,写测试脚本只需添加断言,和要传的参数即可。

    2、支持 UI 和 Code 两个编写模式,就是说可以通过 UI 填空方式完成测试脚本设计,也可以通过写 JS 代码,完成测试脚本设计,官方有教程。

    3、调用之前接口的返回参数内容,作当前接口的请求参数,eolinker 提供了 关联功能,只要点点点就可以完成,比 Jmeter 还要便捷。

    4、还提供比较高级的代码注入功能,可以在请求接口前,做一些前置处理,比如请求参数值加密等,也可以把返回内容进行后置处理,比如把接口的返回内容中某个字段值,设成全局变量

    5、测试结果断言提供 4 种方式:Json 校验、XML 校验、完全匹配、正则匹配,用的最多是 Json 校验,如果想校验某个字段内容,不需写正则,只要直接要校验的字段名就可以了。

    6、可以定时执行测试用例,执行完后,发送测试报告到指定人员邮箱中。

    编写接口测试用例脚本 工作流程:开发编写 API 接口文档 -> 导入开发的 API 接口,测试根据编写好的测试用例,编写测试用例

    拿 eolinker 的一个“添加接口项目接口”测试为例,做以下工作:

    1、编写添加名为“添加接口项目”和“查询项目列表” API 接口文档

    2、导入 API 接口,编写“添加项目成功”测试用例:

    • a. 添加项目,校验返回码。

    • b. 调用“查询项目列表接口”,检查项目是否成功添加。(像这种新增接口,我以前校验,用过连接数据库,然后查表内容,发现执行脚本的时候,速度有点慢,后来改用调用查询列表接口的方法校验)

    3、执行测试脚本,查看测试报告。


    Pre 准备

    接口 1:添加接口项目接口

    添加接口项目接口的请求头

    添加接口项目接口的请求头

    添加接口项目接口的返回内容

    添加接口项目接口的返回内容

    接口 2:查询项目列表接口

    查询项目列表接口的请求头

    查询项目列表接口的请求头

    查询项目列表接口的返回内容

    查询项目列表接口的返回内容

    从上面得到 2 个接口 API 文档信息:

    注:实际项目中是有一份开发写好的 API 文档,可能是 Word 上,可能是 RAP 上,也有可能是在 eolinker 上,我在这里只是为了举例,通过 F12 取了 2 个接口的信息(如下面),写了 2 个不完整的 API 文档作为本文的操作示例。

    接口 1:添加接口项目接口 接口 URL: https://www.eolinker.com/apiManagementPro/Project/addProject

    请求方法:POST

    请求参数: companyHashKey projectName projectVersion:1.0 projectType:0

    返回内容: {"type":"project","statusCode":"000000","projectHashKey":"Nr2PNlf82c6a7995d30286e041944fd40e4c01d58b3edeb"}

    接口 2:查询项目列表接口

    接口 URL: https://www.eolinker.com/apiManagementPro/Project/getProjectList

    请求方法:POST

    请求参数:companyHashKey

    返回内容: {"type":"project","itemNum":4,"statusCode":"000000","projectList":[{"projectHashKey":"83uUHhud0519435001f268f0871eee88090cc68dc00cac7","projectName":"demo_project","projectType":0,"projectDesc":"","projectUpdateTime":"2018-10-08 18:26:57","projectVersion":"1.0","userType":0,"permission":{"userType":0,"endTime":"2099-01-01","isExpire":0}}]}


    Step 1 编写添加名为“添加 API 接口管理项目”和“查询项目列表” API 接口文档

    555.gif

    1、 添加 API 接口管理项目接口 API 文档

    666.gif

    2、 查询项目列表接口 API 文档


    Step 2 导入 API 接口,编写“添加项目成功”测试用例

    注:这里访问接口需要登录,这次就不说接口授权的内容了,后面会做个专题,这里我直接用 cookie 模拟登录状态

    777.gif

    导入 API 接口,添加项目,校验返回码

    注:这里用到了正则,因为返回的 projectList 是数组,JSON 校验中,目前不支持数组校验

    888.gif

    将导入的 API 接口编辑成测试用例脚本


    Step 3 执行测试脚本查看测试报告

    999.gif

    执行测试脚本,查看测试报告

    如此,就很快速地完成了一个测试用例脚本的编写啦!(点下 全部测试,去泡杯茶,回来看测试报告的日子,指日可待!!)

    补充:

    1、关于登录,获取接口授权的处理,可以写到前置用例中(也有后置用例),如同 python unittest 的 setUp 与 tearDown 作用。 2、有单独的环境管理模块,包含设置默认的 hostname、请求头部信息、全局变量和额外参数等,上个图看下

    10.png

    环境管理界面


    最后总结:

    本文向接口测试学习者描述了接口、接口测试为何物,通过对接口测试的基本概念了解,再掌握接口测试用例的设计方法及思路,最后借助优秀的工具,达到简易、快速的工作效果;

    个人看法,不喜勿喷:有些测试可能为了表现自己也是个开发人员,会写代码,便使用大量的代码去写自动化测试脚本,文中我也提到测试写代码是有很大成本的,当然不是说不建议测试会开发,

    我们可以去开发一些测试工具来协助自己的测试工作,一来锻炼开发能力,二来了解软件运作原理,方便测试过程中,更清楚软件内部结构;

    项目通常给我们测试的时间不多,为了保障项目按质按量按时的完成,简易、快速的工作状态是我们所迫切的,所以我们可以借助一些优秀的工具去达到我们的目的。

    END...

    5 条回复    2025-07-30 23:02:13 +08:00
    097ecom
        1
    097ecom  
       2018-10-11 17:07:15 +08:00
    https://www.eolinker.com/apiManagementPro/Project/getProjectList
    "getProjectList"你的接口命名一点都不规范....
    warcraft1236
        2
    warcraft1236  
       2018-10-11 19:44:48 +08:00   3
    Postman 不好吗
    muxuClover
        3
    muxuClover  
    OP
       2018-10-12 10:01:01 +08:00
    @097ecom 见笑见笑了,只是自己做来 demo 而已
    muxuClover
        4
    muxuClover  
    OP
       2018-10-12 10:01:41 +08:00
    @warcraft1236 postman 不是不好,只是体验不够好
    linuxsuren
        5
    linuxsuren  
       80 天前
    最纯粹的开源接口开发测试工具 api-testing 发布 v0.0.20 https://github.com/LinuxSuRen/api-testing/releases/tag/v0.0.20
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1322 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 17:16 PVG 01:16 LAX 10:16 JFK 13:16
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86