如何解决Pytest-如何在多个场景下参数化测试?
我正在使用pytest,boto3和aws,并且希望对参数化测试进行动态声明。如何改进此代码以仅在特定的一组子网内断言?
production_private_ids = ["subnet-08f6d70b65b5cxx38","subnet-0b6aaaf1ce207xx03","subnet-0e54fda8f811fxxd8"]) ....
nonproduction_private_ids = ["subnet-11f6xx0b65b5cxx38","subnet-116aaaf1ce207xx99","subnet-11xxfda8f811fxx77"]) ....
@pytest.mark.parametrize("subnet",["production_private_ids","nonproduction_private_ids","nonproduction_public_ids","production_public_ids ")
# if environment = production,then only check if production_private_ids exists in team_subnet
def test_sharing_subnets_exist(subnet,accountid):
team_subnet = get_team_subnets(accountid)
assert subnet in team_subnet
# if environment = nonproduction,then only check if nonproduction_private_ids exists in team_subnet
def test_sharing_subnets_exist(subnet,accountid):
team_subnet = get_team_subnets(accountid)
assert subnet in team_subnet
解决方法
一种常见的做法是设置和读取环境变量,以确定您要从哪个平台运行。
例如,在环境中,您可以有一个变量isProduction=1
。然后,您可以在代码中通过os.environ['isProduction'] == 1
进行检查。
出于安全等原因,您甚至可以在环境中保存私人ID。 例如在环境中,您可以在非生产环境中使用以下变量
id1="subnet-11f6xx0b65b5cxx38"
id2="subnet-116aaaf1ce207xx99"
id3"subnet-11xxfda8f811fxx77"
在生产机器上还有另一台
id1="subnet-08f6d70b65b5cxx38"
id2="subnet-0b6aaaf1ce207xx03"
id3="subnet-0e54fda8f811fxxd8"
在您执行的代码中
import os
private_ids = [os.environ['id1'],os.environ['id2'],os.environ['id3']]
因此,您将在每台计算机上获取配置。只需确保在您的工作流/测试流中正确获取了环境变量即可。
,如果需要在参数化上执行其他逻辑,则可以通过metafunc参数化测试。示例:
import os
import pytest
production_private_ids = [...]
nonproduction_private_ids = [...]
def pytest_generate_tests(metafunc):
# if the test has `subnet` in args,parametrize it now
if 'subnet' in metafunc.fixturenames:
# replace with your environment check
if os.environ.get('NAME',None) == 'production':
ids = production_private_ids
else:
ids = nonproduction_private_ids
metafunc.parametrize('subnet',ids)
def test_sharing_subnets_exist(subnet,accountid):
team_subnet = get_team_subnets(accountid)
assert subnet in team_subnet
现在运行pytest ...
将仅检查非生产ID,而NAME="production" pytest ...
将仅检查生产ID。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。