Pytest基础自学系列
Posted COCOgsta
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Pytest基础自学系列相关的知识,希望对你有一定的参考价值。
视频来源:B站《冒死上传!pytest接口自动化测试框架(基础理论到项目实战及二次开发)教学视频【软件测试】》
一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持!
通过conftest.py和@pytest.fixture()结合实现全局的前置应用
用例1需要先登录,用例2不需要登录,用例3需要先登录,在有不同的用例前置条件是不一样的
conftest.py配置需要注意以下点:
- conftest.py配置脚本名称是固定的,不能改名称,是单独存放的一个配置文件。
- 原则上,conftest.py与运行的用例要在同一个package下,并且有init.py文件,可以在不同的py文件中使用同一个fixture函数
- 不需要import导入conftest.py,pytest用例会自动查找
- 一般来说,不同的模块下都有一个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
以上是关于Pytest基础自学系列的主要内容,如果未能解决你的问题,请参考以下文章