首页 > 编程语言 >python-conftest、fixture、matefunc介绍

python-conftest、fixture、matefunc介绍

时间:2023-02-05 16:15:14浏览次数:41  
标签:function metafunc python fixture test conftest pytest print

pytest的规则使用

"""
使用pytest编写用例,必须遵守以下规则:
    (1)测试文件名必须以“test_”开头或者"_test"结尾(如:test_ab.py)
    (2)测试类命名以"Test"开头。
    (3)测试方法必须以“test_”开头。

@pytest.mark.标签名
   标记范围:测试用例、测试类、模块文件


conftest.py与运行的用例要在同一个pakage下,并且有__init__.py文件
conftest.py中的函数不调用也不会执行,调用方式:无需导入,直接同名参数在用例中使用


@pytest.fixture(scope='function',params=None,autouse=False,ids=None,name=None)
    scope参数可以控制fixture的作用范围(session>module>class>function)
        function:每一个函数或方法都会调用,默认值@pytest.fixture(scope='function')或 @pytest.fixture()
        class:   每一个class调用一次,一个类中可以有多个方法
        module:  每一个.py调用一次,一个文件中有多个function和class
        session: 多个文件调用一次,可以跨.py文件调用,每个.py文件就是module
    fixture其他参数
        params:一个可选的参数列表,它将导致多个参数调用fixture功能和所有测试使用它。
        autouse:如果True,则为所有测试激活fixture func可以看到它(如果为True不需要调用就执行)。如果为False则显示需要参考来激活fixture,如果为True不需要调用就执行
        ids:每个字符串id的列表,每个字符串对应于params这样他们就是测试ID的一部分。如果没有提供ID它们将从params自动生成
        name:fixture的名称。这默认为装饰函数的名称。如果fixture在定义它的统一模块中使用,夹具的功能名称将被请求夹具的功能arg遮蔽,解决这个问题的一种方法时将装饰函数命令"fixture_<fixturename>"然后使用"@pytest.fixture(name='<fixturename>')"。

    1、每个接口需共用到的token
    2、每个接口需共用到的测试用例数据
    3、每个接口需共用到的配置信息

"""

"""
matefunc是pytest的一个类型
param metafunc:共有五个属性值
    metafunc.fixturenames:参数化收集时的参数名称
    metafunc.module:使用参数名称进行参数化的测试用例所在的模块d对象
    metafunc.config:测试用例会话
    metafunc.function:测试用例对象,即函数或方法对象metafunc.function.__name__
    metafunc.cls: 测试用例所属的类的类对象
    metafunc.parametrize:将key列表和value列表对应起来

    print(metafunc.definition.own_markers) #[Mark(name='datafile', args=('D:\\codeBook\\pyhton\\shuzf_demo\\file/yaml/demo.yaml',), kwargs={})]
    print(metafunc.definition.own_markers[0].args[0])  #D:\codeBook\pyhton\shuzf_demo\file/yaml/demo.yaml
    print(metafunc.config.rootdir)         #D:\codeBook\pyhton\shuzf_demopy

    print(metafunc.fixturenames)           #['_session_faker', 'pytestconfig', 'faker_seed', 'parameters', 'request']
    print(metafunc.config)                 #<_pytest.config.Config object at 0x000001FF8AA806D0>
    print(metafunc.module)                 #<<module 'test_coll' from 'D:\\codeBook\\pyhton\\shuzf_demopy\\testCase\\test3\\test_coll.py'>
    print(metafunc.cls)                    #class 'test_coll.TestCollection'>
    print(metafunc.function)               #<function TestCollection.test_data_collection at 0x000001FFA2876E50>
"""

 

import pytest
@pytest.fixture(scope='session',autouse=True)  #scope设置执行范围,autous如果为True不需要调用就执行
def get_token():
    token = 'qeehfjejwjwjej11sss@22'
    return token


test_case=['a','b','c']
def pytest_generate_tests(metafunc):
    ids=[]
    if 'parameters' in metafunc.fixturenames:
        for case in test_case:
            ids.append(case)
    metafunc.parametrize('parameters',test_case, ids=ids, scope='function')

 

标签:function,metafunc,python,fixture,test,conftest,pytest,print
From: https://www.cnblogs.com/shuzf/p/17093489.html

相关文章

  • python接口自动化-logging日志
    logging模块的日志级别:日志级别一共有5个从低到高如下,作用是在当你给python函数赋予日志器时,需要自己标记日志级别(后面会用到)DEBUG(调试级别):严重程度最低级别,详细程度最......
  • RBMQ中python案例一:简单模式
    一、生产者与消费者模式之简单模式,原理图   二、生产者产生消息importjsonimportpikaimportdatetime#生产者producer.pydefget_message():#......
  • python-pytest.ini介绍
    一、pytest.ini执行方式含义[pytest]addopts=-vsq--html=./report.htmltestpaths=./testConftestpython_files=test*.pypython_classes=Test*python_func......
  • Mac-pycharm执行python3 manage.py makemigrations报错处理
    Mac-pycharm执行python3manage.pymakemigrations报错处理1报错:NameError:name'_mysql'isnotdefined参考:https://blog.csdn.net/weixin_35757704/article/detail......
  • Python黑客编程之tcp代理
    目的写一款socket代理工具,其实就是在原来两极通信中再加一极,中间极用来转发socket的流量,可以在中间层面实现流量的拦截和篡改代码代理importsocketimportsysim......
  • python collection Chainmap Counter
    chainmap是一个方便的工具类。它是使用链的方式将多个dict链在一起,并不是真正的生成一个新的dict,从而允许程序可以这获取任意一个dict所包含的所有key对应的value。但是......
  • 整理我遇到的 Python 的疑难问题
    1如果字典里一个键指向一个实例,深拷贝会拷贝出一个新的实例吗?不会:classfoo:def__init__(self):print('doinitfoo')a={'cls':foo()}a#......
  • python 3.python入门
    1.编程语言介绍1.1分类机器语言#机器语言用二进制代码0和1描述的指令称为机器指令,由于计算机内部是基于二进制指令工作的,所以机器语言是直接控制计算......
  • python Listbox插入数据导致GUI崩溃
    提问: 我用windnd模块做了个文件拖入获取路径的功能,想把获取到的路径插入到列表,但是GUI会崩溃,下面是原代码求帮忙看看咋回事importwindndimportthreadingimporttk......
  • python内置函数len()
    len()len()函数用于返回对象(字符串、字节、元组、列表等)的长度(元素个数)len()函数的语法:len(s)代码示例print(len(range(10)))print(len(["1","2","3"]))print(len......