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

tianfuzhiguo · August 11, 2020 · Last by 1014TaoTao replied at October 30, 2020 · 6580 hits

打包好的客户端放在百度网盘上
链接: 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、日志
执行接口报错后,我们可以点击查看日志按钮,查看执行的接口的请求,响应 的信息进而分析接口出错原因。

共收到 9 条回复 时间 点赞

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

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

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

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

shituantuanya 回复

627982310

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

小哥哥厉害了

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

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

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up