如何使用 IReporter 在 selenium 中获取失败的测试详细信息?

How to get failed tests details in selenium using IReporter?

我有这个代码:

 int totalTestsCount = 0;
    int totalPassedTests = 0;
    int totalSkippedTests = 0;
    int totalFailedTests = 0;

    for (ISuite suite : suites) {
        Map<String, ISuiteResult> suiteResults = suite.getResults();
        for (ISuiteResult sr : suiteResults.values()) {
            ITestContext tc = sr.getTestContext();
            int passedTests = tc.getPassedTests().getAllResults().size();
            int skippedTests = tc.getSkippedTests().getAllResults().size();
            int failedTests = tc.getFailedTests().getAllResults().size();

            totalTestsCount += passedTests + skippedTests + failedTests;
            totalPassedTests += passedTests;
            totalSkippedTests += skippedTests;
            totalFailedTests += failedTests;
        }
    }

但现在我想获取有关每个失败测试的详细信息,例如:带有测试方法名称和异常的测试参数。 我该怎么做?

根据 testng 文档https://javadoc.io/static/org.testng/testng/6.13/org/testng/IResultMap.html

您可以获得失败测试的详细信息,例如:

    for (ISuite suite : suites) {
        Map<String, ISuiteResult> suiteResults = suite.getResults();
        for (ISuiteResult sr : suiteResults.values()) {
            ITestContext tc = sr.getTestContext();
            int passedTests = tc.getPassedTests().getAllResults().size();
            int skippedTests = tc.getSkippedTests().getAllResults().size();
            
            // First you can get failed tests results in Sete
            Set<ITestResult> failedTestResults = tc.getFailedTests().getAllResults();
            // Then you can use for loop inside that set
            for (ITestResult failedTestResult: failedTestResults) {
                 // According to here: // https://javadoc.io/static/org.testng/testng/6.13/org/testng/ITestResult.html
                //To get failed test parameters
                Object[] failedTestParameters = failedTestResult.getParameters();
                // To get method name (Not sure on this, getMethod() also may work)
                String methodName = failedTestResult.getName(); //(There is also //.getTestName())
                // To get exception (Not sure about this)
                Throwable exception = failedTestResult.getThrowable();
                // You can do whatever you want with these
}
            int failedTests = tc.getFailedTests().getAllResults().size();
            

            totalTestsCount += passedTests + skippedTests + failedTests;
            totalPassedTests += passedTests;
            totalSkippedTests += skippedTests;
            totalFailedTests += failedTests;
        }
    }

看起来像我说的更多方法在这里:https://javadoc.io/static/org.testng/testng/6.13/org/testng/ITestResult.html

因此,您可以查看文档,并试用它们以了解适合您的方法。