标签:ica 调用顺序 nal 实例 lib aik fun conf 插件
fixture: 夹具是指机械制造过程中用来固定加工对象,使之占有正确的位置,以接受施工或检测的装置,又称卡具(qiǎ jǜ)。从广义上说,在工艺过程中的任何工序,用来迅速、方便、安全地安装工件的装置,都可称为夹具。
测试夹具是为了给测试脚本提供一个固定的基准。
可以理解为使测试脚本可以重复、可靠地调用这些夹具进行组装测试脚本。(如果有经典的xunit样式中的setup和teardown概念,可以看作是对这两个东西的进一步的封装,细化各个预置和清理步骤,方便更灵活的组装测试脚本构成)
# content of ./test_fixture.py
import pytest
@pytest.fixture
def smtp_connection():
import smtplib
return smtplib.SMTP_SSL("smtp.qq.com", 465, timeout=5)
def test_ehlo(smtp_connection):
response, msg = smtp_connection.ehlo()
assert response == 250
执行过程
test_
前缀符合pytest收集测试程序的规范,所以pytest执行test_ehlo
测试;smtp_connection
参数,用该参数匹配查找同名测试夹具;Fixtures allow test functions to easily receive and work against specific pre-initialized application objects without having to care about import/setup/cleanup details.
如果在编写测试时发现要使用多个测试文件中的夹具,可以将它们打包放到目录下的conftest.py
文件中。
不需要导入要在测试中使用的夹具,它会被pytest自动发现。
发现顺序: 测试类 -> 模块 -> conftest.py
-> 内置插件 -> 第三方插件
作用范围 scope
Pytest的缓存机制一次只会缓存一个夹具实例。这意味着当使用参数化的夹具时,pytest可以在给定范围内多次调用唯一夹具实例。
调用顺序
具有相同作用域的夹具的相对顺序遵循测试函数中声明的顺序,并遵循夹具之间的依赖关系。自动使用的灯 具将在显式使用的夹具之前实例化。
# content of ./test_fixture.py
import smtplib
import pytest
@pytest.fixture(scope="module")
def smtp_connection(request):
smtp_connection = smtplib.SMTP_SSL("smtp.qq.com", 465, timeout=5)
def fin():
print("teardown smtp_connection")
smtp_connection.close()
request.addfinalizer(fin)
return smtp_connection
def test_ehlo(smtp_connection):
response, msg = smtp_connection.ehlo()
assert response == 250
夹具工厂模式可以在单个测试中多次需要夹具结果的情况下提供帮助。夹具不是直接返回数据,而是返回生成数据的函数。然后可以在测试中多次调用此函数。
# content of ./test_fixture.py
import random
import pytest
@pytest.fixture
def make_customer_record():
created_records = []
def _make_customer_record(name):
record = random.choice(name)
created_records.append(record)
return record
yield _make_customer_record
created_records.clear()
def test_customer_records(make_customer_record):
make_customer_record("Lisa")
make_customer_record("Mike")
make_customer_record("Meredith")
# content of ./test_fixture.py
import pytest
import smtplib
@pytest.fixture(scope="module", params=["smtp.qq.com", "mail.python.org"])
def smtp_connection(request):
smtp_connection = smtplib.SMTP_SSL(request.param, 465, timeout=5)
yield smtp_connection
print("finalizing {}".format(smtp_connection))
smtp_connection.close()
class App:
def __init__(self, smtp_connection):
self.smtp_connection = smtp_connection
@pytest.fixture(scope="module")
def app(smtp_connection):
return App(smtp_connection)
def test_smtp_connection_exists(app):
assert app.smtp_connection
@pytest.fixture(autouse=True)
标签:ica 调用顺序 nal 实例 lib aik fun conf 插件
原文地址:https://www.cnblogs.com/aquichita/p/11979511.html