pytest数据驱动DDT

2024-04-25 23:12
文章标签 数据 驱动 pytest ddt

本文主要是介绍pytest数据驱动DDT,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 常见的DDT技术


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

DDT参数化

  • DDT技术和@pytest.mark.parametrize参数化结合
  • DDT技术和conftest.py结合

 DDT上面两种方法不要混用

  • 要么:import+@pytest.mark.parametrize参数化:可以设置一个单独的数据驱动层,存放数据文件和数据驱动。团队成员需要数据时,直接import 然后使用
  • 要么:使用conftest.py+@pytedt.fixture。conftest.py原理是,运行pytest项目之前,默认优先执行同级目录下的conftest.py文件,数据处理完后,加上固件

 一、@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数据驱动 

 安装pandas模块

pip3 install pandas
import pandas as pd
import pytestdef get_data():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对所有文件都生效的话,一般建在根目录下

 

 

 

这篇关于pytest数据驱动DDT的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/936056

相关文章

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

解决pandas无法读取csv文件数据的问题

《解决pandas无法读取csv文件数据的问题》本文讲述作者用Pandas读取CSV文件时因参数设置不当导致数据错位,通过调整delimiter和on_bad_lines参数最终解决问题,并强调正确参... 目录一、前言二、问题复现1. 问题2. 通过 on_bad_lines=‘warn’ 跳过异常数据3

C#监听txt文档获取新数据方式

《C#监听txt文档获取新数据方式》文章介绍通过监听txt文件获取最新数据,并实现开机自启动、禁用窗口关闭按钮、阻止Ctrl+C中断及防止程序退出等功能,代码整合于主函数中,供参考学习... 目录前言一、监听txt文档增加数据二、其他功能1. 设置开机自启动2. 禁止控制台窗口关闭按钮3. 阻止Ctrl +

java如何实现高并发场景下三级缓存的数据一致性

《java如何实现高并发场景下三级缓存的数据一致性》这篇文章主要为大家详细介绍了java如何实现高并发场景下三级缓存的数据一致性,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 下面代码是一个使用Java和Redisson实现的三级缓存服务,主要功能包括:1.缓存结构:本地缓存:使

在MySQL中实现冷热数据分离的方法及使用场景底层原理解析

《在MySQL中实现冷热数据分离的方法及使用场景底层原理解析》MySQL冷热数据分离通过分表/分区策略、数据归档和索引优化,将频繁访问的热数据与冷数据分开存储,提升查询效率并降低存储成本,适用于高并发... 目录实现冷热数据分离1. 分表策略2. 使用分区表3. 数据归档与迁移在mysql中实现冷热数据分

C#解析JSON数据全攻略指南

《C#解析JSON数据全攻略指南》这篇文章主要为大家详细介绍了使用C#解析JSON数据全攻略指南,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、为什么jsON是C#开发必修课?二、四步搞定网络JSON数据1. 获取数据 - HttpClient最佳实践2. 动态解析 - 快速

Linux之platform平台设备驱动详解

《Linux之platform平台设备驱动详解》Linux设备驱动模型中,Platform总线作为虚拟总线统一管理无物理总线依赖的嵌入式设备,通过platform_driver和platform_de... 目录platform驱动注册platform设备注册设备树Platform驱动和设备的关系总结在 l

MyBatis-Plus通用中等、大量数据分批查询和处理方法

《MyBatis-Plus通用中等、大量数据分批查询和处理方法》文章介绍MyBatis-Plus分页查询处理,通过函数式接口与Lambda表达式实现通用逻辑,方法抽象但功能强大,建议扩展分批处理及流式... 目录函数式接口获取分页数据接口数据处理接口通用逻辑工具类使用方法简单查询自定义查询方法总结函数式接口

Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式

《Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式》本文详细介绍如何使用Java通过JDBC连接MySQL数据库,包括下载驱动、配置Eclipse环境、检测数据库连接等关键步骤,... 目录一、下载驱动包二、放jar包三、检测数据库连接JavaJava 如何使用 JDBC 连接 mys

SQL中如何添加数据(常见方法及示例)

《SQL中如何添加数据(常见方法及示例)》SQL全称为StructuredQueryLanguage,是一种用于管理关系数据库的标准编程语言,下面给大家介绍SQL中如何添加数据,感兴趣的朋友一起看看吧... 目录在mysql中,有多种方法可以添加数据。以下是一些常见的方法及其示例。1. 使用INSERT I