一、首先新建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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)