利器丨有了它我再也不用担心各种测试啦!
2017-07-12 15:10
176 查看
是时候告别Junit了!
一、 青出于蓝而胜于蓝
TestNG是一款脱胎于JUnit和NUnit的测试框架,借鉴了后者的设计思想,在此基础上又引入了新的功能,比如分组测试、依赖测试、多线程测试等。
TestNG除了支持单元测试外,还可以用来做集成测试、功能测试、端到端测试等等,而junit只是用来单元测试。
二、 TestNG优于JUnit的设计详解
1.分组测试
分组测试可以很方便让你去指定你需要测试的某一批次的测试用例,我们可以使用@Test注解里的groups属性为某个测试方法指定一个或多个group,示例代码如下
public class TestExample {
@Test(groups = "group1")
public void test1(){
Assert.assertEquals(1+1,2);
}
@Test(groups = "group1")
public void test2(){
Assert.assertEquals(1+2,3);
}
@Test(groups = "group2")
public void test3(){
Assert.assertEquals(1+3,4);
}
}
另外我们还需要建立一个testng.xml文件,去指定要运行的分组测试。
<!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd" >
<suite name="My test suite">
<test name="testing">
<groups>
<run>
<include name="group1"/>
</run>
</groups>
<classes>
<class name="com.example.Boot.test.TestExample" />
</classes>
</test>
</suite>
2.参数化测试
所谓参数化测试就是为测试用例提供参数数据,示例如下:
@Test(dataProvider = "data")
public void hello(String name){
Assert.assertEquals(name,"world");
}
@DataProvider(name = "data")
public Object[][] data(){
return new Object[][]{{"world"}};
}
3.依赖测试
当两个测试用例之间存在依赖关系,TestNG支持你使用注解l指定依赖关系。
@Test
public void insert(){
System.out.println("insert data");
}
@Test(dependsOnMethods = "insert")
public void query(){
System.out.println("query data");
}
上面的代码,如果query方法依赖的insert方法执行失败了,则query方法则将被跳过。如果insert失败了,还想要执行query方法的话,则可以在@Test中添加
alwaysRun = true的属性
需要说明的是这个用法不能用于单元测试,单元测试要求用例之间是隔离的,这也是为什么JUnit没有提供这个功能的原因。在集成测试等场景中需要的话则可以使用。
4.多线程测试
并发测试一直是测试的难点,TestNG提供了一套多线程执行测试用例的的方案,给并发测试带来了很大的方便。
@Test(threadPoolSize = 5,invocationCount = 30,timeOut = 100)
public void multiThreadTest(){
Long id = Thread.currentThread().getId();
System.out.println("thread id: " + id);
}
threadPoolSize 指线程数量,invocationCount表示测试用例调用的次数,timeOut表示超时阀值
5.按优先级顺序测试
@Test 提供了一个很有用的priority属性来指定测试用例执行的优先级,数值越低,优先级越高。这个在测试流程的时候很有用!
public class PriorityTest {
@Test(priority = 1)
public void priority1(){
System.out.println("登录");
}
@Test(priority = 2)
public void priority2(){
System.out.println("首页");
}
@Test(priority = 0)
public void priority0(){
System.out.println("注册");
}
}
6.更丰富的注解
三、拥抱TestNG
从上面的介绍可以看到,TestNG相比JUnit提供了更全面的功能,更适用于互联网环境下的各个测试场景。而JUnit的定位仅仅是单元测试! 因此建议TestNG 作为 Java 项目的主要单元测试框架!
51Testing:人气最旺的软件测试技术门户,提供软件测试社区交流、软件测试博客、人才服务、测试沙龙、测试杂志、测试资料下载等全方位信息服务,是国内最专业的软件测试就业培训、企业服务供应商。
End
一、 青出于蓝而胜于蓝
TestNG是一款脱胎于JUnit和NUnit的测试框架,借鉴了后者的设计思想,在此基础上又引入了新的功能,比如分组测试、依赖测试、多线程测试等。
TestNG除了支持单元测试外,还可以用来做集成测试、功能测试、端到端测试等等,而junit只是用来单元测试。
二、 TestNG优于JUnit的设计详解
1.分组测试
分组测试可以很方便让你去指定你需要测试的某一批次的测试用例,我们可以使用@Test注解里的groups属性为某个测试方法指定一个或多个group,示例代码如下
public class TestExample {
@Test(groups = "group1")
public void test1(){
Assert.assertEquals(1+1,2);
}
@Test(groups = "group1")
public void test2(){
Assert.assertEquals(1+2,3);
}
@Test(groups = "group2")
public void test3(){
Assert.assertEquals(1+3,4);
}
}
另外我们还需要建立一个testng.xml文件,去指定要运行的分组测试。
<!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd" >
<suite name="My test suite">
<test name="testing">
<groups>
<run>
<include name="group1"/>
</run>
</groups>
<classes>
<class name="com.example.Boot.test.TestExample" />
</classes>
</test>
</suite>
2.参数化测试
所谓参数化测试就是为测试用例提供参数数据,示例如下:
@Test(dataProvider = "data")
public void hello(String name){
Assert.assertEquals(name,"world");
}
@DataProvider(name = "data")
public Object[][] data(){
return new Object[][]{{"world"}};
}
3.依赖测试
当两个测试用例之间存在依赖关系,TestNG支持你使用注解l指定依赖关系。
@Test
public void insert(){
System.out.println("insert data");
}
@Test(dependsOnMethods = "insert")
public void query(){
System.out.println("query data");
}
上面的代码,如果query方法依赖的insert方法执行失败了,则query方法则将被跳过。如果insert失败了,还想要执行query方法的话,则可以在@Test中添加
alwaysRun = true的属性
需要说明的是这个用法不能用于单元测试,单元测试要求用例之间是隔离的,这也是为什么JUnit没有提供这个功能的原因。在集成测试等场景中需要的话则可以使用。
4.多线程测试
并发测试一直是测试的难点,TestNG提供了一套多线程执行测试用例的的方案,给并发测试带来了很大的方便。
@Test(threadPoolSize = 5,invocationCount = 30,timeOut = 100)
public void multiThreadTest(){
Long id = Thread.currentThread().getId();
System.out.println("thread id: " + id);
}
threadPoolSize 指线程数量,invocationCount表示测试用例调用的次数,timeOut表示超时阀值
5.按优先级顺序测试
@Test 提供了一个很有用的priority属性来指定测试用例执行的优先级,数值越低,优先级越高。这个在测试流程的时候很有用!
public class PriorityTest {
@Test(priority = 1)
public void priority1(){
System.out.println("登录");
}
@Test(priority = 2)
public void priority2(){
System.out.println("首页");
}
@Test(priority = 0)
public void priority0(){
System.out.println("注册");
}
}
6.更丰富的注解
三、拥抱TestNG
从上面的介绍可以看到,TestNG相比JUnit提供了更全面的功能,更适用于互联网环境下的各个测试场景。而JUnit的定位仅仅是单元测试! 因此建议TestNG 作为 Java 项目的主要单元测试框架!
51Testing:人气最旺的软件测试技术门户,提供软件测试社区交流、软件测试博客、人才服务、测试沙龙、测试杂志、测试资料下载等全方位信息服务,是国内最专业的软件测试就业培训、企业服务供应商。
End
相关文章推荐
- [转帖] 了解各种浏览器真正的核心,测试兼容时就不用开这么多浏览器
- 仿ios各种对话框实现,妈妈再也不用担心了
- 致初入模板创作:了解各种浏览器真正的核心,测试模板兼容时就不用开这么多浏览器
- 各种测试用例简要模板
- JavaScript中的document.referrer在各种浏览器测试结果
- 测试用activex启动以及服务管理方面遇到的各种问题总结
- 【共享打印机遇到的各种问题】局域网内连接共享打印机—如何不用打印机路由,在多台电脑使用打印机
- [数据库测试]强烈推荐一个python ODBC数据源插件,可支持Oracle,Db2,Mysql,Sql-server以及各种数据库版本,附例子和测试程序
- 妈妈再也不用担心我的博客访问量了(一个可以刷博客访问量的小程序java)
- RobotFramework测试问题二:各种元素不能定位问题
- 不用写代码,也能做好接口测试
- IIS的各种身份验证详细测试
- 基于IDS的各种软件和硬件测试方法
- sql各种连接笛卡尔积,inner join,left join,right join,full join等测试与区别
- IIS的各种身份验证详细测试
- android 百分比布局(percentLayout),妈妈再也不用担心适配问题了
- 自从有了BI商业智能系统,再也不用担心我的作图了!!!(图文)
- 史上最人性化的U型枕,再也不用担心睡不好了!
- 深蓝词库转换-各种输入法词库转换的利器
- SQLPROMPT5.3对各种加密对象的解密测试