我有一个测试套件,可以很好地跨两个独立的数据库(SQLite和Postgres)测试代码。我想扩展它,在升级的数据库中运行完全相同的测试套件(测试数据库模式升级是否按预期工作)
要运行的升级是在pytest之外,根据来自Git的信息,从shell脚本确定的,Git确定有哪些架构版本,与可用的升级脚本进行比较,然后应该调用pytest。我想使用类似于:
pytest --dbupgrade=v1 --dbupgrade=v2 tests/test-upgrades.py
我在conftest.py
中有以下内容:
def pytest_addoption(parser):
parser.addoption(
"--dbupgrade",
action="append",
default=[],
help="list of base schema versions to upgrade"
)
我在其他测试中使用了参数化夹具。我已经编写并使用了所有测试用例,我希望避免重写它们以使其自身参数化,正如我在使用pytest_generate_tests
搜索解决方案时所看到的那样。因此,我可以轻松地硬编码:
@pytest.fixture(params=['v1', 'v2'])
def myfixture(request):
...
我想:
@pytest.fixture(params=pytest.config.option.get('dbupgrade')
def myfixture(request):
...
但是pytest_addoption
的结果可以在pytestconfig
fixture中获得,也可以在附加到各种对象的config
属性中获得,我无法在fixture的声明中找到它——但我相信到那时它是可用的
我不喜欢它,但我正在从环境变量中提取必要的信息,这很好。比如:
# for this case I prefer this to fail noisily if it fails
schema_versions = os.environ['SCHEMA_VERSIONS'].split(',')
...
@pytest.fixture(params=schema_versions)
def myfixture(request):
...
目前没有回答
相关问题 更多 >
编程相关推荐