Python + pytest + allure + log + yaml + mysql + redis + 钉钉通知 + Jenkins 实现的接口自动化框架
公司突然要求你做自动化,但是没有代码基础不知道怎么做?或者有自动化基础,但是不知道如何系统性的做自动化,放在yaml文件中维护,不知道如何处理多业务依赖的逻辑?那么这里 Gitte 中开源的自动化框架,将为你解决这些问题。框架主要使用 python 语言编写,结合 pytest 进行二次开发,用户仅需要在 yaml 文件中编写测试用例,编写成功之后,会自动生成 pytest 的代码,零基础代码小白
源码地址:git地址
不是本人开发,网上找的开源框架--------》项目参与者: 余少琪
- 技术支持邮箱: 1603453211@qq.com
- 个人博客地址: https://blog.csdn.net/weixin_43865008
前言
公司突然要求你做自动化,但是没有代码基础不知道怎么做?或者有自动化基础,但是不知道如何系统性的做自动化,
放在yaml文件中维护,不知道如何处理多业务依赖的逻辑?
那么这里 Gitte 中开源的自动化框架,将为你解决这些问题。
框架主要使用 python 语言编写,结合 pytest 进行二次开发,用户仅需要在 yaml 文件中编写测试用例,
编写成功之后,会自动生成 pytest 的代码,零基础代码小白,也可以操作。
本框架支持多业务接口依赖,多进程执行,mysql 数据库断言和 接口响应断言,并且用例直接在yaml文件中维护,无需编写业务代码,
接口pytest框架生成allure报告,并且发送 企业微信通知/ 钉钉通知/ 邮箱通知/ 飞书通知,灵活配置。
- 项目参与者: 余少琪
- 技术支持邮箱: 1603453211@qq.com
- 个人博客地址: https://blog.csdn.net/weixin_43865008
实现功能
- 测试数据隔离, 实现数据驱动
- 支持多接口数据依赖: 如A接口需要同时依赖B、C接口的响应数据作为参数
- 数据库断言: 直接在测试用例中写入查询的sql即可断言,无需编写代码
- 动态多断言: 如接口需要同时校验响应数据和sql校验,支持多场景断言
- 自动生成用例代码: 测试人员在yaml文件中填写好测试用例, 程序可以直接生成用例代码,纯小白也能使用
- 代理录制: 支持代理录制,生成yaml格式的测试用例
- 统计接口的运行时长: 拓展功能,订制开关,可以决定是否需要使用
- 日志模块: 打印每个接口的日志信息,同样订制了开关,可以决定是否需要打印日志
- 钉钉、企业微信通知: 支持多种通知场景,执行成功之后,可选择发送钉钉、或者企业微信、邮箱通知
- 自定义拓展字段: 如用例中需要生成的随机数据,可直接调用
- 多线程执行
- 支持swagger接口文档转成yaml用例,节省用例编写时间
├── common // 配置
│ ├── conf.yaml // 公共配置
│ ├── setting.py // 环境路径存放区域
├── data // 测试用例数据
├── File // 上传文件接口所需的文件存放区域
├── logs // 日志层
├── report // 测试报告层
├── test_case // 测试用例代码
├── utils // 工具类
│ └── assertion
│ └── assert_control.py // 断言
│ └── assert_type.py // 断言类型
│ └── cache_process // 缓存处理模块
│ └── cacheControl.py
│ └── redisControl.py
│ └── logUtils // 日志处理模块
│ └── logControl.py
│ └── logDecoratrol.py // 日志装饰器
│ └── runTimeDecoratrol.py // 统计用例执行时长装饰器
│ └── mysqlUtils // 数据库模块
│ └── get_sql_data.py
│ └── mysqlControl.py
│ └── noticUtils // 通知模块
│ └── dingtalkControl.py // 钉钉通知
│ └── feishuControl.py // 飞书通知
│ └── sendmailControl.py // 邮箱通知
│ └── weChatSendControl.py // 企业微信通知
│ └── otherUtils // 其他工具类
│ └── allureDate // allure封装
│ └── allure_report_data.py // allure报告数据清洗
│ └── allure_tools.py // allure 方法封装
│ └── error_case_excel.py // 收集allure异常用例,生成excel测试报告
│ └── localIpControl.py // 获取本地IP
│ └── threadControl.py // 定时器类
│ └── readFilesUtils // 文件操作
│ └── caseAutomaticControl.py // 自动生成测试代码
│ └── clean_files.py // 清理文件
│ └── excelControl.py // 读写excel
│ └── get_all_files_path.py // 获取所有文件路径
│ └── get_yaml_data_analysis.py // yaml用例数据清洗
│ └── regularControl.py // 正则
│ └── yamlControl.py // yaml文件读写
│ └── recordingUtils // 代理录制
│ └── mitmproxyContorl.py
│ └── requestsUtils
│ └── dependentCase.py // 数据依赖处理
│ └── requestControl.py // 请求封装
│ └── timeUtils
├── Readme.md // help
├── pytest.ini
├── run.py // 运行入口
依赖库
allure-pytest==2.9.45
allure-python-commons==2.9.45
atomicwrites==1.4.0
attrs==21.2.0
certifi==2021.10.8
cffi==1.15.0
charset-normalizer==2.0.7
colorama==0.4.4
colorlog==6.6.0
cryptography==36.0.0
DingtalkChatbot==1.5.3
execnet==1.9.0
Faker==9.8.3
idna==3.3
iniconfig==1.1.1
jsonpath==0.82
packaging==21.3
pluggy==1.0.0
py==1.11.0
pycparser==2.21
PyMySQL==1.0.2
pyOpenSSL==21.0.0
pyparsing==3.0.6
pytest==6.2.5
pytest-forked==1.3.0
pytest-xdist==2.4.0
python-dateutil==2.8.2
PyYAML==6.0
requests==2.26.0
six==1.16.0
text-unidecode==1.3
toml==0.10.2
urllib3==1.26.7
xlrd==2.0.1
xlutils==2.0.0
xlwt==1.3.0
安装教程
首先,执行本框架之后,需要搭建好 python、jdk、 allure环境
搭建python教程:http://c.biancheng.net/view/4161.html
搭建jdk环境:https://www.cnblogs.com/zll-wyf/p/15095664.html
安装allure:https://blog.csdn.net/m0_49225959/article/details/117194318
如上环境如都搭建好,则安装本框架的所有第三方库依赖,执行如下命令
pip3 install -r requirements.txt
如果在安装过程中出现如下 Could not find a version 类似的异常, 不用担心,可能是因为你安装的python环境版本不一致导致的,直接 pip install 库名称,不指定版本安装就可以了。
接口文档
这里非常感谢一位安卓的朋友,给我推荐了开源的接口文件,框架中会针对开源接口中的登录、个人信息、收藏(新增、查看、修改、删除)等功能,编写结果自动化案例
下方是接口文档地址,大家可以自行查看(因为开源的接口,里面有些逻辑性的功能,如修改被删除的网址接口并没有过多的做判断,
因此用例中只写了一些基础的场景,仅供大家参考。)
https://wanandroid.com/blog/show/2
测试环境修改:.\pytest-auto-api2-master\common\config.yaml
详细看这里
如何创建用例
创建用例步骤
1、在data文件夹下方创建相关的yaml用例
2、写完之后,需要执行 utils\readFilesUtils\caseAutomaticControl.py 这个文件,生成自动化代码
3、执行caseAutomaticControl.py文件之后,会发现,在test_case层新增该条用例的对应代码,可直接执行该用例调试
4、注意,如果生成对应的测试代码之后,期间有更改过yaml用例中的内容,需要重新生成代码,必现因为更改yaml用例之后导致运行失败
5、当所有接口都编写好之后,可以直接运行run.py主程序,执行所有自动化接口
注册接口
.\pytest-auto-api2-master\data\Register\register_user.yaml
# 公共参数
case_common:
allureEpic: 开发平台接口
allureFeature: 个人信息模块
allureStory: 个人信息接口
register_user:
host: ${{host()}}
url: /user/register
method: post
detail: 注册账户(每次发送请求需要更改电话号码)
headers:
# Content-Type: multipart/form-data;
# 请求的数据,是 params 还是 json、或者file、data
requestType: data
# 是否执行,空或者 true 都会执行
is_run:
data:
username: '18682414000'
repassword: '123456'
password: '123456'
# 是否有依赖业务,为空或者false则表示没有
dependence_case: False
# 依赖的数据
dependence_case_data:
assert:
# 断言接口返回的username
username:
jsonpath: $.data.username
type: contains
value: '18682414000'
AssertType:
sql:
运行
.\pytest-auto-api2-master\utils\read_files_tools\case_automatic_control.py
生成测试用例py文件.\pytest-auto-api2-master\test_case\Register\test_register_user.py
运行test_register_user.py文件结果如下:
运行run.py就会执行所有的测试用例并生成报告。
常见问题
报告不能生成的原因
1、java环境未配置
2、java环境变量配置错误,如果java环境变量配置错误,如java_home中结尾多了分号;(编辑文本模式下会显示,列表不会展示分号);会提示java环境变量错误
如果无法生成报告出现下列信息
3、端口被占用
User
Report successfully generated to .\report\html
Generating report to temp directory...
Report successfully generated to C:\Users\95744\AppData\Local\Temp\5054885787123615643\allure-report
Starting web server...
2024-03-18 12:53:35.931:INFO::main: Logging initialized @2073ms to org.eclipse.jetty.util.log.StdErrLog
Could not serve the report
java.io.IOException: Failed to bind to transact.netsarang.com/127.0.0.1:9999
at org.eclipse.jetty.server.ServerConnector.openAcceptChannel(ServerConnector.java:349)
at org.eclipse.jetty.server.ServerConnector.open(ServerConnector.java:310)
at org.eclipse.jetty.server.AbstractNetworkConnector.doStart(AbstractNetworkConnector.java:80)
at org.eclipse.jetty.server.ServerConnector.doStart(ServerConnector.java:234)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:73)
at org.eclipse.jetty.server.Server.doStart(Server.java:401)
则说明报告的端口被占用
在Linux系统中,你可以使用netstat -tuln | grep 9999
命令来查看端口使用情况;在Windows系统中,你可以使用netstat -ano | findstr "9999"
命令。如果端口已被占用,你需要停止使用该端口的服务或者选择另一个端口。
终结端口命令:`taskkill /PID /F
测试用例py文件无法生成的问题
运行case_automatic_control.py文件无法生成对应的py文件
解决办法:
1、删除所有的测试用例py文件,再次点击case_automatic_control.py试试
2、运行get_yaml_data_analysis.py进行数据清洗,yaml文件中的某些格式不正确需要进行清洗
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)