首页 > 其他分享 >Pytest根据命令行参数使用动态数据进行参数话数据驱动

Pytest根据命令行参数使用动态数据进行参数话数据驱动

时间:2023-05-18 16:44:54浏览次数:47  
标签:动态数据 filepath Pytest pytest 参数 test txt def

Python中有一个重要的特性是,装饰器、类属性、模块变量都是模块加载时立即执行的。因此在使用@pytest.mark.parametrize进行参数话的时候,数据一般是确定的,如下例:

import pytest

DATA = [
    "a.txt",
    "b.txt",
    "c.txt",
]


@pytest.mark.parametrize('filepath', DATA)
def test_a(filepath):
    print('test_a', filepath)

即使你将DATA改成通过函数获取,也无法动态根据一些参数,例如:

import pytest


def get_data():
    return [
        "a.txt",
        "b.txt",
        "c.txt",
    ]

@pytest.mark.parametrize('filepath', get_data()) # get_data在模块导入时就立即执行
def test_a(filepath):
    print('test_a', filepath)

即使get_data设计有参数, 在装饰器调用时,参数也必须是去定的。
使用fixture函数的params参数(也是装饰器)也是一样的问题(需要确定的数据)。
如果想动态比如根据命令行参数进行参数话,需要用到pytest_generate_tests,示例如下:

# conftest.py
def pytest_addoption(parser):
    parser.addoption(
        "--filepath", action="append",
        default=[], help="run file list"
    )


def pytest_generate_tests(metafunc):
    if "filepath" in metafunc.fixturenames:
        metafunc.parametrize("filepath",
                             metafunc.config.getoption("filepath"))
# test_a.py
def test_a(filepath):
    print('test_a', filepath)

运行命令

pytest test_a.py -sv --filepath a.txt --filepath b.txt --filepath c.txt   

效果如下图:

参考:https://docs.pytest.org/en/7.1.x/how-to/parametrize.html#basic-pytest-generate-tests-example

标签:动态数据,filepath,Pytest,pytest,参数,test,txt,def
From: https://www.cnblogs.com/superhin/p/17412370.html

相关文章

  • django filter多个不确定参数查询
    1kwargs={}2condition=[]3ifargs.get('name'):4kwargs['name']=args.get('name')5condition.append(ANNDistributionBatchTaskModel.batch_task_name.like(f"%{kwargs......
  • 类的__init__()方法中,默认参数必须在非默认参数之后
    在Python类的__init__()方法中,默认参数必须在非默认参数之后。否则会产生SyntaxError,提示non-defaultargumentfollowsdefaultargument 正确用法:classUser:def__init__(self,name,age=18):self.name=nameself.age=age错误用法:classUser......
  • 标准工时设计的IE参数
    1.基础参数:CT、TT、OEE、标准时间、标准产能2.深入参数OPE、TEE篇、UPH、UPPH3.进阶参数TPT、增值比、人机效率、线平衡... 标准时间:定义:在正常工作条件和情绪下,以为受过训练的熟练作业者,用正常的速度、标准的操作方法,来完成合格作业,所需要的时间。(实际应用中非常重......
  • Python - 仅限关键字参数 & 仅限位置参数
    仅限位置参数(/)#Python3.8新增defdemo1(a,b,/):returna,bif__name__=='__main__':demo1(1,2)#rightdemo1(1,b=2)#error#demo1(1,b=2)报错:'''Traceback(mostrecentcalllast):File"E:\PyProject\pytestD......
  • drf——Request源码分析、序列化组件、序列化类的使用(字段类和参数)、反序列化校验和
    1.Request类源码分析#APIView+Response写个接口#总结: 1.新的request有个data属性,以后只要是在请求body体中的数据,无论什么编码格式,无论什么请求方式2.取文件还是从:request.FILES3.取其他属性,跟之前完全一样request.method.... 原理:新的request重写了__g......
  • 参数估计
    总体分布的参数往往是未知的,需要样本进行估计 在参数估计中一般用样本均值估计总体均值即用-x代替E(x)用样本方差估计总体方差即用1/n*∑Xi^2-X^2代替D(x)解题方式是:我们一般都能用E(X)和D(X)将未知参数表示出来然后用样本的均值和方......
  • 西门子S7-1200 PID温度控制程序,PID参数经过预 西门子S7-1200 PID温度控制程序,PID参
    西门子S7-1200PID温度控制程序,PID参数经过预西门子S7-1200PID温度控制程序,PID参数经过预调节和精确调节之后得出,程序采用博图V15高级版编写,适合用于不带冷却功能的模具加热生产工艺上,项目上运用已稳定工作多时,带详细注释,可进行二次开发和扩展,也可直接使用!!本程序采用博图V15编......
  • 西门子PID程序,西门子PLC 1200和多台G120西门子 变频器Modbud RTU通讯,带西门子触摸屏,带
    西门子PID程序,西门子PLC1200和多台G120西门子变频器ModbudRTU通讯,带西门子触摸屏,带变频器参数/Modbus通讯报文详细讲解,PID自写FB块无密码可以直接应用到程序,PID带手动自动功能,可手动调节PID,注释详细,有图纸ID:698656140211742......
  • mybatis 之 if test 条件查询,参数为0时,查询出所有结果
    一、工作问题:在工作中发现使用MyBatis时在boolean如果传值为0时 ,并没有按照"0"进行筛选选,而是查出了所有的数据。"<iftest='exeStatus!=nullandexeStatus!=""'>","andexe_status=#{exeStatus}","</if>",二、mybatis源码:首......
  • Tensorflow教程(十四) 命令行参数tf.flags的使用
    实例1importtensorflowastfflags=tf.flagsFLAGS=flags.FLAGSflags.DEFINE_integer('data_num',100,"""Flagoftypeinteger""")flags.DEFINE_string('img_path','./img',"""Flagof......