Pytest自动化测试框架关联/参数化实战

news2024/11/14 0:38:18

关联
利用Python提供的fixture可以实现关联

实现步骤:
在case目录下,新建conftest.py文件,比如我们需要token,就在这个文件下定义一个公共的方法,调用登录接口并返回需要的token值(注:公共的方法一般不传入参数,返回值其实也是看情况可要可不要的)

请添加图片描述

@pytest.fixture(scope='function')   #使用pytest的fixture把下面的方法变成公共方法

在需要使用的测试案例中,传入方法名,在需要用到关联的参数时,直接使用

请添加图片描述

面试题:接口与接口之间的关联是怎么处理的?

答:框架使用的是Python的fixture,定义一个公共的方法,通过去引用这个人方法名字的方式,来自动调用这个公共的方法,并且获得需要的返回值,例如token,以此来解决关联的问题

pytest中数据和脚本分离(即实现参数化过程)

什么时候需要参数化
实际项目中,接口地址,请求头,请求参数等,这些都称为数据,一般来说,需要将数据单独存放,例如放在数据文件里

参数化一般用于相同接口不同参数的使用,比如登录接口,有登录成功和登录失败

pytest参数化

pytest的参数化主要有两种方式,第一种是使用pytest的parametrize实现参数化;第二种是使用数据文件

使用parametrize实现参数化
pytest参数化----parametrize理解:第一个参数是字符串,表示要给test_data()方法哪一个参数,即他俩是一样的,第二个参数给一个可序列的数据类型(即元组和数组),最后test_data()方法分别取序列的值执行

请添加图片描述

运行结果如下:

请添加图片描述

由此可以发现,现在的测试用例变成了四条,即可序列化元组(1,2,3,4)的长度,并且这时候的datas就是元组中的每个数据

使用parametrize编写第一个接口:

请添加图片描述

以此类推,可以编写多个接口

使用parametrize编写6个接口

请添加图片描述

优化
优化,还可以在每个测试案例前,加上接口名称,如下:

请添加图片描述

使用数据文件实现参数化

数据文件准备
可以用txt、excle、yaml等文件,存放数据,初学者推荐excle,比较直观

以下以excle文件为例:一般会有id、title、url、headers、method、data、http_code、msg几栏,注意sheet页

在data文件夹里存放数据文件
选中data文件夹,右键----在文件资源管理器中显示,将刚才的excle文件粘贴到data目录下

data文件夹下,就有个测试数据文件

取数据

这就会涉及到Python中读取excle的知识,需要用到Python中的第三方包xlrd

①安装xlrd包:pip3 install xlrd==1.2.0(指定版本)

请添加图片描述

②在utils中导入含文件读写方法的py文件

请添加图片描述

Python读取excle代码:

 

import xlrd

def read_excel(excel_path, sheet_name, skip_first=True):

results = []

datas = xlrd.open_workbook(excel_path) # 打开excel获取excel的操作对象

table = datas.sheet_by_name(sheet_name) # 根据sheetname打开具体的页面

# start_row = 1 if skip_first is True else 0

if skip_first is True: # skip_first为true:从第二行取

start_row = 1

else:

start_row = 0


# 循环读取excel

for row in range(start_row, table.nrows): # [1,2,3,4,5,6]

results.append(table.row_values(row))

return results


# [

# [行1],

# [行2],

# [行3]...

# ]

# 防止其他文件导入exceltools时执行这些代码,测试代码

if __name__ == "__main__":

a = read_excel(r'D:\小可爱\code\RCtest\data\人才管理系统.xlsx', "首页")

print(len(a), type(a))

for i in a :

print(i)

在编写测试用例的py文件中里导入exceltools

请添加图片描述

代码如下:


import os,sys

sys.path.append(os.getcwd())

from utils.exceltools import read_excel

编写测试用例

首先,要特别注意读取excle返回的结果如下,是字符串类型的数据,需要eval一下,尤其注意token的值:‘{“token”:“user_login”}’,可以发现,如果在excle数据文件中,如果直接写成{“token”:user_login},那Python读取出来后,就会变成’{“token”:user_login}',直接eval以下就能变成需要的字典格式

请添加图片描述

修改数据文件:

请添加图片描述

再次打印Python读取的excle文件,返回如下:

请添加图片描述

编写测试用例:

请添加图片描述

至此,实现了参数化的测试案例编写。

优化

观察可以发现,目前我们写的所有的测试案例,都是post方法的,一旦在excle表格中填写了其他类型的方法,那测试案例就会报错,因此,二次封装request方法很有必要(放在utils中)。

①封装代码如下:


import requests



def http_request(url="", method="post", headers={}, json={}):

if method == "post":

return requests.post(url=url, headers=headers, json=json)

elif method == "get":

return requests.get(url=url, headers=headers, json=json)

else:

return False

②在测试案例中导入封装的方法:


import os,sys

sys.path.append(os.getcwd())

from utils.httprequest import http_request

③修改原测试案例(method参数之前就传了-----先见之明):

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

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

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

相关文章

【乐企】有关乐企能力测试接口对接-货物运输服务(详细)

1、前置条件,参考【乐企】有关乐企能力测试接口对接-基础版(详细) 2、接口文档 和基础版区别: 1、传参的时候添加了 用例编码:ylbm 2、发票上传接口的服务编码变化了:fwbm:HWYSFPSC 3、能力编码和用例编码…

Linux——安装软件(mysql)

一、应用部署: 安装软件 运行某个程序或者服务 安装软件包 dnf/yum 包安装工具官方网站提供的集成软件包源码编译安装 // 源码编译的步骤 只应用于编译型语言 对于解释性语言编写的程序 采用不用的方式打包 编译型语言编写的程序: nginx解释性语言…

Verilog刷题笔记63

找BUG 1、:Bug mux2 挑错: module top_module (input sel,input [7:0] a,input [7:0] b,output [7:0]out );assign out sel?a:b;endmodule结果正确: 原因: 1、输出out也应为8位 2、逻辑错误,&按位操作,需要将…

【可兼容的】protobuf、streamlit、transformers、icetk、cpm_kernels版本号

搞大模型训练的工作不可避免地需要很多库,但是非常讨厌的事情是这些库动不动就不兼容。最近在做文本分类训练的时候又遇到了这个问题,为了避免后面再安装包的时候把我之前的环境破坏了,所以特地来记录一下:protobuf、streamlit、t…

GD32F4xx---RTC初始化设置及闹钟方式实现秒中断讲解

GD32F4xx—RTC初始化设置及闹钟方式实现秒中断讲解 1、下载链接:源码工程 一、概述 GD32F4x的RTC例程网上资源较少,详细阅读用户手册后做出如下配置。RTC模块提供了一个包含日期(年/月/日)和时间(时/分/秒/亚秒)的日历功能。除亚秒用二进制码显示外,时间和日期都以BC…

欧科云链: Web3浪潮下合规是“必选项”, 技术创新成发展重点

如果说2023年将是Web3的监管与合规之年。那么2024年就是Web3发展里程碑之年。 自2023年,包括美国、日本、新加坡、迪拜、中国香港等全球多个国家和地区金融中心都先后宣布要成为Web3中心、虚拟资产中心,并努力在监管框架下推动Web3生态的技术创新。 放…

对新手的现货白银交易建议

近期现货白银价格表现十分不错,连续的上涨已经突破了30关口,这是一个重要的心理关口,受投资行情的吸引,很多新手现货白银交易者入场。那么,有没有一些对这些新手投资者的现货白银交易建议呢?下面我们就来讨…

通过Docker部署Nacos,以及Docker Desktop进行管理

目录 一.不需要持久化存储 1.启动容器 2.查看容器和镜像​ 3.容器管理 二.持久化存储启动mysql容器 1.创建docker卷 2.运行容器,指定卷 3.在nacos里面随便建个配置文件 4.停止并删除nacos容器 5.重新运行容器,并且挂载相同的卷,也就是上面第二步的命令 6.打开nacos并…

redis的紧凑列表ziplist、quicklist、listpack

文章目录 前言一、ziplist1.1 ziplist 查找复杂度高1.2 ziplist 连续更新风险 二、quicklist三、listpack 前言 当数据量较小时,Redis 会优先考虑用 ziplist 来存储 hash、list、zset,这么做可以有效的节省内存空间,因为 ziplist 是一块连续…

2024年用哪个思维导图软件好?这款在线工具堪称国产之光!

思维导图软件哪个好? 如今已经是2024年了,想做思维导图,面对琳琅满目的思维导图软件,哪一个才是最适合我们的呢? 在选用思维导图软件时,我们可能会综合考虑多个方面,譬如功能数量、操作易用性…

未来工作场所:知识中台与AI的融合

在快速迭代的未来工作场所,知识中台与AI的融合正引领着一场深刻的工作方式变革。这种融合不仅优化了企业的知识管理流程,还通过智能工具如AI问答、内容生成等,极大地提升了工作效率和决策质量。接下来,我们将以HelpLook AI知识库为…

【C/C++】C++类与对象基本概念(抽象与封装、构造函数、析构函数、静态、友元)

文章目录 七、类与对象基本概念抽象定义与声明访问控制类的实现与使用对象指针、this指针与对象引用构造函数析构函数拷贝构造函数 七、类与对象基本概念 抽象 抽象是相对,而非绝对的 在研究问题时,侧重点不同,可能会产生不同的抽象结果;解决…

解密低代码:持续更新的必要性与背后驱动力

在数字化转型的浪潮中,低代码(Low-Code)开发平台已经成为企业快速构建应用程序的重要工具。低代码平台通过图形化界面和少量手写代码,帮助开发者和业务人员在短时间内构建复杂应用。然而,随着技术的不断演进和业务需求…

【C#】Visual Studio代码格式化方法

1. 快捷键 选中内容后,先键入 ctrlk 再键入 ctrlf(注意:Visual Studio中标注两个快捷键的都是这样使用) 2. 工具栏 编辑 - 高级 - 设置选定内容的格式

mp3格式转换器免费版来袭,告别格式限制,音乐更自由!

当下,mp3格式可以说是音频文件的主流格式。无论是通过耳机、音箱还是车载音响,我们都在使用mp3格式来播放收听音乐。智能手机、平板电脑等移动设备上通常内置mp3播放器。mp3经常在视频剪辑中充当背景音乐和特效音效。 为什么mp3格式如此普遍&#xff1f…

PHP高效易用在线简单商城系统小程序源码

🚀高效易用的在线简单商城系统,让电商创业轻松启航🛍️ 🌈 一键开店,轻松上手 还在为繁琐的电商开店流程头疼吗?高效易用的在线简单商城系统,让你告别复杂设置,一键开启你的电商之旅…

leetcode日记(73)分隔链表

简单,但是链表问题容易犯错 第一次错误:每次遍历到小于x的节点移动到前面后都需要将a向后移动到移动后的该节点处,使得后面移动的节点都能移动到该节点后 第二次错误:看错了题目,需要从头开始遍历 第三次错误&#…

死抠细节!在ChatGPT的帮助下让论文精益求精!

学境思源,一键生成论文初稿: AcademicIdeas - 学境思源AI论文写作 在撰写毕业论文的过程中,细节往往决定成败。无论是结构的合理性、论点的清晰度,还是语言的精准表达,每一个细节都影响着论文的最终质量。今天分享的内…

解决世界500强跨域跨境数据文件传输丢包严重、高延迟等问题

在当今全球化的商业环境中,大型跨国公司如世界500强企业,面临着跨地域数据传输的挑战。这些挑战包括数据包丢失、网络延迟、成本上升以及数据安全风险。传统的数据传输方法已难以满足这些企业对效率和安全性的需求。那么,如何为这些企业找到一…

虚拟机安装+xftp+xshell

1、VMware安装 下载VM,可以直接去官网下载,也可以直接提取我的网盘链接 通过百度网盘分享的文件:vmware 链接:百度网盘 请输入提取码 提取码:ms01 --来自百度网盘超级会员V2的分享 没有百度网盘会员的这里也有123…