testng - testng 套件结果未提供正确的计数
问题描述
根据论坛中提供的讨论,更改失败计数、基于重试计数跳过测试的方法未按预期工作。侦听器已包含在套件中的 testng.xml 中,因此不确定为什么计数是不被修改。测试版本:6.14.3
/*Test class*/
import org.testng.Assert;
import org.testng.annotations.Listeners;
import org.testng.annotations.Test;
import org.testng.asserts.SoftAssert;
import org.testng.ITestNGListener;
import org.testng.ISuiteListener;
import org.testng.ISuite;
public class TestclassTest{
Testclass t = new Testclass();
@Test
public void compareDataClassValues() {
Assert.assertEquals(t.compareDataClassValues(1, 0), true);
Assert.assertEquals(true, true);
Assert.assertEquals(true, false);
}
}
/听众/
import java.util.ArrayList;
import java.util.Collection;
import java.util.Map;
import java.util.Set;
import java.util.logging.Logger;
import org.testng.IResultMap;
import org.testng.IRetryAnalyzer;
import org.testng.ISuiteResult;
import org.testng.ITestContext;
import org.testng.ITestListener;
import org.testng.ITestNGListener;
import org.testng.ITestNGMethod;
import org.testng.ITestResult;
public class Listener implements ITestListener {
// RetryFailure oretry= new RetryFailure();
public Listener() {
// TODO Auto-generated constructor stub
}
public void onTestStart(ITestResult result) {
System.out.println("test start");
}
public void onTestSuccess(ITestResult result) {
// TODO Auto-generated method stub
System.out.println("test success");
}
public void onTestFailure(ITestResult result) {
// TODO Auto-generated method stub
System.out.println("test failure");
}
public void onTestSkipped(ITestResult result) {
// TODO Auto-generated method stub
System.out.println("test skip");
// result.
}
public void onTestFailedButWithinSuccessPercentage(ITestResult result) {
// TODO Auto-generated method stub
System.out.println("test onTestFailedButWithinSuccessPercentage");
}
public void onStart(ITestContext context) {
// TODO Auto-generated method stub
System.out.println("test onStart");
System.out.println(context.getOutputDirectory());
System.out.println(context.getHost());
ITestNGMethod[] itest= context.getAllTestMethods();
for (ITestNGMethod i : itest) {
System.out.println(i.getMethodName());
System.out.println(i.getCurrentInvocationCount());
}
System.out.println(context.getStartDate());
}
public void onFinish(ITestContext context,ITestResult result) {
System.out.println("test onFinish with failure");
}
public void onFinish(ITestContext context) {
ITestResult result;
// result.getTestContext().get
Integer number =0;
System.out.println("test onFinish");
System.out.println(context.getSuite().getResults());
IResultMap mpassed = context.getPassedTests();
IResultMap mfailed1 = context.getFailedTests();
IResultMap mskipped1 = context.getSkippedTests();
Set<ITestResult> mpassedResults = mpassed.getAllResults();
Set<ITestResult> mfailed1Results = mfailed1.getAllResults();
Set<ITestResult> mskippedResults = mskipped1.getAllResults();
Map<String, ISuiteResult> suiteres = (context.getSuite().getResults());
System.out.println(suiteres.keySet().toString());
System.out.println(suiteres.values().toString());
mfailed1Results.removeAll(mskippedResults);
for (ITestResult iTestResult2 : mfailed1Results) {
System.out.println(iTestResult2.getMethod().getMethodName() + " Failed Method name");
if (mpassedResults.size() > 0){
if (mpassedResults.contains(iTestResult2.getMethod())) {
mfailed1Results.remove(iTestResult2);
mskippedResults.remove(iTestResult2);
}
}
else if (mskippedResults.size() > 0){
System.out.println(mskipped1.getAllMethods().toString() + " skipped Method name");
mskippedResults.remove(iTestResult2);
System.out.println(mskippedResults.toString());
}
}
}
}
/重试分析器/
public class RetryFailure implements IRetryAnalyzer {
int retryCount = 0;
public boolean retry(ITestResult result) {
System.out.println("retry method");
final int maxRetryCount = 2;
if (retryCount < maxRetryCount) {
System.out.println("retry " + retryCount);
retryCount = retryCount + 1;
return true;
}
return false;
}
}
/*Retry Listener*/
public class RetryListener implements IAnnotationTransformer {
public RetryListener() {
// TODO Auto-generated constructor stub
}
public void transform(ITestAnnotation annotation, Class testClass, Constructor testConstructor, Method testMethod) {
// TODO Auto-generated method stub
IRetryAnalyzer retry = annotation.getRetryAnalyzer();
if(retry == null){
annotation.setRetryAnalyzer(RetryFailure.class);
}
}
public void transform(IConfigurationAnnotation annotation, Class testClass, Constructor testConstructor,
Method testMethod) {
// TODO Auto-generated method stub
}
public void transform(IDataProviderAnnotation annotation, Method method) {
// TODO Auto-generated method stub
}
public void transform(IFactoryAnnotation annotation, Method method) {
// TODO Auto-generated method stub
}
}
解决方案
推荐阅读
- c++ - 试图创建一个指向动态分配的 char 数组的指针
- macos - mac os ping: ping 必须以 root 身份运行
- sql - 如何在 SQL 中将字符串转换为日期时间
- python - 逐元素应用
- visual-studio-code - vscode 将光标移动到下一个突出显示的单词
- matlab - 如何初始化 Matlab 结构数组以进行增长?
- c++ - OpenCV C++ drawContours 错误
- javascript - 计时器和本地存储问题
- r - 从 R 中整个数据帧的行中查找配对值
- javascript - 使用 casperjs 连接到 whatsappweb