python-pytest使用(3)-conftest

python-pytest使用(3)-conftest

原创:George555         公众号:测试江湖路 

如果这些内容对你有帮助,也可以打开微信扫一扫,加关注:

    本篇接上一篇【python-pytest使用2-fixture】,在pytest中还有一种方式可以完成实现数据共享、测试用例的数据驱动等场景,这就是conftest.py,那么conftest怎么使用呢?

    1. conftest.py 说明

    conftest.py里可以实现数据的共享,包括参数、方法等,而在使用时不需要通过import来导入conftest,pytest会自动在用例py文件中识别同目录下的conftest.py里的通过@pytest.fixture装饰的方法。conftest使用时候需要配合fixture一块使用。

    2.要知道conftest的用法,首先先得从目录结构看起,如下目录结构:

        说明:

        当根目录下的conftest.py中有fixture装饰器方法时,此装饰器将作用域整个项目;

        当testDir目录下有conftest.py时,只作用于当前目录,即test_demo.py模块中的所有测试用例。

        由目录可见:

        A.test_case1.py可以用conftest.py-1、conftest.py-3、conftest.py-1中的fixture装饰方法,但不能用conftest.py-2

        B.test_demo.py可以使用所有的conftest.py中fixture装饰方法

        C.根据A.B示例可知这种使用关系是树结构继承的子孙可以用父辈的方法,父辈不能用子孙的。

    3.Fixture和conftest的区别:

    fixture适用于在同一个py文件中多个用例执行时的使用;

    而conftest.py方式适用于多个py文件之间的数据共享。

    4.代码案例

        conftest.py文件:

import pytest@pytest.fixture(scope="module",                params=([{"id":10,"name":"mike"},                        {"id":20,"name":"bill"}]),name="test1")  #def funGlobal1(request):    print('这里是funGlobal1-别名test1的初始化')    id=request.param['id']    name=request.param['name']#     print("这里是funGlobal()")    return id,name

@pytest.fixture(scope="session",                params=([{"username":'admin',"pw":"111111"},                         {"username":'root',"pw":"222222"},                        {"username":'test',"pw":"333333"}]),name="login")  #def funGlobal2(request):    print('开始session全局初始化...')    username=request.param['username']    password=request.param['pw']#     print("这里是funGlobal()")    yield username,password    print('最后的销毁,运行结束了')    @pytest.fixture(scope="function",                
                params=([{"id":10,"name":"globl3.1"}]),name="test2") def funGlobal3(request):    print('这里是funGlobal3-别名test2的初始化')    id=request.param['id']    name=request.param['name']#     print("这里是funGlobal()")    def myteardown():        print('这里是funGlobal3-别名test2的销毁操作')    request.addfinalizer(myteardown)    return id,name

        test_case.py文件:

import pytest,osdef testcase1(test1):    print("\n这里是类外部方法testcase1,调用了funGlobal()====={}".format(test1))def testcase2():    print("这里是类外部方法testcase2\n")class TestClass():    def testcase3(self,login):        print("这里是类内部方法testcase3----id:{}".format(login[0]))        print("这里是类内部方法testcase3----name:{}".format(login[1]))            @pytest.mark.usefixtures("test2")    def testcase4(self):        #testcase4 用了usefixtures打标签装饰,则运行时,有几个参数,就运行几次        print("这里是类内部方法testcase4")if __name__=="__main__":    pytest.main(["-s", __file__])    输出:

    文中为自己学习时笔记记录,有不恰当之处,欢迎大家指正,进行修改。

#####欢迎大家加群交流####

QQ:464314378

微信群请先加群主微信,群主会拉各位小伙伴进群,注意添加备注。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值