在函数外的模块中使用 pytest 变量
Using pytest-variables in a module outside a function
我正在使用Pytest and Pytest-variables with parametrized test functions to try and reduce duplication of code across test cases. I have this working with hard-coded strings within the test module: similar to this;但是,我不知道如何从函数范围之外的变量文件中导入变量。非常感谢任何帮助,我知道使用 pytest-variables 可能无法做到这一点,但我想在此处 post 以确保我没有遗漏任何东西。
工作代码
import pytest
account_email_field = [
['test@google.com', 'Site Title', True],
['', '', False ],
['test@google.com', '', False ],
['', 'Default Title', False]
]
@pytest.fixture(params=account_email_field)
def email_field(request):
return [request.param[0], request.param[1], request.param[2]]
def test_sample_spage(email_field):
return [email_field[0], email_field[1], email_field[2]]
None 工作代码,但我想要的例子。
import pytest
account_email_field = [
[variables['sample_email'], variables['site_title'], True],
[variables['empty'], variables['empty'], False ],
[variables['sample_email'], variables['empty'], False ],
[variables['empty'], variables['site_title'], False]
]
@pytest.fixture(params=account_email_field)
def email_field(request):
return [request.param[0], request.param[1], request.param[2]]
def test_sample_spage(email_field):
return [email_field[0], email_field[1], email_field[2]]
我会使用静态 class 而不是字典进行查找,因为它更 IDE 友好。在文件 constants.py
(或其他名称)
中
class variables:
sample_email = 'test@google.com'
site_title = 'Site Title'
empty = ''
然后在测试文件中你可以
from constants import variables as var
account_email_field = [
[var.sample_email, var.site_title, True ],
[var.empty, var.empty, False ],
[var.sample_email, var.empty, False ],
[var.empty, var.site_title, False ],
]
希望对您有所帮助!
pytest-variables 插件将变量存储在配置对象中,因此您可以从 pytest_generate_tests
挂钩访问它。
给定以下 variables.json 文件:
{
"data": [
["test@google.com", "Site Title", true],
["", "Default Title", false]
]
}
使用以下 test_param_vars.py 文件:
def pytest_generate_tests(metafunc):
if 'data' in metafunc.fixturenames:
metafunc.parametrize('data', metafunc.config._variables['data'])
def test_variables(data):
assert data[0]
您应该得到类似于以下内容的输出:
$ pytest test_param_variables.py --variables=variables.json -ra -s
======================= test session starts ========================
platform darwin -- Python 3.6.4, pytest-3.4.2, py-1.5.2, pluggy-0.6.0
rootdir: /Users/dhunt/workspace/pytest-scratchpad, inifile:
plugins: variables-1.7.1
collected 2 items
test_param_variables.py .F
===================== short test summary info ======================
FAIL test_param_variables.py::test_variables[data1]
============================= FAILURES =============================
______________________ test_variables[data1] _______________________
data = ['', 'Default Title', False]
def test_variables(data):
> assert data[0]
E AssertionError: assert ''
test_param_variables.py:6: AssertionError
================ 1 failed, 1 passed in 0.04 seconds ================
我正在使用Pytest and Pytest-variables with parametrized test functions to try and reduce duplication of code across test cases. I have this working with hard-coded strings within the test module: similar to this;但是,我不知道如何从函数范围之外的变量文件中导入变量。非常感谢任何帮助,我知道使用 pytest-variables 可能无法做到这一点,但我想在此处 post 以确保我没有遗漏任何东西。
工作代码
import pytest
account_email_field = [
['test@google.com', 'Site Title', True],
['', '', False ],
['test@google.com', '', False ],
['', 'Default Title', False]
]
@pytest.fixture(params=account_email_field)
def email_field(request):
return [request.param[0], request.param[1], request.param[2]]
def test_sample_spage(email_field):
return [email_field[0], email_field[1], email_field[2]]
None 工作代码,但我想要的例子。
import pytest
account_email_field = [
[variables['sample_email'], variables['site_title'], True],
[variables['empty'], variables['empty'], False ],
[variables['sample_email'], variables['empty'], False ],
[variables['empty'], variables['site_title'], False]
]
@pytest.fixture(params=account_email_field)
def email_field(request):
return [request.param[0], request.param[1], request.param[2]]
def test_sample_spage(email_field):
return [email_field[0], email_field[1], email_field[2]]
我会使用静态 class 而不是字典进行查找,因为它更 IDE 友好。在文件 constants.py
(或其他名称)
class variables:
sample_email = 'test@google.com'
site_title = 'Site Title'
empty = ''
然后在测试文件中你可以
from constants import variables as var
account_email_field = [
[var.sample_email, var.site_title, True ],
[var.empty, var.empty, False ],
[var.sample_email, var.empty, False ],
[var.empty, var.site_title, False ],
]
希望对您有所帮助!
pytest-variables 插件将变量存储在配置对象中,因此您可以从 pytest_generate_tests
挂钩访问它。
给定以下 variables.json 文件:
{
"data": [
["test@google.com", "Site Title", true],
["", "Default Title", false]
]
}
使用以下 test_param_vars.py 文件:
def pytest_generate_tests(metafunc):
if 'data' in metafunc.fixturenames:
metafunc.parametrize('data', metafunc.config._variables['data'])
def test_variables(data):
assert data[0]
您应该得到类似于以下内容的输出:
$ pytest test_param_variables.py --variables=variables.json -ra -s
======================= test session starts ========================
platform darwin -- Python 3.6.4, pytest-3.4.2, py-1.5.2, pluggy-0.6.0
rootdir: /Users/dhunt/workspace/pytest-scratchpad, inifile:
plugins: variables-1.7.1
collected 2 items
test_param_variables.py .F
===================== short test summary info ======================
FAIL test_param_variables.py::test_variables[data1]
============================= FAILURES =============================
______________________ test_variables[data1] _______________________
data = ['', 'Default Title', False]
def test_variables(data):
> assert data[0]
E AssertionError: assert ''
test_param_variables.py:6: AssertionError
================ 1 failed, 1 passed in 0.04 seconds ================