Testng中注释简介

注释

@Before和@After 注释

这两个就比较多,一般用于在测试构件上。关于测试构件以后详细介绍,测试构件一般有测试之前的操作和测试运行之后的清除数据的操作

Before分类有@BeforeSuite,@BeforeTest, @BeforeGroups,@BeforeClass,@BeforeMethod
After分类有@AfterSuite,@ AfterTest, @AfterGroups,@ AfterClass,@ AfterMethod

每个注释的范围不同而已

举例:

package com.java.learn;  
  
import org.testng.annotations.AfterClass;  
import org.testng.annotations.BeforeClass;  
import org.testng.annotations.Test;  
  
  
/** 
 * create by Anthony on 2017/10/29 
 */  
public class TestNG_Demo1 {  
  
    @BeforeClass  
    public void setUp(){  
        System.out.println("启动测试的前提条件准备,一般放这个方法中");  
    }  
  
    @AfterClass  
    public void tearDown(){  
        System.out.println("测试运行结束后的步骤,一般是恢复环境到测试开始之前的状态");  
    }  
    @Test  //执行测试
    public void test1(){  
  
        System.out.println("Hello");  
    }  
  
}  

@DataProvider注释

标记一个方法是用来给其他测试方法提供数据的方法。要求该方法必须返回是object[][]

@Factory

标记这个方法是一个工厂,方法必须返回的是一个对象

@Listeners

在一个测试方法上定义一个监听。例如Selenium自动化测试中需要用到这个事件监听功能,方便我们输出日志

@Parameters

描述了如何给一个测试方法传提参数

例子:

package com.java.learn;  
  
import com.sun.tracing.ProviderName;  
import org.testng.annotations.*;  
  
  
/** 
 * create by Anthony on 2017/10/29 
 */  
public class TestNG_Demo1 {  
  
    @Test  
    @Parameters({"Browser", "Server"})  
    public void test1(String browser, String server){  
        System.out.println("Hello");  
        System.out.println("这次启动浏览器是: "+browser+" 测试服务器地址是: "+server);  
    }  
}  

项目根目录下的testng.xml内容如下

<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">  
<suite name="Default Suite">  
    <parameter name="Browser" value="Chrome" />  
    <parameter name="Server" value="https://www.baidu.com" />  
    <test name="Java_Learn">  
      <classes>  
          <class name="com.java.learn.TestNG_Demo1"/>  
         <!-- 添加不同测试类文件 -->  
  
      </classes>  
    </test> <!-- Java_Learn -->  
</suite> <!-- Default Suite --> 

@Test

在@Test下有很多选项可以设置,例如用例之间的依赖关系等

@Test注释下的属性

属性timeOut

字面意思就是超时判断,如果哪个测试方法需要监听执行的时间,那么就可以考虑采用timeOut属性,监控时间的功能。

例如,实际的接口测试中,加入登录接口时间不能超过3秒中。下面来看看如何监控这个方法如果运行时间超过3秒就抛出异常

package com.java.learn;  
  
import org.testng.annotations.Test;  
  
/** 
 * create by Anthony on 2017/10/31 
 */  
public class TimeoutTest {  
  
    @Test(timeOut = 3000)  
    public void loginTest(){  
        try{  
            Thread.sleep(3100);  
        }catch (InterruptedException e){  
            System.out.println(e.toString());  
        }  
  
    }  
}  

运行下这个Testng测试用例,看是否抛出异常

image.png

更改下Thread.sleep(2800);再次运行,看看效果

image.png

属性enabled

在Testng中,如果方法前面添加了@Test注释,然后没有其他的属性,那么默认这个用例会被自动运行。在@Test注释中提供了一个enabled的属性,可以临时去修改该条用例不被执行。Enable属性有两个值true和false

不让test2用例执行

package com.java.learn;  
  
import org.testng.annotations.Test;  
  
/** 
 * create by Anthony on 2017/10/31 
 */  
public class TestNG_Demo2 {  
  
    @Test  
    public void test1(){  
        System.out.println("test1");  
    }  
  
    @Test(enabled=false)  
    public void test2(){  
        System.out.println("test2");  
    }  
  
    @Test  
    public void test3(){  
        System.out.println("test3");  
    }  
  
    @Test  
    public void test4(){  
        System.out.println("test3");  
    }  
}  

属性priority

一个类文件下的测试用例按照我们设想的顺序去执行,而不是默认按照方法名的字母排序去执行

@Test注释中有一个属性,叫priority支持设置用例的优先级。如果不带这个属性,默认priority是等于0,而且priority值越小,优先级越高

例子:设置的优先顺序是test4->test3->test1->test2

package com.java.learn;  
  
import org.testng.annotations.Test;  
  
/** 
 * create by Anthony on 2017/10/31 
 */  
public class TestNG_Demo2 {  
  
    @Test(priority = 2)  
    public void test1(){  
        System.out.println("test1");  
    }  
  
    @Test(priority = 4)  
    public void test2(){  
        System.out.println("test2");  
    }  
  
    @Test(priority = 1)  
    public void test3(){  
        System.out.println("test3");  
    }  
  
    @Test  
    public void test4(){  
        System.out.println("test4");  
    }  
}  

属性invocationCount和invocationTimeOut

属性和timOut差不多,只不过是监控运行多次同一个用例的总耗时是否达到设置的最大值。

  • invocationCount

字面意思就是调用的次数统计,这个属性是的英文解释是:The number of times this method should be invoked. 就是这个测试用例被调用执行的次数。说明这个属性可以设置一个用例可以重复跑多次。

  • invocationTimeOut

字面意思是调用的超时,看看英文的解释:The maximum number of milliseconds this test should take for thecumulated time of all the invocationcounts. This attribute will be ignored ifinvocationCount is not specified.这句话,说了两个意思,第一个是设置一个最大的毫秒数来计算执行多次后总共耗时多少,耗时值不能超过设置的最大毫秒数。第二个意思是说,这个属性是和invocationCount结合使用才会工作

代码举例:设置了执行次数数5次,5次执行总共耗时不能超过5100毫秒,否则抛出中断异常

package com.java.learn;  
  
import org.testng.annotations.Test;  
  
/** 
 * create by Anthony on 2017/10/31 
 */  
public class TimeoutTest {  
  
    @Test(invocationCount = 5, invocationTimeOut = 5100)  
    public void loginTest() throws InterruptedException{  
  
        Thread.sleep(1000);  
        System.out.println("login test");  
  
    }  
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 137,134评论 19 139
  • 感谢原作者的奉献,原作者博客地址:http://blog.csdn.net/zhu_ai_xin_520/arti...
    狼孩阅读 14,347评论 1 35
  • 小小的人啊, 短短数月,你已经有了自己的想法 昨晚我和爸爸去吃饭 你竟然要用手去抓火锅里冒出的烟气 多想告诉你, ...
    阳花木易为春阅读 215评论 0 0
  • 童心,在我眼里就是单纯的。即使你客观理智,当对某一些方面有纯粹的心,都可以被称为童心未泯。 世界是不存在的,社会是...
    李大仙儿的精神世界阅读 493评论 0 0

友情链接更多精彩内容