在@pytest.fixture 中访问测试用例名称
access testcase name in @pytest.fixture
我正在写一个@pytest.fixture,我需要一种方法来访问使用夹具的测试用例的名称信息。
我刚刚找到一篇涵盖该主题的文章:http://programeveryday.com/post/pytest-creating-and-using-fixtures-for-streamlined-testing/ - 谢谢丹!
import pytest
@pytest.fixture(scope='session')
def my_fixture(request):
print request.function.__name__
# I like the module name, too!
# request.module.__name__
yield
def test_name(my_fixture):
assert False
问题是它不适用于会话范围:
E AttributeError: function not available in session-scoped context
我认为拥有会话范围的固定装置没有意义,因为 @placebo_session
(来自 here)每个函数调用都有效。所以我建议简单地这样做:
@pytest.fixture(scope='function')
def placebo_session(request):
session_kwargs = {
'region_name': os.environ.get('AWS_DEFAULT_REGION', 'us-east-1')
}
profile_name = os.environ.get('PLACEBO_PROFILE', None)
if profile_name:
session_kwargs['profile_name'] = profile_name
session = boto3.Session(**session_kwargs)
prefix = request.function.__name__
base_dir = os.environ.get(
"PLACEBO_DIR", os.path.join(os.getcwd(), "placebo"))
record_dir = os.path.join(base_dir, prefix)
if not os.path.exists(record_dir):
os.makedirs(record_dir)
pill = placebo.attach(session, data_path=record_dir)
if os.environ.get('PLACEBO_MODE') == 'record':
pill.record()
else:
pill.playback()
return session
但是如果您仍然希望每个会话和每个测试用例都完成一些事情,您可以分成两个固定装置(然后使用 func_session
固定装置)。
@pytest.fixture(scope='session')
def session_fixture():
# do something one per session
yield someobj
@pytest.fixture(scope='function')
def func_session(session_fixture, request):
# do something with object created in session_fixture and
# request.function
yield some_val
我正在写一个@pytest.fixture,我需要一种方法来访问使用夹具的测试用例的名称信息。
我刚刚找到一篇涵盖该主题的文章:http://programeveryday.com/post/pytest-creating-and-using-fixtures-for-streamlined-testing/ - 谢谢丹!
import pytest
@pytest.fixture(scope='session')
def my_fixture(request):
print request.function.__name__
# I like the module name, too!
# request.module.__name__
yield
def test_name(my_fixture):
assert False
问题是它不适用于会话范围:
E AttributeError: function not available in session-scoped context
我认为拥有会话范围的固定装置没有意义,因为 @placebo_session
(来自 here)每个函数调用都有效。所以我建议简单地这样做:
@pytest.fixture(scope='function')
def placebo_session(request):
session_kwargs = {
'region_name': os.environ.get('AWS_DEFAULT_REGION', 'us-east-1')
}
profile_name = os.environ.get('PLACEBO_PROFILE', None)
if profile_name:
session_kwargs['profile_name'] = profile_name
session = boto3.Session(**session_kwargs)
prefix = request.function.__name__
base_dir = os.environ.get(
"PLACEBO_DIR", os.path.join(os.getcwd(), "placebo"))
record_dir = os.path.join(base_dir, prefix)
if not os.path.exists(record_dir):
os.makedirs(record_dir)
pill = placebo.attach(session, data_path=record_dir)
if os.environ.get('PLACEBO_MODE') == 'record':
pill.record()
else:
pill.playback()
return session
但是如果您仍然希望每个会话和每个测试用例都完成一些事情,您可以分成两个固定装置(然后使用 func_session
固定装置)。
@pytest.fixture(scope='session')
def session_fixture():
# do something one per session
yield someobj
@pytest.fixture(scope='function')
def func_session(session_fixture, request):
# do something with object created in session_fixture and
# request.function
yield some_val