【发布时间】:2021-01-10 08:48:11
【问题描述】:
我有以下用于 pytest 的test_dss.py 文件:
import dataikuapi
import pytest
def setup_list():
client = dataikuapi.DSSClient("{DSS_URL}", "{APY_KEY}")
client._session.verify = False
project = client.get_project("{DSS_PROJECT}")
# Check that there is at least one scenario TEST_XXXXX & that all test scenarios pass
scenarios = project.list_scenarios()
scenarios_filter = [obj for obj in scenarios if obj["name"].startswith("TEST")]
return scenarios_filter
def test_check_scenario_exist():
assert len(setup_list()) > 0, "You need at least one test scenario (name starts with 'TEST_')"
@pytest.mark.parametrize("scenario", setup_list())
def test_scenario_run(scenario, params):
client = dataikuapi.DSSClient(params['host'], params['api'])
client._session.verify = False
project = client.get_project(params['project'])
scenario_id = scenario["id"]
print("Executing scenario ", scenario["name"])
scenario_result = project.get_scenario(scenario_id).run_and_wait()
assert scenario_result.get_details()["scenarioRun"]["result"]["outcome"] == "SUCCESS", "test " + scenario[
"name"] + " failed"
我的问题是 setup_list 函数,它只能获取 {DSS_URL}、{APY_KEY}、{PROJECT} 的硬编码值。我无法使用PARAMS 或test_scenario_run 中的其他方法
知道如何将PARAMS 也传递给这个函数吗?
【问题讨论】:
-
我不确定我是否理解您在做什么,但我假设您想访问通过命令行在用于参数化的代码中传递的配置值。这可以通过使用
pytest_generate_tests动态参数化测试来完成。 -
我希望能够在函数
setup_list中使用参数,但它只能硬编码...... -
你不能在函数中使用这些参数,因为函数对它们一无所知。正如我所写,如果您只需要用于参数化的函数,您可以在
pytest_generate_tests中执行此操作。对吗? -
正确。你能告诉我它在我的代码上的外观吗?
-
如果我理解正确,请告诉我。我应该添加到
conftest.py:def pytest_generate_tests(metafunc): metafunc.parametrize(host,api,project)和test_dss.py这个添加到函数中:def setup_list(host,api,project):
标签: pytest assert fixtures hardcoded parametrized-testing