diff --git a/allure-pytest/examples/link/link.rst b/allure-pytest/examples/link/link.rst index 713dcc47..d1e70d0e 100644 --- a/allure-pytest/examples/link/link.rst +++ b/allure-pytest/examples/link/link.rst @@ -22,3 +22,14 @@ Links ... def test_custom_link(): ... pass + >>> import pytest + >>> @allure.link("{link}") + >>> @pytest.mark.parametrize("test, link", [(True, 'link/666'), (False, 'link/777')]) + >>> def test_parametrize_link(test, link): + ... assert test + + >>> @allure.issue("{issue}") + >>> @allure.testcase("{testcase}") + >>> @pytest.mark.parametrize("test, issue, testcase", [(True, 'issues/666', 'testcase/666'), (False, 'issues/777', 'testcase/777')]) + >>> def test_parametrize_link_multiple(test, issue, testcase): + ... assert test \ No newline at end of file diff --git a/allure-pytest/src/listener.py b/allure-pytest/src/listener.py index c9ff8049..e7365a6e 100644 --- a/allure-pytest/src/listener.py +++ b/allure-pytest/src/listener.py @@ -110,6 +110,7 @@ def pytest_runtest_teardown(self, item): yield uuid = self._cache.get(item.nodeid) test_result = self.allure_logger.get_test(uuid) + params = item.callspec.params if hasattr(item, 'callspec') else {} test_result.labels.extend([Label(name=name, value=value) for name, value in allure_labels(item)]) test_result.labels.extend([Label(name=LabelType.TAG, value=value) for value in pytest_markers(item)]) test_result.labels.extend([Label(name=name, value=value) for name, value in allure_suite_labels(item)]) @@ -118,7 +119,7 @@ def pytest_runtest_teardown(self, item): test_result.labels.append(Label(name=LabelType.FRAMEWORK, value='pytest')) test_result.labels.append(Label(name=LabelType.LANGUAGE, value=platform_label())) test_result.labels.append(Label(name='package', value=allure_package(item))) - test_result.links.extend([Link(link_type, url, name) for link_type, url, name in allure_links(item)]) + test_result.links.extend([Link(link_type, url, name) for link_type, url, name in allure_links(item, params)]) @pytest.hookimpl(hookwrapper=True) def pytest_fixture_setup(self, fixturedef, request): diff --git a/allure-pytest/src/utils.py b/allure-pytest/src/utils.py index 5153b6e1..05ee4307 100644 --- a/allure-pytest/src/utils.py +++ b/allure-pytest/src/utils.py @@ -71,9 +71,9 @@ def allure_labels(item): return labels -def allure_links(item): +def allure_links(item, parameters): for mark in item.iter_markers(name=ALLURE_LINK_MARK): - yield (mark.kwargs["link_type"], mark.args[0], mark.kwargs["name"]) + yield (mark.kwargs["link_type"], mark.args[0].format(**parameters), mark.kwargs["name"].format(**parameters)) def pytest_markers(item): diff --git a/allure-pytest/test/acceptance/link/link_test.py b/allure-pytest/test/acceptance/link/link_test.py index 24f6868a..3e616f2e 100644 --- a/allure-pytest/test/acceptance/link/link_test.py +++ b/allure-pytest/test/acceptance/link/link_test.py @@ -37,3 +37,26 @@ def test_custom_link(executed_docstring_path): has_link("http://qameta.io", name="QAMETA", link_type="homepage") ) ) + + +def test_parametrize_link(executed_docstring_path): + testcases = [{'url': 'link/666'}, {'url': 'link/777'}] + for test in testcases: + assert_that(executed_docstring_path.allure_report, + has_test_case("test_parametrize_link", + has_link(test['url']), + ) + ) + + +def test_parametrize_link_multiple(executed_docstring_path): + testcases = [{'issue': 'issues/666', 'testcase': 'testcase/666'}, + {'issue': 'issues/777', 'testcase': 'testcase/777'}] + + for test in testcases: + assert_that(executed_docstring_path.allure_report, + has_test_case("test_parametrize_link_multiple", + has_issue_link(test['issue']), + has_test_case_link(test['testcase']) + ) + )