当前位置: 首页 > 工具软件 > conftest > 使用案例 >

pytest接口自动化测试框架 | conftest.py和@pytest.fixture()结合

吕自明
2023-12-01

视频来源:B站《冒死上传!pytest接口自动化测试框架(基础理论到项目实战及二次开发)教学视频【软件测试】》

一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持!

附上汇总贴:pytest接口自动化测试框架 | 汇总_COCOgsta的博客-CSDN博客


用例1需要先登录,用例2不需要登录,用例3需要先登录,在有不同的用例前置条件是不一样的

conftest.py配置需要注意以下点:

  1. conftest.py配置脚本名称是固定的,不能改名称,是单独存放的一个配置文件。
  1. 原则上,conftest.py与运行的用例要在同一个package下,并且有init.py文件,可以在不同的py文件中使用同一个fixture函数
  1. 不需要import导入conftest.py,pytest用例会自动查找
  1. 一般来说,不同的模块下都有一个conftest.py文件。全局的有一个conftest.py

conftest.py

import pytest

# 作用域
@pytest.fixture(scope='class', autouse=True)

def login():
    print('登录系统')
    yield
    print('退出系统')

py1_test.py

import pytest

# conftest.py
# 1.conftest在用例的同目录下
# 2.conftest名字不能改变
# 3.不需要导入,自动查找fixture

class TestCase1:
    def test_03(self):
        print('测试用例三')


    def test_04(self):
        print('测试用例四')

运行结果:

/Users/guoliang/SynologyDrive/SourceCode/pytest3/venv/bin/python /Users/guoliang/SynologyDrive/SourceCode/pytest3/all.py
============================= test session starts ==============================
platform darwin -- Python 3.7.6, pytest-7.1.2, pluggy-1.0.0 -- /Users/guoliang/SynologyDrive/SourceCode/pytest3/venv/bin/python
cachedir: .pytest_cache
metadata: {'Python': '3.7.6', 'Platform': 'Darwin-17.7.0-x86_64-i386-64bit', 'Packages': {'pytest': '7.1.2', 'py': '1.11.0', 'pluggy': '1.0.0'}, 'Plugins': {'xdist': '2.5.0', 'forked': '1.4.0', 'metadata': '2.0.1', 'allure-pytest': '2.9.45', 'rerunfailures': '10.2', 'html': '3.1.1', 'ordering': '0.6'}}
rootdir: /Users/guoliang/SynologyDrive/SourceCode/pytest3, configfile: pytest.ini, testpaths: ./testcase
plugins: xdist-2.5.0, forked-1.4.0, metadata-2.0.1, allure-pytest-2.9.45, rerunfailures-10.2, html-3.1.1, ordering-0.6
collecting ... collected 2 items

testcase/py1_test.py::TestCase1::test_03 登录系统
测试用例三
PASSED
testcase/py1_test.py::TestCase1::test_04 测试用例四
PASSED退出系统


============================== 2 passed in 0.02s ===============================

Process finished with exit code 0

全局有conftest.py,具体包内也有conftest.py

/conftest.py

import pytest

# 作用域
@pytest.fixture(scope='session', autouse=True)

def login():
    print('登录系统')
    yield
    print('退出系统')

# 执行顺序
# 登录系统 -商品用例三 商品用例四 - 退出系统
# 登录系统 -用户用例三 用户用例四 - 退出系统

/testcase/pro/conftest.py

import pytest

@pytest.fixture(scope='class', autouse=True)

def login1():
    print('进入商品管理')
    yield
    print('退出商品管理')

/testcase/user/conftest.py

import pytest

@pytest.fixture(scope='class', autouse=True)

def login2():
    print('进入用户管理')
    yield
    print('退出用户管理')

/testcase/pro/pro_test.py

class TestCase2:
    def test_3(self):
        print('商品用例三')


    def test_4(self):
        print('商品用例四')

/testcase/user/user_test.py

# conftest.py
# 1.conftest在用例的同目录下,
# 先登录 进入到用户管理--用户用例 退出用户管理 退出登录
# 先登录 进入到商品管理--商品用例 退出商品管理 退出登录

# 先登录 进入到用户管理--用户用例 退出用户管理 进入到商品管理--商品用例 退出商品管理 退出登录
# 作用域
# 2.conftest名字不能改变
# 3.不需要导入,自动查找fixture


class TestCase1:
    def test_03(self):
        print('用户用例三')


    def test_04(self):
        print('用户用例四')

运行结果:

/Users/guoliang/SynologyDrive/SourceCode/pytest3/venv/bin/python /Users/guoliang/SynologyDrive/SourceCode/pytest3/all.py
============================= test session starts ==============================
platform darwin -- Python 3.7.6, pytest-7.1.2, pluggy-1.0.0 -- /Users/guoliang/SynologyDrive/SourceCode/pytest3/venv/bin/python
cachedir: .pytest_cache
metadata: {'Python': '3.7.6', 'Platform': 'Darwin-17.7.0-x86_64-i386-64bit', 'Packages': {'pytest': '7.1.2', 'py': '1.11.0', 'pluggy': '1.0.0'}, 'Plugins': {'xdist': '2.5.0', 'forked': '1.4.0', 'metadata': '2.0.1', 'allure-pytest': '2.9.45', 'rerunfailures': '10.2', 'html': '3.1.1', 'ordering': '0.6'}}
rootdir: /Users/guoliang/SynologyDrive/SourceCode/pytest3, configfile: pytest.ini, testpaths: ./testcase
plugins: xdist-2.5.0, forked-1.4.0, metadata-2.0.1, allure-pytest-2.9.45, rerunfailures-10.2, html-3.1.1, ordering-0.6
collecting ... collected 4 items

testcase/pro/pro_test.py::TestCase2::test_3 登录系统
进入商品管理
商品用例三
PASSED
testcase/pro/pro_test.py::TestCase2::test_4 商品用例四
PASSED退出商品管理

testcase/user/user_test.py::TestCase1::test_03 进入用户管理
用户用例三
PASSED
testcase/user/user_test.py::TestCase1::test_04 用户用例四
PASSED退出用户管理
退出系统


============================== 4 passed in 0.05s ===============================

Process finished with exit code 0
 类似资料: