接口测试 python 接口自动化测试框架

tianfuzhiguo · 2020年08月11日 · 964 次阅读

打包好的客户端放在百度网盘上
链接: https://pan.baidu.com/s/1iAcIexEl1HXwryPm9OMIfQ 提取码: npbe

一、概述
这是一个基于 python 的接口自动化测试项目,使用 excel 管理测试用例,客户端操作,使用过程中不需要关注代码。设计中主要遵循两点原则:简单易用、覆盖常用场景。
二、基本结构
项目包含 3 个部分,配置文件、用例文件、客户端。

三、页面展示
1、用例文件
用例文件使用 excel,支持两种格式的 excel,但不建议使用.xlsx 格式,因为程序中处理.xlsx 格式用的是 openpyxl 库,性能比较差。支持固定值、数据库、表达式等多种校验方式;支持数据初始化,数据恢复、接口依赖等常见需求。

part101~part301 是需要校验的数据
section101~section301 是预期结果
这部分分为 3 种不同的校验方式:
Part101~section101:固定值校验
Part101 填写 JSONPATH 如 ['sites'][0]['name']
Section101 填写一个固定的预期结果如:helloworld

Part201~section201:数据库校验
Part101 也是 JSONPATH,如 ['sites'][0]['name']
Section201 这时候填写的不再是一个固定的值,而是从数据库中查询出的数据,可以这么写:select 'helloworld'
需要注意的时候,如果用例中需要写 sql 语句(不仅此处),那么首先需要选择数据库

Part301~section301:校验数据是否入库
有时候在接口请求之后要校验数据是不是真的入库了就可以使用这部分校验
Part301 填写 sql 语句
Section301 填写预期结果

以上 part101~section301 部分为精确校验。

JSON 解析:
如果接口响应层次比较深,可以使用 “JSON 解析” 功能把接口响应解析为 key-value 形式,然后直接复制想用到的 jsonpath 即可。

模糊校验:
如果不想进行精确校验,只想看某些值是不是包含在接口响应中或响应头中,则可以使用响应断言 resText 或 resHeader。

表达式:
以上校验通常可以满足大多数场景,但有些场景不能很好的满足,如,我可能想校验响应中的某个列表的长度,或者某个字段是不是手机号,这时候需要使用表达式进行校验,这里的表达式其实就是一句 python 代码,如我想校验接口响应中的列表长度则可以这么写:len(r.json()['sites'])==3,此处需注意:程序中的接口响应对象是 “r”。

数据库初始化、数据恢复、动态参数:
这三部分都是 sql 语句。顾名思义,数据初始化是在接口请求之前对数据库进行的初始化操作,数据恢复是在接口请求之后对数据库进行的恢复操作。动态参数最初则是基于这样的考虑,有些接口的请求参数不是固定的,那么我们就需要从数据库中实时获取,假如参数 ID 是自增的,我们实时从数据库中查询出最新的 ID 赋给参数列表,可以这么写:select ID from XX where XX,参数列表中使用 ${ dyparam001 }进行调用。当然动态参数不仅仅用于自增参数,任何从数据库中取出的数据都可以用作动态参数,如使用 sql 随机一个手机号或者调用 md5 函数对某个值进行加密。动态参数只能用于当前行。

${变量名},这个是本项目中变量的引用格式,项目中存在 3 种变量,用户变量,动态参数和接口变量,都使用相同的引用格式。

接口变量:
很多情况下接口之间会存在依赖关系,如其他接口依赖于登录接口,这时候就要设置接口变量。如 B 接口依赖 A 接口中的某个 [‘token’] 字段,则可以在 A 接口的 key001 填写 [‘token’] 在 value001 中填写 token,key001 是依赖的字段,value001 是给这个字段设置的变量名,在 B 接口中就可以用 ${token}的形式来调用这个变量。

信息头管理器:
信息头管理器可供后续接口隐式调用,还是以 AB 两个接口为例,如果 B 接口请求时需要带请求头,当然可以在 B 的 header 中直接填写,但如果 B 之后的接口 CDEF……都需要使用相同的请求头,那么这时候就可以用到信息头管理器了,可以在 A 的信息头管理器中填写{“token”:”${token}”},如果 B 中没有填写 header,那么 B 就会引用 A 的信息头管理器,如果 B 中填写了请求头,那么信息头管理器在 B 接口中就不起作用了。

数据库:
数据库信息是在配置文件中配置的,支持 3 种数据库,oracle,sqlserver.mysql。项目中预置了 3 个数据库:DB1,DB2,DB3,也可以在配置文件中自定义数据库,使用 ${}形式调用即可。

迭代次数:
需要注意的是迭代次数为 0 即该条用例不执行。

列的增加和删除:
模板中的很多列都可以根据实际需要增加或删除,如,我想校验 5 个字段,那么在 part101 后面加几列就可以了,同时在对应的 section101 后面也加相同的列数;如果用到两个动态参数,就在 dyparam001 后面加一列,使用 ${dyparam002}引用。
2、客户端
点击选择按钮可以选择用例文件,然后先择用例文件中相应的接口模块,可以批量或单个调试,也可全量执行。支持普通和简洁两种模式,普通模式会把接口响应异常出错等全部信息输出到客户端;如果只想查看出错信息等主要内容可选择简洁模式。

解析 JSON 按钮实现接口响应解析成 JSON 格式,可以将解析出的 jsonpath 复制填写到 excel 中。

3、配置文件

4、测试报告
接口用例执行完成后,点击 excel 报告和 html 报告,可查看此次接口执行的报告,便于后期接口测试的分析。
excel 结果文件会把出错的信息标示在单元格中,青色表示异常(数据格式等),红色表示失败。

html 测试报告采用开源的 BeautifulReport 报告。

5、日志
执行接口报错后,我们可以点击查看日志按钮,查看执行的接口的请求,响应 的信息进而分析接口出错原因。

共收到 10 条回复 时间 点赞

请问一下用例里面的表达式是什么意思?

我把使用说明补充到贴子里了,里面有对表达式的解释。

虽然样式丑了点,但我还是看完了,先点个赞先!

在公司的项目用了一下,总体感觉挺简单直观的,功能方面到目前为止也都能满足,只是源码有些看不懂啊,可以加下微信或 QQ 吗。

shituantuanya 回复

627982310

宠儿i [92年 大龄阿姨的求助帖] 接口用例维护 中提及了此贴 09月01日 02:40

小哥哥厉害了

from common.utils.Util import * 在 untils 中没有 Util 这个包

sm.py 是程序入口,这个入口没有在源码中找到!

匿名 #11 · 2021年03月04日

在公司的项目用了一下,总体感觉挺简单直观的,功能方面到目前为止也都能满足,只是源码有些看不懂啊,可以加下微信或 QQ 吗。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册