如何解决testng执行用例失败自

如何解决testng执行用例失败自,第1张

一、首先新建Java类实现IRetryAnalyzer接口,代码如下(主要配置自动重跑次数maxRetryCount):

[java] view plain copy

public class OverrideIReTry implements IRetryAnalyzer {

public static Logger logger=LoggergetLogger(OverrideIReTryclass);

public int retryCount=0;

private static int maxRetryCount ;

static {

//外围文件配置最大运行次数,失败后重跑maxRetryCount+1次

maxRetryCount = 2;//也就是失败后重跑3次

loggerinfo("maxRunCount=" + (maxRetryCount));

}

@Override public boolean retry(ITestResult iTestResult){

if(retryCount <= maxRetryCount){String message = "running retry for '" + iTestResultgetName() + "' on class " +

thisgetClass()getName() + " Retrying " + retryCount + " times";

loggerinfo(message);

ReportersetCurrentTestResult(iTestResult);

Reporterlog("RunCount=" + (retryCount + 1));

retryCount++;

return true;

} return false;

}

}

二、新建Java类实现IAnnotationTransformer接口,代码如下:

[java] view plain copy

package TezitongAll;

import javalangreflectConstructor;

import javalangreflectMethod;

import orgtestngIAnnotationTransformer;

import orgtestngIRetryAnalyzer;

import orgtestngannotationsITestAnnotation;

public class RetryListener implements IAnnotationTransformer {

@Override

public void transform(ITestAnnotation annotation, @SuppressWarnings("rawtypes") Class testClass,@SuppressWarnings("rawtypes") Constructor testConstructor, Method testMethod) {

IRetryAnalyzer retry = annotationgetRetryAnalyzer();

if (retry == null) {

annotationsetRetryAnalyzer(OverrideIReTryclass);

}

}

}

在使用testng时,常使用@Beforeclass来做一些初始化工作,但是在@Test注解中加入了group属性时,@Beforeclass修饰的方法会无法执行,原因是@Beforeclass不是@Test的那个组,因此解决方案如下:
方案一:

使用alwaysRun=true方式,让其一定会运行
方案二:
在@Beforeclass上也加groups属性,并和对应的@Test放入同一组

在使用TestNG进行测试时,使用配置文件的方式更容易于维护,但是经常遇到明明方法写了也配置执行了,但是run的时候代码就没有执行
看代码:(仔细看注释!)
[java] view plain copy 在CODE上查看代码片派生到我的代码片
/

<p>
Title: TestngMethods
</p>

<p>
对应配置文件testng-methodsxml
Description: Testng的methods测试及配置,参考testng-methodsxml,如果不设置
exclude和include,默认执行当前测试类时,带有返回值的方法不会被执行

如果想执行多个同类型或者命名方式类似的多个方法时,可以使用方法组测试,
''表示一个或多个字符,如果方法命名方式不同,那么可以采用组测试方法进行测试,参考TestGroups

注:文档错误!

51 - Test methods Test methods are annotated with @Test Methods annotated
with @Test that happen to return a value will be ignored, unless you set
allow-return-values to true in your testngxml:

<suite allow-return-values="true">

or

<test allow-return-values="true">

此处在<test >中配置allow-return-values属性无效,测试依旧不会被执行
</p>

<p>
Company:
</p>

@author : Dragon

@date : 2014年10月11日
/
public class TestngMethods {
/
默认情况下这个方法将被忽略,如果需要执行,需要在xml中配置allow-return-values="true"

@return
/
@Test
public String getName() {
Systemerrprintln("return name getName()");
return "name";
}

@Test
public void funtest() {
Systemerrprintln("this is funtest");
}

@Test
public void saveMethod1() {
Systemerrprintln("this is saveMethod1");
}

@Test
public void saveMethod2() {
Systemerrprintln("this is saveMethod2");
}

@Test
public void saveMethod3() {
Systemerrprintln("this is saveMethod3");
}

}
配置文件:testng-methodsxml
[html] view plain copy 在CODE上查看代码片派生到我的代码片
<xml version="10" encoding="UTF-8">
<!DOCTYPE suite SYSTEM ">@Lazy
@Lazy用于指定该Bean是否取消预初始化。主要用于修饰Spring Bean类,用于指定该Bean的预初始化行为,
使用该Annotation时可以指定一个boolean型的value属性,该属性决定是否要预初始化该Bean

传递Maven pomxml里的系统属性参数到TestNG,文章沿用笔者一贯的风格--例子驱动。 解决什么问题 1 用过WebDriver的都知道,当你启动Chrome或IE的时候都需要设置系统属性, 比如 1 SystemsetProperty("webdriveriedriver", "D:/temp/resourc


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12897063.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-28
下一篇 2023-05-28

发表评论

登录后才能评论

评论列表(0条)

保存