当前位置: 首页 > news >正文

Python+Pytest+Allure+Yaml+Pymysql+Jenkins+GitLab接口自动化测试框架详解

Python+Pytest+Allure+Yaml接口自动化测试框架详解

编撰人:CesareCheung
更新时间:2024.06.20

一、技术栈

Python+Pytest+Allure+Yaml+Jenkins+GitLab
版本要求:Python3.7.0,Pytest7.4.4,Allure2.18.1,PyYaml6.0

二、环境配置

  1. 安装python3.7,并配置Pycharm运行环境为python3.7
  2. 安装allure并配置好环境变量
  3. 安装依赖包 pip install -r requirements.txt

三、自动化思路

通过请求方法封装及环境配置,用pytest框架运行读取testcase文件测试用例集,将参数传入对应test_*用例执行器汇总并执行输出allure测试报告
1)单个用例
2)多个用例
3)多用例上下游接口串联传参
4)用例执行(场景跑批)
5)测试报告
6)通知(邮件、企业微信)

四、项目结构:

在这里插入图片描述

框架目录详解

–common:公共方法包

--connect_db.py: SQL操作封装
--get_path.py:获取文件路径方法	
--logger_util.py:输出日志方法
--parameters_until.py:传参方式方法封装	
--requests_util.py:请求方式方法封装
--yaml_util.py:yaml文件读取写入方法

–config: 配置包

--config.yml:配置文件,主要为域名ip地址配置及日志输出级别--extract.yml:接口上下游串联时,用例文件做参数化截取返回值后自动输出保存到该文件

–data: 用于存放csv传参文件包(可用可不用,具体根据实际情况)

--get_token.csv:存放csv文件参数

–logs: 日志输出文件,会自动生成

–reports: 测试报告文件

–testcase: 测试用例文件集

	--fenmi:项目测试用例--login.yml:接口参数传参  # 如:-   name: 1、获取UUID#    base_url: https://XXXXX.combase_url: ${get_base_url(base_fenmi_url)}request:method: geturl: /fenmi/codeheaders:Authorization: '{{access_token}}'params:Accept: application/json, text/plain, */*Accept-Encoding: gzip, deflate, br, zstdAccept-Language: zh-CN,zh;q=0.9Connection: keep-aliveextract:uuid: '"uuid":"(.*?)"'validate:-   equals: {code: 200}-   equals: {msg: "操作成功"}                # 解释:name:为接口名称         base_url:读取config.yml文件的域名IP            request:请求参数           method:请求方式           url:接口地址          headers:请求头,比如token,'{{access_token}}'为取上游接口返回值做变量进行参数化,做参数化为固定写法'{{变量名}}'       params: 请求参数,具体需要看接口请求传参方式         extract:用于存在上下游接口关联时对返回值进行取值,固定写法,'"uuid":"(.*?)"'为正则表达式取值,也可用json提取,固定写法'"变量名":正则表达式'          validate:断言           --test_fenmi.py: 单用例执行器,执行式传入对应yaml文件地址即可import allureimport pytestfrom common.requests_util import Requestutilfrom common.parameters_until import read_file@allure.epic('XX互联')@allure.feature('登录并查询服务收入细项列表数据')class Testrequests:# 获取access_token(get请求)@allure.story('获取uuid并登录获取token')@allure.severity("normal")@pytest.mark.parametrize("caseinfo",read_file('/testcases/fenmi/login.yml'))def test_get_token(self,caseinfo):allure.dynamic.title(caseinfo['name'])allure.dynamic.description(caseinfo['name'])Requestutil().analysis_yaml(caseinfo)

–all.py: 主运行程序

–conftest.py: 测试配置工具,clean_extract方法为重跑时清除原文件数据

–debugtalk.py:自定义函数,用于存放公共函数和变量的文件

–environment.properties:用于生成allure测试报告时,配置展示环境数据

–pytest.ini: pytest测试运行配置文件,用于配置pytest运行时指定一些参数

[pytest]
addopts = -vs --alluredir=reports/temp --clean-alluredir            运行时清除原先的测试报告及临时文件
; testpaths = testcases/fenmi                                       执行单个项目测试文件时可选一个testcase目录
testpaths = testcases/fenmi testcases/weixin testcases/Zgen         执行多个项目测试文件时可选多个testcase目录   
python_files = test_*.py                                            执行的文件,及测试用例
python_classes = Test*                                              执行对应测试用例目录所有Test开头的类
python_functions = test_*                                           执行对应类下所有的test开头的方法

五、用例集

1)Yaml用例文件说明:

在这里插入图片描述

2)用例执行文件说明:

在这里插入图片描述

3)CSV文件用例读取:

data参数:

在这里插入图片描述

Yaml文件参数化:

在这里插入图片描述

4)testcase文件:为用例集可在用例集新增对应测试项目可按对应项目命名

5)yaml文件:为对应接口请求参数,可在yaml文件添加一条或者多条用例请求参数

6)test_*.py文件:通过pytest框架封装读取yaml文件参数并可运行的用例运行器

六、接口自动化框架规则

1.必须有的四个一级关键字:name,base_url,requests,validate
2.request关键字必须包含两个二级关键字:method,url
3.传参方式:在request一级关键字下,通过二级关键字参数传参。
如果是get请求,通过params传参。如:

  params:grant_type: client_credentialappid: XXXXXsecret: XXXX
如果是post请求:传json格式,通过json关键字传参。如:json: {"tag": {"id": 100, "name": "XXXaaa" }}传表单格式,通过data关键字传参。如:data:{"tag": {"id": 100, "name": "XXXCaaa" }}传文件格式,通过files关键字传参。如:files:media: "E:/Tanzl.jpg"

4.如果需要做接口关联,那么必须使用一级关键字:extract
提取:

如:json提取方式
extract:access_token: access_token
如:正则表达式提取方式
extract:access_token: '"access_token":"(.*?)"'取值:如:access_token={{access_token}}

5.热加载,当yaml文件需要使用动态参数时,那么可以在debugtalk.py中写方法调用。

  注意:传参时,需要什么类型的数据,需要做强转。int(mix),int(max),如:# 获取随机数def get_random_number(self,mix,max):return random.randint(int(mix),int(max))热加载取值:${get_random_number(100000,999999)}

6.此框架支持两种断言方式:分别是equals和contains断言:
如:

validate:
-   equals: {status_code: 200}
-   equals: {expires_in: 7200}
-   contains: access_token

7.数据驱动使用csv和一级关键字parameters实现:如:

yaml写法:parameters:name-appid-secret-grant_type-assert_str: data/get_token.csv
csv写法:name,appid,secret,grant_type,assert_str获取access_token统一鉴权码,wx9b755d429f6fb216,b963db0b97c8487b0cb920a240bd78e3,client_credential,access_tokenappid必填项检查,"",b963db0b97c8487b0cb920a240bd78e3,client_credential,errcodesecret必填项检查,wx9b755d429f6fb216,"",client_credential,errcode

8.config.yml日志监控,异常处理,以及基础路径的设置。

七、测试报告

在这里插入图片描述

1)测试报告概述

  1. 可进行筛选成功或失败的用例
  2. 可查看该用例的详情
  3. 测试套可查看对应测试模块用例集合
  4. 功能模块可查看对应场景化用例集合
    在这里插入图片描述

在这里插入图片描述

2)测试报告详情

可查看具体用例请求参数及返回报文

在这里插入图片描述

八、Jenkins拉取GitLab集成及运行

1)GitLab仓库代码

在这里插入图片描述

2)框架主运行程序改动点(如果没有Jenkins没报Allure不是内部命令可不改)

在这里插入图片描述

3)配置Jenkins环境变量及对应执行脚本

在这里插入图片描述

4)配置Allure测试报告

在这里插入图片描述

5)Jenkins拉取GitLab仓库代码及对应工作空间

在这里插入图片描述

6)运行构建项目

在这里插入图片描述
在这里插入图片描述

7)集成推送企业微信信息

在这里插入图片描述

8)Jenkins集成Allure测试报告展示

在这里插入图片描述

9)生成Allure报告后报告显示字段内容及含义

在这里插入图片描述

相关文章:

  • Windows下快速安装Open3D-0.18.0(python版本)详细教程
  • 新华三通用大模型算力底座方案:为AI时代注入强大动力
  • 深层神经网络
  • 深入了解语音识别:Distil-Whisper
  • 大数据可视化实验(八):大数据可视化综合实训
  • Android应用安装过程
  • Spring Cloud Alibaba - 利用Nacos动态调整线程池参数
  • Postman接口测试工具的原理及应用详解(四)
  • VUE3+ AntV Select 选择器:mode=“multiple“和mode=“tags“的区别是什么
  • ISP IC/FPGA设计-第一部分-SC130GS摄像头分析(0)
  • crossover软件如何使用 crossover软件是干嘛的 crossover软件安装激活教程方法 兼容软件电脑是什么软件
  • 高级队列实现代理穿透及迁移
  • ELK日志实时监控
  • CXL:拯救NVMe SSD缓存不足设计难题-2
  • npm创建一个空的vue3项目的方法或者pnpm创建vue3项目
  • 【译】JS基础算法脚本:字符串结尾
  • 「面试题」如何实现一个圣杯布局?
  • 【mysql】环境安装、服务启动、密码设置
  • Angular 4.x 动态创建组件
  • exports和module.exports
  • github从入门到放弃(1)
  • hadoop集群管理系统搭建规划说明
  • IndexedDB
  • java概述
  • Laravel 实践之路: 数据库迁移与数据填充
  • LeetCode算法系列_0891_子序列宽度之和
  • 成为一名优秀的Developer的书单
  • 第2章 网络文档
  • 翻译:Hystrix - How To Use
  • 规范化安全开发 KOA 手脚架
  • 如何利用MongoDB打造TOP榜小程序
  • 如何学习JavaEE,项目又该如何做?
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • 树莓派用上kodexplorer也能玩成私有网盘
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • ​Spring Boot 分片上传文件
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • (C语言)字符分类函数
  • (二)PySpark3:SparkSQL编程
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (源码版)2024美国大学生数学建模E题财产保险的可持续模型详解思路+具体代码季节性时序预测SARIMA天气预测建模
  • (转)visual stdio 书签功能介绍
  • (转)大型网站架构演变和知识体系
  • ***通过什么方式***网吧
  • .bat批处理出现中文乱码的情况
  • .NET Core 2.1路线图
  • .NET Framework 和 .NET Core 在默认情况下垃圾回收(GC)机制的不同(局部变量部分)
  • @FeignClient 调用另一个服务的test环境,实际上却调用了另一个环境testone的接口,这其中牵扯到k8s容器外容器内的问题,注册到eureka上的是容器外的旧版本...
  • [ CTF ] WriteUp-2022年春秋杯网络安全联赛-冬季赛
  • [ vulhub漏洞复现篇 ] Hadoop-yarn-RPC 未授权访问漏洞复现
  • [ 隧道技术 ] 反弹shell的集中常见方式(二)bash反弹shell
  • [Android]通过PhoneLookup读取所有电话号码