zoukankan      html  css  js  c++  java
  • Testng Retry失败用例重新运行的方法(一)

    Testng是Java自动化测试的一个框架,它提供了一个对失败用例重新执行的监听器,即接口 - IRetryAnalyzer。

    先准备一个测试类:

    import org.testng.annotations.Test;
    
    import static org.testng.Assert.assertTrue;
    
    public class ITTest {
      @Test
      public void f() {
    	  assertTrue(false);
    
      }
    }
    

     测试类包含一个@Test方法,执行会失败。

    另外,我们添加2个Java类。第一个,TestngRetry.java。该类实现了接口 IRetryAnalyzer,定义了retry的最大次数,当未达到retry最大数时,返回true;如果达到retry最大数,则返回false,停止retry。

    import org.testng.IRetryAnalyzer;
    import org.testng.ITestResult;
    
    public class TestngRetry implements IRetryAnalyzer {
    
        private int count = 1;
        private int maxRetryCount = 3;
        
    	public boolean retry(ITestResult result) {
    		// TODO Auto-generated method stub
            if(count <= maxRetryCount){
            	
                result.setAttribute("RETRY", new Integer(count));
                count++;
                return true;
            }
            return false;
        }
    }
    

     接下来,添加监听器RetryListener.java,实现接口IAnnotationTransformer。

    package com.sso;
    
    import java.lang.reflect.Constructor;
    import java.lang.reflect.Method;
    import org.testng.IRetryAnalyzer;
    import org.testng.annotations.ITestAnnotation;
    import org.testng.internal.annotations.IAnnotationTransformer;
    
    public class RetryListener implements IAnnotationTransformer {
    	@SuppressWarnings("rawtypes")
    	public void transform(ITestAnnotation annotation, Class testClass,
    			Constructor testConstructor, Method testMethod) {
    		IRetryAnalyzer retry = annotation.getRetryAnalyzer();
    		if (retry == null) {
    			annotation.setRetryAnalyzer(TestngRetry.class);
    		}
    	}
    	
        
    }
    

     然后,在testng.xml中添加listener,如:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
    <suite name="Suite">
      <test thread-count="3" name="Test">
            <classes>
              <class name="com.sso.ITTest" />
            </classes>
      </test> <!-- Test -->
      
         <listeners>
            <listener class-name="com.sso.RetryListener" />
        </listeners>
    </suite> <!-- Suite -->

    运行testng,得到结果:

    [RemoteTestNG] detected TestNG version 6.14.3
    
    ===============================================
    Suite
    Total tests run: 4, Failures: 1, Skips: 3
    ===============================================
    

     用例一共重复执行3次,加上第一次的执行,共执行4次。重复执行后,失败的用例被标记成了Skip。

    另外,除了在testng.xml添加listener,还有2种方式添加listener,其一是在通过@Listeners注释,如:

    import org.testng.annotations.Listeners;
    import org.testng.annotations.Test;
    
    import static org.testng.Assert.assertTrue;
    
    @Listeners(com.sso.RetryListener.class)
    public class ITTest {
      @Test
      public void f() {
    	  assertTrue(false);
    
      }
    }
    

     还有一种是通过@Test注释,如:

    import org.testng.annotations.Test;
    import static org.testng.Assert.assertTrue;
    
    public class ITTest {
      @Test(retryAnalyzer = com.sso.RetryListener.class)
      public void f() {
    	  assertTrue(false);
    
      }
    }
    

     三种添加listener的方式,使用其中一种即可,不要同时使用。

  • 相关阅读:
    (转载)教你在PHP中使用全局变量
    (转载)遍历memcache中已缓存的key
    (转载)PHP_Memcache函数详解
    PHP去除空白字符
    (转载)用PHP正则表达式清除字符串的空白
    (转载)PHP静态方法
    (转载)PHP 动态生成表格
    (转载)PHP strtotime函数详解
    (转载)URL与URI的区别
    ldap集成confluence
  • 原文地址:https://www.cnblogs.com/xbxblog/p/9843658.html
Copyright © 2011-2022 走看看