当前位置: 首页 > 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报告后报告显示字段内容及含义

在这里插入图片描述

相关文章:

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

PythonPytestAllureYaml接口自动化测试框架详解 编撰人:CesareCheung 更新时间:2024.06.20 一、技术栈 PythonPytestAllureYamlJenkinsGitLab 版本要求:Python3.7.0,Pytest7.4.4,Allure2.18.1,PyYaml6.0 二、环境配置 安装python3.7&…...

stm32-hal库(5)--usart串口通信三种模式(主从通信)(关于通信失败和串口不断发送数据问题的解决)

问题: 最近发现,stm32cubemx最新版本f1系列的hal库(1.85版本)生成的hal库,其中stm32f1xx_hal_uart.c的库文件中,其串口发送接收存在一些问题: 1.没有使用 __HAL_LOCK 和 __HAL_UNLOCK 宏&…...

一文学会LVS:概念、架构、原理、搭建过程、常用命令及实战案例

引言 随着互联网技术的飞速发展,服务器负载均衡技术变得越来越重要。LVS(Linux Virtual Server)作为一种高效的负载均衡解决方案,广泛应用于各大企业的生产环境中。本文将深入探讨LVS的概念、架构、工作原理,详细讲解其…...

[Go 微服务] Kratos 使用的简单总结

文章目录 1.Kratos 简介2.传输协议3.日志4.错误处理5.配置管理6.wire 1.Kratos 简介 Kratos并不绑定于特定的基础设施,不限定于某种注册中心,或数据库ORM等,所以您可以十分轻松地将任意库集成进项目里,与Kratos共同运作。 API -&…...

【unity实战】使用旧输入系统Input Manager 写一个 2D 平台游戏玩家控制器——包括移动、跳跃、滑墙、蹬墙跳

最终效果 文章目录 最终效果素材下载人物环境 简单绘制环境角色移动跳跃视差和摄像机跟随效果奔跑动画切换跳跃动画,跳跃次数限制角色添加2d物理材质,防止角色粘在墙上如果角色移动时背景出现黑线条方法一方法二 墙壁滑行实现角色滑墙不可以通过移动离开…...

【实战】EasyExcel实现百万级数据导入导出

文章目录 前言技术积累实战演示实现思路模拟代码测试结果 前言 最近接到一个百万级excel数据导入导出的需求,大概就是我们在进行公众号API群发的时候,需要支持500w以上的openid进行群发,并且可以提供发送openid数据的导出功能。可能有的同学…...

Graalvm配置文件与Feature和Substitute机制介绍

GraalVM介绍 GraalVM提前将Java应用程序编译成独立与机器码二进制文件(可执行文件、动态库文件),如windows系统中的exe文件和dll文件。与在Java虚拟机(JVM)上运行的应用程序相比,这些二进制文件更小,启动速…...

Appium adb 获取appActivity

方法一(最简单有效的方法) 通过cmd命令,前提是先打开手机中你要获取包名的APP adb devices -l 获取连接设备详细信息 adb shell dumpsys activity | grep mFocusedActivity 有时获取到的不是真实的Activity 方法二 adb shell monkey -p …...

调整分区失败致盘无法访问:深度解析与数据恢复全攻略

调整分区失败盘打不开的困境 在计算机的日常维护与管理中,调整磁盘分区是常见的操作之一,旨在优化存储空间布局、提升系统性能或满足特定应用需求。然而,当这一操作未能如预期般顺利进行,反而导致分区调整失败,进而使…...

试用笔记之-汇通计算机等级考试软件一级Windows

首先下载汇通计算机等级考试软件一级Windows http://www.htsoft.com.cn/download/htwork.rar...

Java的NIO体系

目录 NIO1、操作系统级别下的IO模型有哪些?2、Java语言下的IO模型有哪些?3、Java的NIO应用场景?相比于IO的优势在哪?4、Java的IO、NIO、AIO 操作文件读写5、NIO的核心类 :Buffer(缓冲区)、Channel&#xff…...

自下而上的选股与自上而下的选股

一起学习了《战胜华尔街》,不知道大家有没有这么一种感受:林奇的选股方法是典型的自下而上的选股方法。虽然这一点没有单独拎出来讨论过,但在《从低迷中寻找卓越》《如何通过财务指标筛选股票?》《边逛街边选股?》《好…...

Tech Talk:智能电视eMMC存储的五问五答

智能电视作为搭载操作系统的综合影音载体,以稳步扩大的市场规模走入越来越多的家庭,成为人们生活娱乐的重要组成部分。存储部件是智能电视不可或缺的组成部分,用于保存操作系统、应用程序、多媒体文件和用户数据等信息。智能电视使用eMMC作为…...

scikit-learn教程

scikit-learn(通常简称为sklearn)是Python中最受欢迎的机器学习库之一,它提供了各种监督和非监督学习算法的实现。下面是一个基本的教程,涵盖如何使用sklearn进行数据预处理、模型训练和评估。 1. 安装和导入包 首先确保安装了…...

CentOS 7 搭建rsyslog日志服务器

CentOS 7 搭建rsyslog日志服务器 前言一、IP地址及主机名称规划1.修改主机名 二、配置rsyslog日志服务器1.安装rsyslog服务2.编辑/etc/rsyslog.conf 文件3.启动并启用rsyslog服务4.验证端口是否侦听 三、在rsyslog日志服务器上配置firewalld防火墙四、配置rsyslog日志客户端1.编…...

使用Spring Boot Actuator监控应用健康状态

使用Spring Boot Actuator监控应用健康状态 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将探讨如何利用Spring Boot Actuator来监控和管理应用程序的…...

leetcode刷题:vector刷题

​ ​ 🔥个人主页:guoguoqiang. 🔥专栏:leetcode刷题 1.只出现一次的数字 这道题很简单,我们只需要遍历一次数组即可通过异或运算实现。(一个数与自身异或结果为0,任何数与0异或还是它本身) class Solut…...

CGI面试题及参考答案

什么是CGI?它在Web服务器与应用程序之间扮演什么角色? CGI(Common Gateway Interface) 是一种标准协议,它定义了Web服务器与运行在服务器上的外部程序(通常是脚本或应用程序)之间的通信方式。简单来说,CGI充当了一个桥梁,使得Web服务器能够将用户的请求传递给后端程序…...

论文调研_物联网漏洞检测综述

A Review of IoT Firmware Vulnerabilities and Auditing Techniques 研究背景:物联网设备在工业、消费类等各个领域得到了广泛应用,实现了更高的自动化和生产率。然而,这些连网设备的高度依赖也带来了一系列网络安全威胁,特别是…...

Java学习【IO流:深入理解与应用(上)】

Java学习【IO流:深入理解与应用(上)】 🍃1.IO流体系结构🍃2.FileOutputStream🍁2.1FileOutputStream写数据的三种方式🍁2.2换行和续写 🍃3.FileInputStream🍁3.1每次读取…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

C++:std::is_convertible

C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略

本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装&#xff1b;只需暴露 19530&#xff08;gRPC&#xff09;与 9091&#xff08;HTTP/WebUI&#xff09;两个端口&#xff0c;即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

Java面试专项一-准备篇

一、企业简历筛选规则 一般企业的简历筛选流程&#xff1a;首先由HR先筛选一部分简历后&#xff0c;在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如&#xff1a;Boss直聘&#xff08;招聘方平台&#xff09; 直接按照条件进行筛选 例如&#xff1a…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在 GPU 上对图像执行 均值漂移滤波&#xff08;Mean Shift Filtering&#xff09;&#xff0c;用于图像分割或平滑处理。 该函数将输入图像中的…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;社区养老保险系统小程序被用户普遍使用&#xff0c;为方…...

Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问&#xff08;基础概念问题&#xff09; 1. 请解释Spring框架的核心容器是什么&#xff1f;它在Spring中起到什么作用&#xff1f; Spring框架的核心容器是IoC容器&#…...

uniapp 字符包含的相关方法

在uniapp中&#xff0c;如果你想检查一个字符串是否包含另一个子字符串&#xff0c;你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的&#xff0c;但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...

手机平板能效生态设计指令EU 2023/1670标准解读

手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读&#xff0c;综合法规核心要求、最新修正及企业合规要点&#xff1a; 一、法规背景与目标 生效与强制时间 发布于2023年8月31日&#xff08;OJ公报&…...