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

news2025/1/14 1:03:28

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.com
            base_url: ${get_base_url(base_fenmi_url)}
            request:
                method: get
                url: /fenmi/code
                headers:
                    Authorization: '{{access_token}}'
                params:
                    Accept: application/json, text/plain, */*
                    Accept-Encoding: gzip, deflate, br, zstd
                    Accept-Language: zh-CN,zh;q=0.9
                    Connection: keep-alive
            extract:
                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 allure
            import pytest
            from common.requests_util import Requestutil
            from 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_credential
        appid: XXXXX
        secret: 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_token
    appid必填项检查,"",b963db0b97c8487b0cb920a240bd78e3,client_credential,errcode
    secret必填项检查,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报告后报告显示字段内容及含义

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1886161.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

BMA530 运动传感器

型号简介 BMA530是博世(bosch-sensortec)的一款运动传感器。时尚简约的可穿戴设备为功能强大的组件提供了很小的空间。具有先进功能集的下一代加速度计是世界上最小的加速度传感器(1.2 x 0.8 x 0.55 mm)。它专为紧凑型设备而设计&…

突发!Runway的Gen-3向所有人开放,媲美Sora!

7月2日凌晨,著名生成式AI平台Runway在官网宣布,其文生视频模型Gen-3 Alpha向所有用户开放使用。 上周日Runway只向部分用户提供了Gen-3的使用权限,「AIGC开放社区」也为大家解读了10个非常有代表性的视频案例。(点击查看&#xf…

UE4_材质_使用彩色半透明阴影

学习笔记,不喜勿喷!侵权立删,祝愿大美临沂生活越来越好! 本教程将介绍如何配置虚幻引擎来投射彩色半透明阴影。 此功能在许多应用中都很有用,常见例子就是透过彩色玻璃窗的彩色光。 一、半透明阴影颜色 阴影在穿过半…

2024.7.2作业

1. 梳理笔记(原创&#xff01;&#xff01;&#xff01;) 2.解析代码&#xff1a;分析每一步变量的取值 #include <stdio.h> int main(int argc, char *argv[]) { int a 10; //a10 int b a--; //b10 int c a b 2; //a9 b10 c21 int d (b--…

Python语言接入关键词搜索商品api疑点解析

接入关键词搜索商品API通常需要以下步骤&#xff1a; 了解API文档&#xff1a;首先&#xff0c;你需要阅读API的文档&#xff0c;了解API的基本功能、请求方式&#xff08;GET、POST等&#xff09;、请求参数、返回数据格式等信息。 安装必要的库&#xff1a;根据API的要求&am…

RS232、RS485与RS422初步学习

目录 电平 传输方式 共模和差模干扰 ps&#xff1a;双绞线 485总线结构 ps&#xff1a;终端电阻 RS232接口&#xff08;DB9&#xff09; 优缺点 RS232优缺点 RS485较RS232的优点 为什么RS232还在使用&#xff1f; 电平 RS232、RS485与RS422的电平 区间逻辑备注RS232…

vue3中获取Excel和csv文件中的内容

1.效果 2.安装 npm install xlsxyarn add xlsx 3.引入使用 <el-upload ref"uploadRef" :on-change"changeFile" :show-file-list"false" class"mr10" accept".csv, .xlsx, .xls"action"#" :auto-upload&quo…

240702_昇思学习打卡-Day14-基于MindNLP+MusicGen生成自己的个性化音乐

240702_昇思学习打卡-Day14-基于MindNLPMusicGen生成自己的个性化音乐 前面一致做的都是图像的&#xff0c;可视化比较强&#xff0c;可以有比较多的图片帮助理解&#xff0c;但今天这个是关于音频的生成&#xff0c;基本只有干巴巴的代码&#xff0c;我尽量描述清楚些。相关研…

NX 二次开发-获取CAM切削层数据

int count 0;tag_t* objects;UF_UI_ONT_ask_selected_nodes(&count, &objects); //获取当前加工导航器选中的对象数量和tagif (count < 0){return 0;}UF_CUT_LEVELS_t* cut_levels_ptr_addr NULL; //读工序的切削层UF_CUT_LEVELS_load(objects[0], &…

c++习题06-ljc的储蓄计划

目录 一&#xff0c;问题 二&#xff0c;思路 1&#xff0c;思路1 2&#xff0c;思路2 三&#xff0c;代码 1&#xff0c;思路1代码 2&#xff0c;思路2代码 四&#xff0c;用例输入输出 一&#xff0c;问题 二&#xff0c;思路 1&#xff0c;思路1 定义变量&#x…

【启明智显技术分享】SSD202D核心板方案双网口SBC2D06开发板开箱与实操全攻略上手指南

一、背景 本指南将详细介绍启明智显基于SSD202D核心板方案下的双网口-SBC2D06的开箱及实操上手应用。无论您是电子爱好者、开发者还是工程师&#xff0c;这份指南都能助您快速上手并充分利用这款双网口开发板的各项功能。 二、硬件介绍 SBC2D06双网口开发板&#xff0c;作为…

分布式链路追踪Micrometer Tracing和ZipKin基础入门与实践

【1】概述 在分布式与微服务场景下&#xff0c;我们需要解决如下问题&#xff1a; 在大规模分布式与微服务集群下&#xff0c;如何实时观测系统的整体调用链路情况。 在大规模分布式与微服务集群下&#xff0c;如何快速发现并定位到问题。 在大规模分布式与微服务集群下&…

SpringBoot 中的参数校验:构建健壮应用的基石

前言 在开发Web应用时&#xff0c;处理用户输入是不可避免的一环。然而&#xff0c;用户输入往往充满不确定性&#xff0c;可能是格式不正确、类型不匹配&#xff0c;甚至包含恶意内容。为了确保应用的稳定性和安全性&#xff0c;对输入参数进行有效校验显得尤为重要。Spring …

Vue3 特点以及优势-源码解剖

Vue3 特点以及优势-Vue3.4源码解剖 Vue3 特点以及优势 1.声明式框架 命令式和声明式区别 早在 JQ 的时代编写的代码都是命令式的&#xff0c;命令式框架重要特点就是关注过程声明式框架更加关注结果。命令式的代码封装到了 Vuejs 中&#xff0c;过程靠 vuejs 来实现 声明式代…

微软与OpenAI/谷歌与三星的AI交易受欧盟重点关注

近日&#xff0c;欧盟委员会主管竞争事务的副主席玛格丽特维斯塔格(Margrethe Vestager)在一次演讲中透露&#xff0c;欧盟反垄断监管机构将就微软与OpenAI的合作&#xff0c;以及谷歌与三星达成的AI协议寻求更多第三方意见。这意味着微软与 OpenAI、谷歌与三星的 AI 交易及合作…

数据库操作-DML和DQL

DML DML英文全称是Data Manipulation Language(数据操作语言)&#xff0c;用来对数据库中表的数据记录进行增、删、改操作。 添加数据&#xff08;INSERT&#xff09; 1.指定字段添加数据&#xff1a; insert into 表名 ( 字段名 1, 字段名 2) values ( 值 1, 值 2); 2…

守望先锋2卡顿/丢包?守望先锋2延迟高怎么降低

守望先锋2/ow2新赛季已经上线&#xff0c;想必很多玩家都已经进入游戏体验过&#xff0c;新的主题英雄和Push地图和改版后的斗兽场玻璃墙。不过虽然新赛季内容满满&#xff0c;有趣又好玩&#xff0c;但是架不住服务器拉跨&#xff0c;近期也有不少玩家吐槽新赛季问题频发&…

短信接口平台的核心功能有哪些?如何使用?

短信接口平台怎么有效集成&#xff1f;选择短信接口平台的技巧&#xff1f; 短信接口平台作为一种重要的通信工具&#xff0c;广泛应用于各种企业和组织。通过短信接口平台&#xff0c;企业能够高效、便捷地与客户进行互动和沟通。AoKSend将详细介绍短信接口平台的核心功能。 …

【博主推荐】HTML5实现简洁好看的个人简历网页模板源码

文章目录 1.设计来源1.1 主界面1.2 关于我界面1.3 工作经验界面1.4 学习教育界面1.5 个人技能界面1.6 专业特长界面1.7 朋友评价界面1.8 获奖情况界面1.9 联系我界面 2.效果和源码2.1 动态效果2.2 源代码 源码下载万套模板&#xff0c;程序开发&#xff0c;在线开发&#xff0c…

大模型技术在辅助学习中的应用

大模型技术在辅助学习中的应用场景非常广泛&#xff0c;以下是一些典型示例。大模型技术在辅助学习中具有广阔的应用前景&#xff0c;可以为学生提供更加个性化、智能化和高效的学习体验。随着大模型技术的不断发展&#xff0c;我们可以期待在未来看到更多创新应用。北京木奇移…