当前位置: 首页 > 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每次读取…...

JavaSec-RCE

简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性&#xff0c…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...

在WSL2的Ubuntu镜像中安装Docker

Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码

目录 一、👨‍🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨‍&#x1f…...

GitFlow 工作模式(详解)

今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...

nnUNet V2修改网络——暴力替换网络为UNet++

更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 U-Net存在两个局限,一是网络的最佳深度因应用场景而异,这取决于任务的难度和可用于训练的标注数…...

华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)

题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...

Python网页自动化Selenium中文文档

1. 安装 1.1. 安装 Selenium Python bindings 提供了一个简单的API&#xff0c;让你使用Selenium WebDriver来编写功能/校验测试。 通过Selenium Python的API&#xff0c;你可以非常直观的使用Selenium WebDriver的所有功能。 Selenium Python bindings 使用非常简洁方便的A…...

实战设计模式之模板方法模式

概述 模板方法模式定义了一个操作中的算法骨架&#xff0c;并将某些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的前提下&#xff0c;重新定义算法中的某些步骤。简单来说&#xff0c;就是在一个方法中定义了要执行的步骤顺序或算法框架&#xff0c;但允许子类…...