当前位置: 首页 > 知识库问答 >
问题:

如何根据DataProvider提供的测试参数修改TestNG/Allure(@Test(描述)、@Description、@TmsLink)值

周凯捷
2023-03-14

给定一个带有dataProvider和Allure用于报告的TestNG测试类,需要修改Allure的报告以根据DataProvider具有(@Test(描述)、@TmsLink、@Description)值。

有没有简单的方法?

注意:我尝试使用ITest接口更改测试名称,但对Allure报告没有影响,我需要TestNG测试描述和Allure@Decription

共有1个答案

全誉
2023-03-14
@BeforeMethod(alwaysRun = true)
public void BeforeMethod(Method method, Object[] testData){
    TmsLink tmsLink = method.getAnnotation(TmsLink.class);
    Description description = method.getAnnotation(Description.class);
    Test test = method.getAnnotation(Test.class);

    changeAnnotationValue(tmsLink, "value", "<GET FROM testData>");
    changeAnnotationValue(description, "value", "<GET FROM testData>");
    changeAnnotationValue(test, "description", "<GET FROM testData>");
}

@SuppressWarnings("unchecked")
public static Object changeAnnotationValue(Annotation annotation, String key, Object newValue){
    System.out.println("BEFORE annotation: " + annotation);
    Object handler = Proxy.getInvocationHandler(annotation);
    Field f;
    try {
        f = handler.getClass().getDeclaredField("memberValues");
    } catch (NoSuchFieldException | SecurityException e) {
        throw new IllegalStateException(e);
    }
    f.setAccessible(true);
    Map<String, Object> memberValues;
    try {
        memberValues = (Map<String, Object>) f.get(handler);
    } catch (IllegalArgumentException | IllegalAccessException e) {
        throw new IllegalStateException(e);
    }
    Object oldValue = memberValues.get(key);
    if (oldValue == null || oldValue.getClass() != newValue.getClass()) {
        throw new IllegalArgumentException();
    }
    memberValues.put(key,newValue);
    System.out.println("AFTER annotation: " + annotation);
    return oldValue;
}

我设法更改了诱惑描述、TmsLink和TestNG测试。描述,但诱惑仍然得到测试。说明,所以我仍然需要更新@Test。诱惑捕获之前的描述。

 类似资料:
  • 我正在使用TestNG和Java运行测试 这是在https://www.tutorialspoint.com/testng/testng_parameterized_test.htm 错误是这样说的:[Utils][ERROR][错误]org.testng.TestNGExc0019:@Test on method addProjectWork需要参数'url',但未在C:\用户\SStaple\

  • 我有以下问题 我有一个带有随机名称的测试,我必须记录我从数据提供者提供的两个测试参数。 我实现了一种方法,通过将它们连接到名称中,将它们记录为自定义处理的测试参数。 然而,TestNG还添加了未处理的参数(它们看起来像是随机生成的代码,带有包/类的名称和其他内容,如下图所示)。 是否有任何方法可以删除TestNG记录的数据提供程序测试参数?或者我可以用自定义数据提供程序测试参数覆盖它们吗? 顺便说

  • 我在java testng测试中使用allure testng(2.12.1)适配器。我有使用@DataProvider的测试。我的测试实现了ITest,以在运行时更改测试方法实例名称。当我运行测试时,我看到了不同的测试方法名称,但在allure报告中,它为每个测试运行显示了相同的测试方法。如何配置诱惑报告以显示类似IDE的内容? 预期:测试一测试二测试三 实际:myTest myTest myT

  • 我这里有一个条件,就像在《下课》和它的@test方法:

  • 我正在Saucelabs中运行测试,需要在运行时设置一个名为“name”的功能,这是测试方法的名称。这必须对来自DataProvider的每个DesiredCapables对象执行。 然后,我需要实例化一个活动的RemoteWebDriver对象,以便在包含此功能的情况下运行测试。 尝试运行代码时出错: 只能将ITestContext、XmlTest、Method、Object[]、ITestRe

  • 我的问题是: “数据提供者”如何在内部将数据发送到测试? 幕后到底发生了什么,以便我们在“测试”中获得发送的数据?。 我很想知道,数据提供者和测试是如何通过提及“数据提供者”的名称而相互连接的,“数据提供者”将数据发送给测试的。 “数据提供者”是否调用测试并将数据作为参数传递? 我的数据提供者代码: 我的测试代码: