如何为执行相同测试方法的每个测试用例动态使用@Description(在诱惑报告中)

How to use @Description (in allure reporting) dynamically for each test case that executes same test method

我正在为我的 java-selenium 测试框架使用 Allure 报告。 我的数据提供者是以下形式的 HashMap

public static HashMap<String, String>[][] getDataTable(String fileName, String sheetName)

其中 fileName 是保存在该位置的 excel 工作簿名称 sheet 名字 是工作簿的作品sheet之一。

如果我在测试方法上方使用@Description,那么每个测试用例都会显示相同的描述。

我有不同的测试用例及其对相同测试方法的各自描述 (假设方法是 LoginTestCase1:没有密码登录,TestCase2:没有用户名登录)

所以对于这两个测试用例,我需要在诱惑报告中使用@Description 进行不同的描述。

我应该为它修改数据提供者吗?如果有怎么办?

为此我使用了这样的东西:

    @Test(dataProvider = "getListOfCredentials", dataProviderClass = AuthenticationDataProvider.class)
    public void loginUser(AuthenticationData authenticationData) {
            AllureLifecycle lifecycle = Allure.getLifecycle();
            lifecycle.updateTestCase(testResult -> testResult.setName("Test wrong login with username: "+authenticationData.getUsername()));
            lifecycle.updateTestCase(testResult -> testResult.setDescription("Test wrong login with password: "+authenticationData.getPassword()));
}

因此,每次测试将 运行 使用 object authenticationData 时,我都会根据我的数据提供者方法将 return 的凭据动态获得 Allure 描述和测试标题。

对于 Allure 中的动态步骤,我已经实现了类似的东西。 因此,我的测试用例步骤显示在页面 class 中,并从我的测试方法中调用。

   public class AuthenticationPage extends Page {

   //// Locators

   @Step("Login in app with wrong credentials")
    public void loginInAppExpectFailure(AuthenticationData authenticationData) throws IOException, InterruptedException {
        loginUserInApp(authenticationData);
        AllureLifecycle lifecycle = Allure.getLifecycle();
        lifecycle.updateStep(testStep -> testStep.setName("Step title login with username: "+authenticationData.getUsername()));
    }
}

每次调用该步骤时,我都会更新该步骤的默认名称。 Lifecycle 使用来自 Allure 的 StepResult 对象(在我的例子中是 testStep 对象),您可以从中操作步骤属性。您有 setStatus、setAttachments 等方法。只需使用该方法即可。