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

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

本文分享一个自己学习python时练手写的的接口自动化测试框架。基于python3+requests封装而成,支持批量运行接口用例、日志持久化、测试报告生成、linux上运行

目录

框架流程

框架介绍

框架目录

用例设计思路

exlib模块——框架核心功能

apibase接口基类文件

apireq接口请求文件

log日志文件

html测试报告文件

setting系统配置文件

worktool系统工具文件

venv框架运行环境

apilib接口函数模块

apitest接口自动化用例模块

main框架主函数文件

框架展示


框架流程

 

框架介绍

框架目录

整体框架分为apilib,apitest,exlib,venu,main五大模块

  • apilib/:                    存放接口自动测试用例需要调用的函数
  • apitest/:                  存放接口自动化用例文件,其中每个.py文件对应一个接口自动化用例
  • exlib/:                     存放框架运行过程中需要用的各个函数,例如实时打印日志,生成html测试报告等
  • venv/:                     框架运行环境
  • main.py/:                框架运行主函数文件

用例设计思路

apitest和apilib为需要使用者自行编写的部分

接口用例类apitest中初始化了接口的基本属性,apitest继承了apilib

接口函数apilib为接口用例类提供需要用到的函数,可以实现发送接口请求、断言请求结果、生成日志等功能。apilib类继承了apirequest类和apibase,同时还引用log类

apirequest类为接口用例实现实际发送接口请求。同时apirequest引用setting类,setting类中定义了环境IP、调用端口等公共变量

apibase类为接口基类,定义了接口的公共属性和方法,apitest类可以使用、重写这些属性和方法

log类中提供了日志打印功能

exlib模块——框架核心功能

exlib模块中存放了框架核心功能文件

  • apibase:                      接口基类文件,定义了所有接口用例需要用到的属性和方法
  • apires:                         接口请求类文件,由第三方库requests封装而来,实现实际调用接口
  • getswagger:                爬取swaager文件,批量爬取swagger获取接口信息,目前没用,准备后面拓展框架功能时再用
  • html:                            测试报告文件,读取实时日志生成html测试报告   
  • log:                              日志文件,有第三方库logging封装而来,实现打印框架运行实时日志并保存到本地
  • setting:                        系统公共变量文件,保存框架固定变量
  • worktool:                     框架工具文件,

apibase接口基类文件

接口基类中定义了接口的公共属性和方法。属性包含了name,url,headers等。方法包含了获取属性方法,接口前置、调用、后置方法,断言方法,操作步骤方法。

接口方法run_pre可用于实现接口用例的预置条件,run_test可用于实现接口用例的操作步骤,run_post可用于实现残留数据的清理等,调用debug_run则会按照顺序运行run_pre,run_test,run_post,如果抛出异常会通过traceback库步骤异常并通过日志工具打印到实时日志中

check方法为断言方法,用于比较传入的值是否相等,借此来判断操作步骤的结果

stap方法为操作步骤方法,用于修改当前的操作步骤

apireq接口请求文件

ApiRquest类封装了第三方库requests,目前只封装了get、post、put、delete方法

log日志文件

Logtool日志工具类,封装了第三方库logging,采用了单例模式防止多个logger对象冲突导致日志重复打印,同时使用call方法和classmethod装饰器方便各种方式调用打印日志

run_log日志装饰器,实时打印每次调用接口函数时传入参数和操作结果,并将其保存到日志文件

html测试报告文件

ReadLog类为日志文件处理类,主要功能为解析日志文件,获取到每个接口的名称,接口的结果,接口的运行时间,然后传递给HtmlReport类来生产html测试报告HtmlReport

HtmlReport类生产测试报告类,事先定义好html模板,通过处理日志得到的接口信息来替换模板里面的表格部分内容,替换完之后生成本次框架运行结果的测试报告

setting系统配置文件

目前配置了测试环境IP,端口,接口超时时间

worktool系统工具文件

WorkTool运行工具类,封装了框架的公共方法

为方便框架在linux上也能运行,相关路径通过sys和os模块来获取

venv框架运行环境

venv中包含了框架运行需要的第三方库文件,方便框架的移植。如果框架要在linux上运行,需要手动将venv-lib-sitepackage目录下所有文件拷贝到linux上python路径下的lib-sitepackage目录下

apilib接口函数模块

apilib存放各个待测功能模块对应的接口函数模块

之前自己学习性能测试时用虚拟机搭建了性能监控平台grafana,后面我就用这个平台里面的文件分组模块的相关接口来作为示例讲解apitest和apilib模块,这两个模块也是需要使用者手动编写的模块

folderlib文件中定义了Folder类,该类中定义了新增、修改、删除文件分组的函数

函数中通过继承ApiRequest父类的send方法来实际发送接口请求

由于返回的response为list,所以需要专门作处理解析出状态码

通过父类ApiBase的check断言函数判断状态码判定是否调用成功

添加run_test装饰器,框架会将函数运行的相关信息打印到日志中

apitest接口自动化用例模块

addfolder.py,revisefolder.py,deletefolder.py分别对应新增文件文组、修改文件分组、删除文件分组的测试用例

以新增分组addfolder.py为例

AddFolder类中定义了添加文件分组接口的name、url、name、headers、data等属性和run_pre,run_test,run_post方法

data为一个list,框架要求元素为type和body的键值对,type为这次入参的测试类型,body为调用接口时传递的入参

run_pre由于接口不需要预置条件直接pass,run_test调用接口函数发送新增文件分组清并且获取到接口返回的文件分组id,run_post通过之前获取的文件分组id删除本次调用新增文件分组

最后按框架要求添加py文件被调用时,执行AddFolder类从父类继承到的debug_run方法,这样是为了支持框架main文件批量调用接口用例

main框架主函数文件

main文件首先调用worktool类create_pro_pth方法创建系统运行环境,然后再调用run_all方法运行apitest目录下所有文件,最后调用HtmlReport类report方法生成测试报告

如果要在linux上运行或者在CI继承中运行,需要将框架打包到服务器上然后再通过命令行调用main文件即可

框架展示

pycharm调用

windows命令行调用

linux调用

日志

测试报告

 

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值