pytest 根据环境跳过测试条件
pytest skip test condition depending on environment
在我使用 pytest 框架和 conftest.py 的脚本中,我有一个从命令行获取环境值的解析器,因此测试知道它需要在哪个环境中 运行。
def pytest_addoption(parser): # obtiene el valor de CLI
parser.addoption("--env")
--
@pytest.fixture()
def environment(env):
if env == 'DEV':
entorno = 'DEV'
elif env == 'TE':
entorno = 'TE'
elif env == 'PROD':
entorno = 'PROD'
else:
entorno = 'UAT'
return entorno
我有一些永远不应该在 PROD 中 运行 的测试,有没有办法用 pytest 做一个标记或跳过条件来检查环境变量是否是“PROD”不应该 运行?
我想知道是否有可能在测试开始 运行ning 之前获取环境值,这样我就可以在测试顶部添加一个 @pytest.mark.skipif(env=="PROD") 。
我发现的唯一方法是像这样在测试中添加 if 条件,但我不认为这是最好的方法:
@pytest.mark.parametrize('policy_number', policy_list)
def test_fnol_vida_fast(self, setUp, environment, request, policy_number):
try:
if self.entorno != 'PROD':
###################
Script Script Script
###################
else:
pytest.skip('Scripts FNOL don't run in PROD')
except Exception as e:
self.logger.error("******************* test_fnol_vida_fast (" + str(policy_number) + ") FAILED *******************")
self.commons.take_screenshot(request.node.name)
raise e
finally:
self.driver.close()
self.driver.quit()
尝试这样的事情:
import os
import pytest
def requires_env(*envs):
env = os.environ.get(
'ENVIRONMENT', 'test'
)
envs = envs if isinstance(envs, list) else [*envs]
return pytest.mark.skipif(
env not in envs,
reason=f"Not suitable envrionment {env} for current test"
)
然后这样使用:
@requires_env("test", "stag")
def test_1():
assert 1 == 1
非常适合我
顺便说一句,您可以删除将字符串转换为列表的步骤,并比较环境,例如 env == env
在我使用 pytest 框架和 conftest.py 的脚本中,我有一个从命令行获取环境值的解析器,因此测试知道它需要在哪个环境中 运行。
def pytest_addoption(parser): # obtiene el valor de CLI
parser.addoption("--env")
--
@pytest.fixture()
def environment(env):
if env == 'DEV':
entorno = 'DEV'
elif env == 'TE':
entorno = 'TE'
elif env == 'PROD':
entorno = 'PROD'
else:
entorno = 'UAT'
return entorno
我有一些永远不应该在 PROD 中 运行 的测试,有没有办法用 pytest 做一个标记或跳过条件来检查环境变量是否是“PROD”不应该 运行? 我想知道是否有可能在测试开始 运行ning 之前获取环境值,这样我就可以在测试顶部添加一个 @pytest.mark.skipif(env=="PROD") 。 我发现的唯一方法是像这样在测试中添加 if 条件,但我不认为这是最好的方法:
@pytest.mark.parametrize('policy_number', policy_list)
def test_fnol_vida_fast(self, setUp, environment, request, policy_number):
try:
if self.entorno != 'PROD':
###################
Script Script Script
###################
else:
pytest.skip('Scripts FNOL don't run in PROD')
except Exception as e:
self.logger.error("******************* test_fnol_vida_fast (" + str(policy_number) + ") FAILED *******************")
self.commons.take_screenshot(request.node.name)
raise e
finally:
self.driver.close()
self.driver.quit()
尝试这样的事情:
import os
import pytest
def requires_env(*envs):
env = os.environ.get(
'ENVIRONMENT', 'test'
)
envs = envs if isinstance(envs, list) else [*envs]
return pytest.mark.skipif(
env not in envs,
reason=f"Not suitable envrionment {env} for current test"
)
然后这样使用:
@requires_env("test", "stag")
def test_1():
assert 1 == 1
非常适合我
顺便说一句,您可以删除将字符串转换为列表的步骤,并比较环境,例如 env == env