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

news2024/11/27 6:28:37

 常见的数据驱动


    数据结构:
        列表、字典、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 lst
    finally:
        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 pytest


def 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.values
    print(data02)
    return data02


class 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 yaml


class 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.coloradmin.cn/o/1625656.html

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

相关文章

Stable Diffusion WebUI 使用 VAE 增加滤镜效果

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里,订阅后可阅读专栏内所有文章。 大家好,我是水滴~~ 本文主要介绍 VAE 模型,主要内容有:VAE 模型的概念、如果下载 VAE 模型、如何安装 VAE 模型、如…

苍穹外卖学习

并不包含全部视频内容&#xff0c;大部分都按照操作文档来手搓代码&#xff0c;资料&#xff0c;代码都上传git。 〇、实际代码 0.1 Result封装 package com.sky.result;import lombok.Data;import java.io.Serializable;/*** 后端统一返回结果* param <T>*/ Data pub…

【EP2C35F672C8 EDA试验箱下载 38译码器实现】

文章目录 前言一、实验设备1.实验箱2.下载器&#xff1a; 二、编译工程1.编译工程2.添加tcl引脚配置文件2.1将tcl文件拷贝到工程目录下&#xff1a;2.2 在软件中添加tcl文件 3.tcl文件简答讲解 三、下载四、实验结果总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内…

【LeetCode:2095. 删除链表的中间节点 + 链表】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

虚拟现实(VR)的应用场景

虚拟现实&#xff08;VR&#xff09;技术创建和体验三维虚拟世界的计算机仿真技术。用户通过佩戴VR头显等设备&#xff0c;可以完全沉浸在虚拟世界中&#xff0c;并与虚拟世界中的物体进行交互。VR技术具有广泛的应用前景&#xff0c;可以应用于各行各业。以下是一些VR的应用场…

C++ 并发编程 - 入门

目录 写在前面 并发编程&#xff0c;启动&#xff01; 写在前面 计算机的并发指在单个系统里同时执行多个独立的任务。 在过去计算机内只有一个处理器时并发是通过快速的切换进程上下文所实现的&#xff0c;而现在计算机已经步入了多核并发时代&#xff0c;所以多个进程的并…

利用STM32 HAL库实现USART串口通信,并通过printf重定向输出“Hello World“

一、开发环境 硬件&#xff1a;正点原子探索者 V3 STM32F407 开发板 单片机&#xff1a;STM32F407ZGT6 Keil版本&#xff1a;5.32 STM32CubeMX版本&#xff1a;6.9.2 STM32Cube MCU Packges版本&#xff1a;STM32F4 V1.27.1 上一篇使用STM32F407的HAL库只需1行代码实现US…

EDM营销工具效果如何评估?如何优化性能?

EDM营销工具的功能优势有哪些&#xff1f;怎么使用邮件营销工具&#xff1f; 对于许多营销人员来说&#xff0c;如何评估EDM营销工具的效果&#xff0c;却是一个颇具挑战性的问题。AokSend将围绕这一问题展开讨论&#xff0c;帮助读者更好地理解EDM营销工具效果的评估方法和技…

AI大模型蜂拥而至,PC准备好了吗?

通信世界网消息&#xff08;CWW&#xff09;在这个大模型风起云涌的年代&#xff0c;各行各业都在积极拥抱这波风口&#xff0c;试图让这个世界充满AI。根据最新公开的数据&#xff0c;截至2024年3月&#xff0c;中国共有117个大模型成功完成备案。这些大模型涵盖了各个领域&am…

Windows系统下将MySQL数据库表内的数据全量导入Elasticsearch

目录 下载安装Logstash 配置Logstash配置文件 运行配置文件 查看导入结果 使用Logstash将sql数据导入Elasticsearch 下载安装Logstash 官网地址 选择Windows系统&#xff0c;需下载与安装的Elasticsearch相同版本的&#xff0c;下载完成后解压安装包。 配置Logstash配…

黑马-设计模式-笔记(未完)

一、基础 UML类图 可见性&#xff1a; public- private#protected 表示方式&#xff1a;属性&#xff1a;可见性 名称:类型[默认值]方法&#xff1a;可见性 名称(参数)[:返回类型] 关系&#xff1a;关联关系&#xff1a;实线&#xff0c;引用关系&#xff0c;类属性里有另一个…

STM32存储左右互搏 SDIO总线FATS文件读写SD/MicroSD/TF卡

STM32存储左右互搏 SDIO总线FATS文件读写SD/MicroSD/TF卡 SD/MicroSD/TF卡是基于FLASH的一种常见非易失存储单元&#xff0c;由接口协议电路和FLASH构成。市面上由不同尺寸和不同容量的卡&#xff0c;手机领域用的TF卡实际就是MicroSD卡&#xff0c;尺寸比SD卡小&#xff0c;而…

switch语句深讲

一。功能 1.选择&#xff0c;由case N:完成 2.switch语句本身没有分支功能&#xff0c;分支功能由break完成 二。注意 1.switch语句如果不加break&#xff0c;在一次判断成功后会执行下面全部语句并跳过判断 2.switch的参数必须是整形或者是计算结果为整形的表达式,浮点数会…

3.7设计模式——Observer 观察者模式(行为型)

意图 定义对象间的一种一对多的依赖关系&#xff0c;当一个对象的状态发生改变时&#xff0c;所有依赖于他的对象都得到通知并被自动更新。 结构 Subject&#xff08;目标&#xff09;知道它的观察者&#xff0c;可以有任意多个观察者观察同一个目标&#xff0c;提供注册和删…

C++(Qt)软件调试---crashpad捕获崩溃(19)

C(Qt)软件调试—crashpad捕获崩溃&#xff08;19&#xff09; 文章目录 C(Qt)软件调试---crashpad捕获崩溃&#xff08;19&#xff09;1、概述2、资源地址3、配置环境4、解决报错5、测试代码6、测试结果7、Qt中使用crashpad 更多精彩内容&#x1f449;个人内容分类汇总 &#x…

CTF之本地管理员

拿到题目随便登录一下发现提示IP禁止访问&#xff0c;请联系本地管理员登陆&#xff0c;IP已被记录. 所以我们使用伪造数据包来源 IP 这里我们在提交的数据请求包里加一个x-forwarded-for: 127.0.0.1&#xff0c;伪造IP进行访问&#xff0c;发现提示变了 我们再看网页源码&…

Unity类银河恶魔城学习记录14-5 p152 Lost currency save and enemy‘s currency drop

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili LostCurrencyController.cs using System.Collections; using System.Colle…

传统行业生产型企业虚拟化存储典型应用

传统行业的生产型企业IT系统性能往往无法满足企业目前业务需求。面对数据量持续增长&#xff0c;容量不足&#xff0c;同时企业希望减少购买新设备及维护费用。Infortrend存储搭配Vmware 虚拟化操作系统搭建虚拟服务器&#xff0c;充分利用现有IT基础资源,减少硬件投入及降低维…

使用 Flask 和 WTForms 构建一个用户注册表单

在这篇技术博客中&#xff0c;我们将使用 Flask 和 WTForms 库来构建一个用户注册表单。我们将创建一个简单的 Flask 应用&#xff0c;并使用 WTForms 定义一个注册表单&#xff0c;包括用户名、密码、确认密码、邮箱、性别、城市和爱好等字段。我们还将为表单添加验证规则&…

基于SpringBoot开发的同城租房系统租房软件APP小程序源码

项目背景 一、市场前景 随着城市化进程的加快和人口流动性的增强&#xff0c;租房市场正逐渐成为一个不可忽视的巨大市场。传统的租房方式往往存在着信息不对称、效率低下等问题&#xff0c;而同城租房软件的出现&#xff0c;则有效地解决了这些问题&#xff0c;为租房市场注…