diff --git a/allure-testng/src/main/java/io/qameta/allure/testng/AllureTestNg.java b/allure-testng/src/main/java/io/qameta/allure/testng/AllureTestNg.java index 5d357ea4..566b10dd 100644 --- a/allure-testng/src/main/java/io/qameta/allure/testng/AllureTestNg.java +++ b/allure-testng/src/main/java/io/qameta/allure/testng/AllureTestNg.java @@ -989,7 +989,7 @@ private List getParameters(final ITestContext context, final ITestNGMethod method, final Object... parameters) { final Map result = new HashMap<>(); - context.getCurrentXmlTest().getAllParameters() + method.findMethodParameters(context.getCurrentXmlTest()) .forEach((name, value) -> result.put(name, createParameter(name, value))); final Object instance = method.getInstance(); if (nonNull(instance)) { diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/AllureTestNgTest.java b/allure-testng/src/test/java/io/qameta/allure/testng/AllureTestNgTest.java index 815bea81..165322f5 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/AllureTestNgTest.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/AllureTestNgTest.java @@ -1767,6 +1767,28 @@ public void shouldOverrideParameters() { ); } + @SuppressWarnings("unchecked") + @AllureFeatures.Parameters + @Issue("1359") + @Test + public void shouldRespectClassAndMethodXmlParameterOverrides() { + final AllureResults results = runTestNgSuites("suites/gh-1359.xml"); + + final TestResult classOverride = findTestResultByName(results, "classOverride"); + assertThat(classOverride.getParameters()) + .extracting(Parameter::getName, Parameter::getValue) + .containsExactly( + tuple("scope", "class") + ); + + final TestResult methodOverride = findTestResultByName(results, "methodOverride"); + assertThat(methodOverride.getParameters()) + .extracting(Parameter::getName, Parameter::getValue) + .containsExactly( + tuple("scope", "method") + ); + } + @SuppressWarnings("unchecked") @AllureFeatures.Parameters @Issue("141") @@ -1919,6 +1941,7 @@ private List resolveParametersFromMethodWithAllNativeInjectedTypes() final ITestNGMethod method = mock(ITestNGMethod.class); when(method.getInstance()).thenReturn(null); when(method.getConstructorOrMethod()).thenReturn(new ConstructorOrMethod(source)); + when(method.findMethodParameters(xmlTest)).thenReturn(xmlTest.getAllParameters()); final AllureTestNg adapter = new AllureTestNg( new AllureLifecycle(new AllureResultsWriterStub()), diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/XmlParameterOverridesTest.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/XmlParameterOverridesTest.java new file mode 100644 index 00000000..767cd5d8 --- /dev/null +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/XmlParameterOverridesTest.java @@ -0,0 +1,29 @@ +/* + * Copyright 2016-2026 Qameta Software Inc + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.qameta.allure.testng.samples; + +import org.testng.annotations.Test; + +public class XmlParameterOverridesTest { + + @Test + public void classOverride() { + } + + @Test + public void methodOverride() { + } +} diff --git a/allure-testng/src/test/resources/suites/gh-1359.xml b/allure-testng/src/test/resources/suites/gh-1359.xml new file mode 100644 index 00000000..0a76ebf8 --- /dev/null +++ b/allure-testng/src/test/resources/suites/gh-1359.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + +