天府之国37 发表于 2020-8-13 11:53:18

python接口自动化框架

本帖最后由 天府之国37 于 2020-8-14 17:51 编辑

源码地址:https://github.com/tianfuzhiguo/shimo
由于github不支持大文件上传,打包好的客户端放在百度网盘上,客户端所需要的配置文件和用例模板在demo文件夹中
链接: https://pan.baidu.com/s/1iAcIexEl1HXwryPm9OMIfQ 提取码: npbe

一、概述
这是一个基于python的接口自动化测试项目,使用excel管理测试用例,客户端操作,使用过程中不需要关注代码。设计中主要遵循两点原则:简单易用、覆盖常用场景。
二、基本结构
项目包含3个部分,配置文件、用例文件、客户端。
!%5B%5D(/uploads/photo/2020/09849e73-91e2-448a-a9b2-b7fe9548354e.png!large)
https://img-blog.csdnimg.cn/20200811161810859.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3N1ZGljaHVueGlhbzgxNw==,size_16,color_FFFFFF,t_70
三、页面展示
1、配置文件
https://img-blog.csdnimg.cn/20200811161506608.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3N1ZGljaHVueGlhbzgxNw==,size_16,color_FFFFFF,t_70

2、用例文件
用例文件使用excel,支持两种格式的excel,但不建议使用.xlsx格式,因为程序中处理.xlsx格式用的是openpyxl库,性能比较差。支持固定值、数据库、表达式等多种校验方式,式;支持数据初始化,数据恢复、接口依赖等常见需求。
https://img-blog.csdnimg.cn/20200811161446371.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3N1ZGljaHVueGlhbzgxNw==,size_16,color_FFFFFF,t_70

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

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

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

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

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

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

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

数据库初始化、数据恢复、动态参数:
这三部分都是sql语句
顾名思义,数据初始化是在接口请求之前对数据库进行的初始化操作,数据恢复是在接口请求之后对数据库进行的恢复操作。
动态参数最初则是基于这样的考虑,有些接口的请求参数不是固定的,那么我们就需要从数据库中实时获取,假如参数ID是自增的,我们实时从数据库中查询出最新的ID赋给参数列表,可以这么写:select ID from XX where XX,参数列表中使用这个查询出的ID需要这么写:{“ID”:”${ 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}引用。

3、客户端
点击选择按钮可以选择用例文件,然后先择用例文件中相应的接口模块,可以批量或单个调试,也可全量执行。支持普通和简洁两种模式,普通模式会把接口响应异常出错等全部信息输出到客户端;如果只想查看出错信息等主要内容可选择简洁模式。
https://img-blog.csdnimg.cn/20200811161609617.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3N1ZGljaHVueGlhbzgxNw==,size_16,color_FFFFFF,t_70

解析JSON按钮实现接口响应解析成JSON格式,可以将解析出的jsonpath复制填写到excel中。
https://img-blog.csdnimg.cn/20200811161625122.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3N1ZGljaHVueGlhbzgxNw==,size_16,color_FFFFFF,t_70

接口用例执行完成后,点击excel报告和html报告,可查看此次接口执行的报告,便于后期接口测试的分析。
excel结果文件会把出错的信息标示在单元格中,青色表示异常(数据格式等),红色表示失败。
https://img-blog.csdnimg.cn/20200811161659597.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3N1ZGljaHVueGlhbzgxNw==,size_16,color_FFFFFF,t_70

html测试报告采用开源的BeautifulReport报告。
https://img-blog.csdnimg.cn/20200811161744126.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3N1ZGljaHVueGlhbzgxNw==,size_16,color_FFFFFF,t_70

执行接口报错后,我们可以点击查看日志按钮,查看执行的接口的请求,响应 的信息进而分析接口出错原因。
https://img-blog.csdnimg.cn/20200811161728127.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3N1ZGljaHVueGlhbzgxNw==,size_16,color_FFFFFF,t_70

txboa 发表于 2020-8-14 08:50:04

:victory:
页: [1]
查看完整版本: python接口自动化框架