import pytest
import smtplib
import contextlib
# @pytest.fixture(scope='function')
# def smtp_connection():
# return smtplib.SMTP("smtp.gmail.com", 587, timeout=5)
#
#
# '''
# pytest --fixtures test_simplefactory.py
# 查看可用的灯具(带前缀的灯具_仅在添加-v选项后才会显示)
# '''
#
#
# def test_ehlo(smtp_connection):
# response, msg = smtp_connection.ehlo()
# print('*'*50)
# print(response, msg, end=' ')
# print('*' * 50)
# assert response == 250
# assert 0 # for demo purposes
'''
fixture(scope="function", params=None, autouse=False, ids=None, name=None)
scope有四个级别的参数: function, class, Module, session
params:一个可选的参数列表,它将导致多个参数调用fixture功能和所有测试使用它
autouse:如果为True,则为所有测试激活fixture func可以看见他,如果为False(默认值)
则显示需要参考来激活fixture
每个字符串id的列表, 每个字符串对应于params这样他们就是测试ID的一部分。如果没有提供ID
他们从params自动生成
name:fixture的名称 这默认是装饰函数的名称
'''
# @pytest.fixture()默认是函数级别的 @pytest.fixture(scope="function")
# @python.fixture()函数级别次序
order = []
@pytest.fixture(scope="session")
def s1():
order.append("session")
assert 1
@pytest.fixture(scope="module")
def m1():
order.append("module")
assert 1
@pytest.fixture(scope="function")
def f1():
order.append("function")
assert 1
def test_order_list(s1, m1, f1):
assert order == ['session', 'module', 'function']
@pytest.fixture(scope="module")
def login():
"""
通过使用yield语句代替return,yield语句之后的所有代码都将用作结束调用的拆卸语句:
:yield:
"""
print("输入账号密码:")
yield login
print("我忘记了")
def test_s1(login):
print("user:{},password:{}".format('Mike', '123456'))
assert 1
# 无论夹具设置代码是否引发异常,都将始终使用contextlib.ExitStack上下文管理器终结器进行调用
@contextlib.contextmanager
def connect(port):
print("引用{}".format(port))
yield connect()
print("关闭引用了")
@pytest.fixture(scope='function')
def equipments():
with contextlib.ExitStack() as stack:
yield [stack.enter_context(connect(port)) for port in ("C1", "C3", "C28")]
"""
请注意,我们还可以将yield语法与with语句无缝结合使用
如果"C28"失败,异常,"C1"并且"C3"将仍然被正确关闭
"""
# def setup_module():
# print("模块级别开始")
#
#
# def teardown_module():
# print("模块级别结束")
#
#
# def setup_function():
# print("函数级别开始")
#
#
# def teardown_function():
# print("函数级别结束")
#
#
# def test_print1():
# print("输出用例1")
#
#
# def test_print2():
# print("输出用例2")
# class TestMethod:
# def setup_class(self):
# print("类对象开始")
#
# def teardown_class(self):
# print("类对象结束")
#
# def setup_method(self):
# print("类对象方法开始")
#
# def teardown_method(self):
# print("类对象方法结束")
#
# def setup(self):
# print("setup开始")
#
# def teardown(self):
# print("teardown结束")
#
# def test_1(self):
# print('1')
# def setup_module():
# print("模块级别开始")
#
#
# def teardown_module():
# print("模块级别结束")
#
#
# def setup_function():
# print("函数级别开始")
#
#
# def teardown_function():
# print("函数级别结束")
#
#
# def test_print1():
# print("输出用例1")
#
#
# def test_print2():
# print("输出用例2")
# 参数化
@pytest.fixture(scope='module', params=['I am here', 'always waiting for you'])
def print_here(request):
print(request.param)
assert 1
def test_task1(print_here):
print("这是参数化测试")
assert 1
@pytest.fixture(params=[0, 1], ids=["spam", "ham"])
def a(request):
return request.param
def test_a(a):
pass
def idfnc(fixture_value):
if fixture_value == 0:
return "eggs"
else:
return None
@pytest.fixture(params=[0, 1], ids=idfnc)
def b(request):
return request.param
def test_b(b):
pass
pytest学习--fixture
最新推荐文章于 2024-05-09 11:15:43 发布