0

谁能告诉我如何在 TestNG(套件)开始时获取(预期)所有测试/方法执行的计数?

您可以轻松获得所有测试方法的数量,但这并不计算每个测试方法乘以数据提供者大小的数量(每个方法将被计算一次,即使一个方法通过数据提供者执行 100 次)。

除非有明显的解决方案,例如简单的 API 调用,否则关键似乎是从 @Test 注释中给出的数据提供者名称中找出数据提供者方法,我在这里问过: 如何获取数据提供者方法来自 TestNG 数据提供者的名称?

一旦你知道数据提供者方法是什么,你就可以执行数据提供者,并计算数据集的数量。这看起来效率不高,但我们正在运行的测试不是单元测试,所以我不会太担心两次执行数据提供者(与实际测试运行的时间相比,这将是小菜一碟)。

4

3 回答 3

0

不幸的是,没有简单的方法可以直接在 TestNG 中获得以下任何一个-

  1. 不。通过的测试用例
  2. 成功率

这是解决方法,我这样做是为了获得通过百分比。如您所见,运行摘要打印以下内容,包括 Dataprovider 测试的计数 -

Total tests run: 4, Passes: 1, Failures: 3, Skips: 0

所以总测试用例=通过计数+失败计数+跳过计数 所以我写了一个这样的方法-

public static void main(String[] args) {
    // TODO Auto-generated method stub
    System.out.println("###################  TESTS STARTED   ##################### ");
            TestListenerAdapter tla = new TestListenerAdapter();
            TestNG testng = new TestNG();
            testng.setTestClasses(new Class[] { PassCSVDatatoDataProvider.class });
            testng.addListener(tla);
            testng.run();
            
            float Totalcount = (tla.getFailedTests().size()+tla.getPassedTests().size()+tla.getSkippedTests().size());
            float Passpercentage = (tla.getPassedTests().size()/Totalcount*100);
            System.out.println("PASS PERCENTAGE - "+Passpercentage +"%");
            System.out.println(tla.getFailedTests().size()+ "  TESTS FAILED ! ");
            
            System.out.println("###################      END   ##################### ");
        }

TestNG 控制台输出

###################  TESTS STARTED   ##################### 
=============================================== Command line suite Total tests run: 4, Passes: 1, Failures: 3, Skips: 0
===============================================

PASS PERCENTAGE - 25.0% 
3  TESTS FAILED ! 
###################      END   #####################
于 2020-10-05T12:53:22.513 回答
0

您可以使用侦听器并在内部拥有自己的计数逻辑。

于 2015-07-16T22:43:14.940 回答
0

在试运行中尝试实施IInvokedMethodListener和覆盖beforeInvocation方法

public class Test implements IInvokedMethodListener
{
    static int testcount=0;
    public void beforeInvocation(IInvokedMethod method, ITestResult testResult) {
            
            testcount=testcount+method.getTestMethod().getInvocationCount();
    }

    @Override
    public void onStart(ISuite suite) {
        // TODO Auto-generated method stub
        
    }

    
    @Override
    public void onFinish(ISuite suite) {
        System.out.println(testcount);
        
    }
}
于 2021-02-18T17:43:46.840 回答