Pytest中conftest.py共享fixture(五)

       有一点首先需要确认的的是,pytest中的fixture是pytest用于将测试前后进行预备,清理工作的代码分离出核心测试逻辑的

一种机制。但是我们更加希望的是在一个测试套件中,能够共享fixture的机制,这样所一个测试套件里面的所有测试点都能够

共同使用,和我在早期介绍的分离测试固件的思想有点雷同。在pytest中通过conftest.py来共享fixture,如果希望多个测试文

件共同使用一个fixture时候,可以在该目录下创建conftest.py文件,但是切记该文件绝对不能倒入使用,这点一定要注意,创

建conftest.py文件后,把需要的fixture加入到里面,就可以使用了。先来一个简单的案例,在一个包中,有三个测试模块,每个

测试点都显示开始前执行和结束后执行,也就是说,每个测试点执行的时候,先打印测试开始,然后执行测试点,然后最后打印

测试结束,见案例代码:

 

 

 见conftest.py的源码:

#!/usr/bin/python3
#coding:utf-8


import pytest

@pytest.fixture(autouse=True)
def wuya():
    print('开始测试')
    yield
    print('结束测试')

 

执行模块test_001.py 或者 test_002.py的测试代码,见执行后的结果信息:

================================================ test session starts ================================================
platform darwin -- Python 3.7.4, pytest-4.0.2, py-1.8.0, pluggy-0.12.0 -- /Library/Frameworks/Python.framework/Versions/3.7/bin/python3.7
cachedir: .pytest_cache
rootdir: /Applications/code/stack/study/xunit/conftest01, inifile:
plugins: allure-adaptor-1.7.10
collected 2 items                                                                                                   

test_001.py::test_login_001 
        SETUP    F wuya
        test_001.py::test_login_001 (fixtures used: wuya)PASSED
        TEARDOWN F wuya
test_002.py::test_logout_001 
        SETUP    F wuya
        test_002.py::test_logout_001 (fixtures used: wuya)PASSED
        TEARDOWN F wuya

============================================= 2 passed in 0.01 seconds ==============================================
l

 

回溯过程使用到的命令为:pytest --setup-show,如上结果信息就是回溯的过程。

      fixture也可以传递测试数据,那么也可以写到conftest.py的文件中,还是看一个案例,见conftest.py的最新

源码:

#!/usr/bin/python3
#coding:utf-8


import pytest

@pytest.fixture(autouse=True)
def wuya():
    print('开始测试')
    yield
    print('结束测试')

@pytest.fixture()
def login():
    return 'adfghjk34567dsfg'

 

测试代码见如下:

#!/usr/bin/python3
#coding:utf-8

import pytest


def test_login(login):
    if login=='adfghjk34567dsfg':
        assert True
    else:
        assert  False

 

执行如上的测试代码,见执行后的结果信息:

platform darwin -- Python 3.7.4, pytest-4.0.2, py-1.8.0, pluggy-0.12.0
rootdir: /Applications/code/stack/study/xunit/conftest01, inifile:
plugins: allure-adaptor-1.7.10
collected 3 items / 2 deselected                                                                                                         

test_login.py 
        SETUP    F wuya
        SETUP    F login
        test_login.py::test_login (fixtures used: login, wuya).
        TEARDOWN F login
        TEARDOWN F wuya

================================================= 1 passed, 2 deselected in 0.04 seconds =================================================

 

依据如上的测试代码,可以看出在一个conftest.py中,可以编写多个共享fixture的代码。关于cionftest.py共享

fixture的几个注意事项,再次总结下,具体如下:

1、conftest.py文件绝对不能当平常的模块来倒入,是绝对不能

2、conftest.py很多时候是被当作pytest一个本地插件库

3、可以 把一个目录下的conftest.py看成是一个供该目录下所有测试用例使用的fixture仓库

 

posted @ 2019-08-31 22:23  无涯(WuYa)  阅读(253)  评论(0编辑  收藏  举报