pytest参数化数据驱动(数据库/execl/yaml)

 常见的数据驱动


    数据结构:
        列表、字典、json串
    文件:
        txt、csv、excel      
    数据库:
        数据库链接
        数据库提取
    参数化:
        @pytest.mark.parametrize()
        @pytest.fixture()

参数化

  • 数据驱动和@pytest.mark.parametrize参数化结合

1.数据库驱动(已安装MySQL)

安装mysqlclient模块

brew install mysql pkg-config //windows不用该步骤
pip3 install mysqlclient

import MySQLdb  # 必须要安装mysqlclient模块
import pytest# 数据库链接
conn = MySQLdb.connect(user='root',passwd='m****',host='localhost',port=3306,db='basejnu'  # 数据库database
)def get_data():query_sql = "select customer_id,account_num,customer_region_id from customer LIMIT 20"  # 获取数据lst = []cursor = conn.cursor()  # 创建游标try:cursor.execute(query_sql)r = cursor.fetchall()  # 获取customer_id,account_num数据print(r)for x in r:u = (x[0], x[1])  # 第一列和第二列lst.append(u)return lstfinally:cursor.close()conn.close()@pytest.mark.parametrize('customer_id,account_num', get_data())
def test01(customer_id, account_num):print(customer_id, account_num)if __name__ == '__main__':pytest.main(["-sv", "get_mysql.py"])

运行效果:

 2. execl/csv数据驱动 

 安装pandas模块

pip3 install pandas
import pandas as pd
import pytestdef get_data():
# execl文件将 read_csv改为 read_execl即可df = pd.read_csv('/Users/mac/Documents/study23/data_study/data/customer1997.csv', index_col=None)data = pd.DataFrame(df)  # 转化为列表data00 = data[['customer_id', 'Frequency']]  # 获取所需部分# data01 = data00.head()  # 获取全部数据data01 = data00.head(5)  #获取前5行数据print(data01)data02 = data01.valuesprint(data02)return data02class Test_csv():@pytest.mark.parametrize('id,fre', get_data())def test_002(self, id, fre):print(id)print(fre)print("*"*10)if __name__ == '__main__':pytest.main(["-sv", "get_execl.py"])

 运行效果:

3. yaml数据驱动

data_y.yaml

yaml_util.py

import yamlclass YamlUtil:def __init__(self, yaml_file):"""通过init方法把Yaml文件传入到这个类:param yaml_file:"""self.yaml_file = yaml_file# 读取Yaml文件def read_yaml(self):"""读取Yaml,对yaml反序列化,就是把我们的yaml格式转换成dict格式:return:"""with open(self.yaml_file, encoding='utf-8')as f:value = yaml.load(f, Loader=yaml.FullLoader)return value

测试用例get_yaml.py

import pytest
import os
from common.yaml_util import YamlUtil# 文件地址
realpath = os.path.abspath(os.path.join(os.path.dirname(os.path.split(os.path.realpath(__file__))[0]), '.'))
# 项目地址
project_dir = os.path.dirname(realpath)@pytest.mark.parametrize('args', YamlUtil(project_dir + '/data_study/data/data_y.yaml').read_yaml())
def test_01_huahua(args):name = args['name']password = args['password']print(name)print(password)if __name__ == '__main__':pytest.main(['-vs', "get_yaml.py"])

运行结果:

其他:DDT技术和conftest.py结合

pytest有更方便的管理数据驱动方法的办法:conftest.py

conftest.py特点:

1.conftest.py名字固定的,不可以修改

2.conftest.py文件所在目录必须存在__init__py文件

3.conftest.py文件不能被其他文件导入

4.所有同目录测试文件运行前都会执行conftest.py文件

conftest.py一般和@pytest.fixture()固件放在一起使用

conftest原理是,运行pytest项目之前,默认优先执行当前层的conftest.py文件,数据处理完后,加上固件赋予直接传参的能力.注意;如果想conftest.py对所有文件都生效的话,一般建在根目录下

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【JAVA】阿里技术官耗时三个月整理的Java核心知识点

在裁员风波的席卷之下,IT行业弥漫着浓厚的焦虑和不安。面对如此动荡的环境,一个共识日益凸显:提升个人价值至关重要。 这不仅仅是指薪资上的数字增长,更重要的是在职场中、在专业领域、在技术上不断取得突破,并塑造自…

力扣HOT100 - 200. 岛屿数量

解题思路: 岛屿题目一般使用dfs。 1.判断是否越界 2.用0,1,2三个状态标识当前格子的状态(三个状态比两个状态更清晰) 3.向周围四个方向遍历 class Solution {public int numIslands(char[][] grid) {int cnt 0;fo…

如何在PostgreSQL中创建并使用窗口函数来进行复杂的分析查询?

文章目录 解决方案1. 了解窗口函数的基本概念2. 常用的窗口函数3. 使用示例示例 1:计算每行销售数据的累计销售额示例 2:计算每行销售数据相对于前一行销售额的增长率 结论 PostgreSQL 提供了一套强大的窗口函数(Window Functions&#xff09…

用Python绘制了几张有趣的可视化图表

流程图存在于我们生活的方方面面,对于我们追踪项目的进展,做出各种事情的决策都有着巨大的帮助,而对于的Python而言呢,绘制流程图也是十分轻松的,今天小编就来为大家介绍两个用于绘制流程图的模块,我们先来…

FebHost:注册国外域名优先考虑可用性还是成本?

在选择域名后缀时,应该优先考虑可用性还是成本?这主要取决于您的具体情况。这两个因素都很重要,您应根据自己的需求进行权衡。 可用性方面:热门的域名后缀,如.com和.net,通常需求量较大,因此可…

1.C++入门(上)

目录 1.C关键字 2.命名空间 作用域方面的优化 a.命名空间定义 b.命名空间使用 3.C 输入&输出 1.C关键字 C有63个关键字,C语言有32个关键字,存在重叠如荧光笔标出 2.命名空间 作用域方面的优化 如果变量,函数和类的名称都存在于全…

(超全)python图像处理详细解析(1)

图像处理 skimage包的子模块1.读取图像2.图像灰度处理3.加载程序自带图像4.查看存储路径5.保存图片6.图片信息7.输出小猫图片的G通道中的第20行30行列的像素值8.显示红色单通道图片9.对小猫图片添加椒盐噪声10.高斯去噪11.中值滤波去噪12.随机生成噪声点13.对小猫图像进行裁剪1…

平抑风电波动的电-氢混合储能容量优化配置

这篇论文中的EMD分解法在非线性扰动信号分解上优于小波分解法,EMD分解出来的imf各频次信号,继而利用C2F实现信号重构,根据最大波动量限值剔除出需要储能平抑的波动量,继而用超级电容实现平抑(论文中用的碱水电解槽+燃料电池我认为有很多个点可以佐证不合适,但是电制氢是热…

数据库工程师的工作职责(合集)

数据库工程师的工作职责1 职责: 1. 日常数据库的基本安装,维护,升级,监控的; 2. 配合研发部门进行数据库设计支持,协助开发、设计和进行SQL语言优化; 3. 配合相关部门数据库相关的任务,比如数据导入导出&am…

Unity 实现原神中的元素反应

一、元素反应 原神中共有七种元素,分别是水、火、冰、岩、风、雷、草。这七种元素能互相作用 Demo下载:Download 元素反应表格图示,可能不够精准 /火水雷冰草岩风绽放原激化火/蒸发超载融化燃烧结晶扩散烈绽放/水蒸发/感电冻结/碎冰绽放结晶…

tomcat服务器日志记录文件说明和问题初筛

目录 1.认识tomcat服务器日志文件2.SpringBoot项目开启记录日志文件3.根据实验4.Spring Boot和MyBatis框架的日志输出5.部署在tomcat服务器上,控制台输出内容在哪6.程序运行报错输出7.记录访问Tomcat服务器的所有HTTP请求信息8.记录tomcat内部程序错误,如…

深度学习-自动求导

目录 向量链式法则标量链式法则 拓展到向量例题1例题2 符号求导数值求导自动求导计算图自动求导的两种模式链式法则正向累积(从x出发)反向累积(反向传递--先计算最终的函数即y)反向累积总结 自动求导计算y关于x的梯度,…