全网最详细,Pytest自动化测试框架关联/参数化实战,及拿即用...

news2024/9/24 3:26:36

目录:导读

    • 前言
    • 一、Python编程入门到精通
    • 二、接口自动化项目实战
    • 三、Web自动化项目实战
    • 四、App自动化项目实战
    • 五、一线大厂简历
    • 六、测试开发DevOps体系
    • 七、常用自动化测试工具
    • 八、JMeter性能测试
    • 九、总结(尾部小惊喜)


前言

Pytest自动化测试框架:https://www.bilibili.com/video/BV18K411m7FH/

关联
利用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参数之前就传了-----先见之明):

请添加图片描述

下面是我整理的2023年最全的软件测试工程师学习知识架构体系图

一、Python编程入门到精通

请添加图片描述

二、接口自动化项目实战

请添加图片描述

三、Web自动化项目实战

请添加图片描述

四、App自动化项目实战

请添加图片描述

五、一线大厂简历

请添加图片描述

六、测试开发DevOps体系

请添加图片描述

七、常用自动化测试工具

请添加图片描述

八、JMeter性能测试

请添加图片描述

九、总结(尾部小惊喜)

在你的人生旅途中,不要轻易放弃自己的梦想。无论前路如何艰辛,只要持之以恒,迈出每一步,成功就在不远处等待着你。

生命中最大的成就并不在于收获的多少,而在于我们为了心中所爱,为了所坚信的事业,勇往直前地拼搏和奋斗的过程中,所付出的努力和汗水。

不管是什么事情,只有在经历了挫折和失败后,才能更加清楚自己真正想要的是什么,也才能更好地去实现自己的目标。所以,不怕失败,更不怕困难,相信自己,坚定前行!

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

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

相关文章

从C出发 27 --- 深入理解指针与地址

指针是什么? 指针是变量,这种变量有一点特殊,它特殊在保存的值是内存地址,并且我们还可以通过指针所保存的内存地址来直接访问相应内存中的数据。 每一种指针类型的变量只保存对应类型变量的地址 比如这个类型的指针变量,只保…

计及源荷不确定性的综合能源生产单元运行调度与容量配置随机优化模型(matlab代码)

目录 1 主要内容 1.1 风光场景聚类 1.2 主模型程序结果 1.3 随机模型和确定性模型对比 1.4 有无储气对比 1.5 煤价灵敏性分析 1.6 甲烷价格灵敏性分析 2 部分程序 3 程序链接 1 主要内容 本程序复现《计及源荷不确定性的综合能源生产单元运行调度与容量配置两阶段随机…

Cloud Kernel SIG月度动态:发布 Anolis 8.8 镜像、kABI 社区共建流程

Cloud Kernel SIG(Special Interest Group):支撑龙蜥内核版本的研发、发布和服务,提供生产可用的高性价比内核产品。 01 SIG 整体进展 Anolis 8.8 镜像发布,默认搭载 ANCK 5.10-013 版本。 Anolis 23 滚动内核更新至…

4月更新!EasyOps®全平台27项新功能一口气来袭~

又到了每月产品盘点时刻,27大新功能上线和升级优化,设计Hyperlnsight超融合持续观测平台、DevOps持续交付平台、AutoOps自动化运维平台、ITSM服务平台、公共服务,在不断的技术创新过程中,进一步加速IT运维效率升级。 下面和小编一…

Vue监视数据的学习笔记

Vue监测数据变化的更新 <div id"monitor"><h2>人员列表</h2><button click"updateMei">更新马冬梅信息</button><ul><li v-for"(p,index) of persons" :key"index">{{p.name}}--{{p.age}}…

Python数据结构-----递归实现快速排序

目录 前言&#xff1a; 快速排序 1.概念 2.示例 Python代码实现 递归实现快速排序 前言&#xff1a; 今天我们就来一起学习快速排序的思想方法&#xff0c;然后通过Python语言来实现快速排序的功能&#xff0c;下面我们就开始今天的学习吧&#xff01; 快速排序 1.概念 快…

银行数字化转型导师坚鹏:金融科技在银行数字化转型中的创新案例

金融科技在银行数字化转型中的创新与应用案例&#xff08;偏重对公业务&#xff09; 课程背景&#xff1a; 数字化背景下&#xff0c;很多银行存在以下问题&#xff1a; 不清楚5G如何赋能银行数字化转型&#xff1f; 不清楚最新金融科技创新与应用案例&#xff1f; 不了…

【部署YUM仓库】

目录 一、YUM概述1.1、YUM&#xff08; Yellow dog Upadater Modified) 二、准备安装源2.1、YUM软件仓库类型2.2、RPM软件包的来源2.3、第三方yum源的网址查看:2.4、构建CentOS 7 软件仓库2.4.1、配置yum源仓库时要先挂载2.4.2、配置yum源仓库2.4.3、配置完后更新缓存 2.5、ftp…

AutoSAR内存映射

总目录链接>> AutoSAR入门和实战系列总目录 总目录链接>> AutoSAR BSW高阶配置系列总目录 文章目录 为了防止不必要的内存缺口&#xff08;RAM 中未使用的空间&#xff09;&#xff0c;不同大小&#xff08;8、16 和 32 位&#xff09;的变量根据其大小映射到特…

论文笔记:基于并行注意力 UNet的裂缝检测方法

0 简介 论文&#xff1a;基于并行注意力 UNet的裂缝检测方法&#xff08;Parallel Attention Based UNet for Crack Detection&#xff09;&#xff1b; 发表&#xff1a;2021年发表在《计算机研究与发展》上。 1 问题分析 问题&#xff1a;裂缝图像中存在噪声、光线、阴影等…

中睿天下亮相2022电力行业信息化年会

4月14日-15日&#xff0c;以“低碳数字新动力&#xff0c;电力转型新发展”为主题的2022电力行业信息化年会在长沙成功召开。中睿天下作为网络安全企业受邀出席参展&#xff0c;展示多样性网络安全产品、电力行业解决方案及相关应用成果。 作为能源电力领域的行业盛会和学术交流…

垃圾回收器(一)

垃圾回收器概述 垃圾收集器没有在规范中进行过多的规定&#xff0c;可以由不同的厂商、不同版本的JVM来实现。 由于JDK的版本处于高速迭代过程中&#xff0c;因此Java发展至今已经衍生了众多的GC版本。 从不同角度分析垃圾收集器&#xff0c;可以将GC分为不同的类型。 GC分…

设计模式简谈

设计模式是我们软件架构开发中不可缺失的一部分&#xff0c;通过学习设计模式&#xff0c;我们可以更好理解的代码的结构和层次。 设计原则 设计原则是早于设计方法出现的&#xff0c;所以的设计原则都要依赖于设计方法。这里主要有八个设计原则。 推荐一个零声学院免费教程&…

阳光万里,祝你上岸——免统考在职研究生

什么是在职研究生 在职研究生&#xff0c;是国家计划内&#xff0c;以在职人员身份&#xff0c;部分时间在职工作&#xff0c;部分时间在校学习的研究生教育的一种类型。在职攻读硕士方式有三种&#xff1a; 1.双证非全日制研究生&#xff1a;为普通高等教育研究生学历&#x…

QGIS--开发OpenSCENARIO动态场景(三)--制作动态场景

一、添加scenario&#xff0c;carla的环境变量 export CARLA_ROOT/path/to/your/carla/installation export SCENARIO_RUNNER_ROOT/path/to/your/scenario/runner/installation export PYTHONPATH$PYTHONPATH:${CARLA_ROOT}/PythonAPI/carla/dist/carla-<VERSION>.egg ex…

如何利用工时表来帮助项目管理做得更完善?

项目管理是一项复杂的任务&#xff0c;需要协调各种资源以确保项目按时交付。其中一个关键方面是管理各个员工工时。工时表软件是一种可以帮助企业记录各个员工工作时效的工具&#xff0c;而且还可以帮助项目管理者记录和跟踪项目成员的时间。那么如何利用工时表来帮助项目管理…

如何配置静态路由?这个实例详解交换机的静态路由配置

一、什么是静态路由 静态路由是一种路由的方式&#xff0c;它需要通过手动配置。静态路由与动态路由不同&#xff0c;静态路由是固定的&#xff0c;不会改变。一般来说&#xff0c;静态路由是由网络管理员逐项加入路由表&#xff0c;简单来说&#xff0c;就是需要手动添加的。…

相空间相关概念以及轨迹生成

在时间序列分析中&#xff0c;相位轨迹也被广泛应用于提取隐藏在数据中的结构信息。例如&#xff0c;在人类活动识别任务中&#xff0c;通过构建不同活动对应的相位轨迹&#xff0c;可以揭示活动间的相似性和差异性&#xff0c;从而有助于设计有效的分类方法。 相空间&#xff…

Java每日一练(20230420)

目录 1. 罗马数字转整数 &#x1f31f; 2. 电话号码的字母组合 &#x1f31f;&#x1f31f; 3. 排列序列 &#x1f31f;&#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每…

java基础——Map

Map 第一章 Map集合 1.1 概述 Java提供了专门的集合类用来存放键值对关系的对象&#xff0c;即java.util.Map接口。 我们通过查看Map接口描述&#xff0c;发现Map接口下的集合与Collection接口下的集合&#xff0c;它们存储数据的形式不同&#xff0c;如下图。 Collection中…