实验:基于TestNG实现代码级接口测试
作者:强官涛   类型:测试开发    类别:实验   日期:2018-04-17    阅读:1947 次   消耗积分:3 分




实验简介


TestNG是Java中的一个测试框架, 类似于JUnit 和NUnit,功能都差不多,TestNG也是以JUnit和NUnit的一些特性作为参考开发而成的,只是功能稍微强大一些,使用也更方便。

测试人员一般用TestNG来写自动化测试。开发人员一般用JUnit写单元测试。

但是这并不是必然的,无论选用哪种框架,并不决定我们的代码级测试开发工作是否做得很好。




实验目的



1.掌握TestNG的使用以及与JUnit的区别。


2.为后续学习其它基于上述两种框架的测试技术打下基础。




实验流程



1. 安装配置TestNG。


(1) 通过Eclipse的菜单Help -> Install New Software:

输入网址:http://beust.com/eclipse安装即可,视网络情况可能会花较长时间。


20180417_155531_789.jpg


(2) 直接下载文件并进行离线安装:


直接去网址http://dl.bintray.com/testng-team/testng-eclipse-release/zipped/下载离线安装包。将下载的文件解压,将目录features和plugins下面的文件复制到Eclipse目录下相对应的文件夹下,重启Eclipse即可。


2. 验证TestNG安装。


在File -> New -> Other中,我们能够看到可以创建TestNG class的文件,则说明安装成功。


20180417_155545_751.jpg


3. 导入TestNG库文件到当前项目。


进入菜单Project -> Properties -> Java Build Path -> Libraries,选择 Add Library,浏览到TestNG类库,点击确认即可将TestNG需要用到的jar包导入到当前项目中,这一操作跟JUnit类似。


20180417_155552_931.jpg


4. 完成对isNumber和splitString的简单测试。


先实现测试代码和断言,同样使用@Test为每个测试用例进行注解:

package com.woniuxy.testng;

import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
import org.testng.Assert;
import com.woniuxy.compare.StringHandle;

public class StringHandleTest {

@BeforeTest
public void init() {
System.out.println("测试用例正在执行...");
}

@Test
public void isNumber() {
StringHandle stringHandle = new StringHandle();
String source = "123.45";
boolean actual = stringHandle.isNumber(source);
Assert.assertTrue(actual);
}

@Test
public void splitString() {
StringHandle stringHandle = new StringHandle();
String source = "333,111,222,666";
Integer[] expect = {333, 111, 222, 666};
Integer[] actual = stringHandle.splitString(source, ",");
Assert.assertEquals(expect, actual);
}

@AfterTest
public void end() {
System.out.println("测试用例执行完成...");
}
}



5. 使用Eclipse方式运行。


在包com.woniuxy.testng下,右键选择上述测试类:“StringHandleTest”,选择“Run As” -> TestNG Test”的方式运行。运行结果如下:


20180417_155610_663.jpg


同样,我们在另外一个视图:Results of running class …中,也可以看到详细信息,还可以用浏览器打开HTML格式的报表:


20180417_155626_179.jpg


6. 使用XML方式运行。


除了使用Run As的方式执行测试以外,TestNG提供了另外一种更加灵活的执行手段:通过XML文件执行。我们可以在当然包下面创建一个XML文件,命名为:ArrayCompareTestSuite.xml,格式如下:



在此XML文件上,点击右键,Run As -> TestNG Suite,即可开始运行。注意一下,上述XML中,我们其实运行了两个测试类,一个叫ArrayHandleTest,一个叫StringHandleTest,我们可以通过设定两个测试类的顺序来决定先运行哪个测试。这也是TestNG非常方便的地方。


7. 为ArrayHandle类快速添加测试类。


除了直接创建一个普通的Java类文件来创建TestNG的测试用例以外,我们还可以有一种相对快速的创建测试类的办法。


(1) 选中要进行测试的被测类,比如此处我们选择com.woniuxy.compare包下的ArrayHandle.java,右键,选择New -> Other -> TestNG –> TestNG Class,下一步,选择要添加测试用例的方法:


20180417_155638_676.jpg


(2) 输入相应的包信息,注意路径和测试代码的目标包,写错了会重复创建包,没有必要:


20180417_155646_998.jpg


(3) 自动生成部分测试代码:

package com.woniuxy.testng;

import org.testng.annotations.Test;

public class ArrayHandleTest {

@Test
public void arrayCompare() {
throw new RuntimeException("Test not implemented");
}

@Test
public void arraySort() {
throw new RuntimeException("Test not implemented");
}
}



当然,这样的代码只是一个框架而已,没有实际用途。



(4) 完善测试驱动程序:

package com.woniuxy.testng;

import org.testng.Assert;
import org.testng.annotations.Test;
import com.woniuxy.compare.ArrayHandle;

public class ArrayHandleTest {

ArrayHandle ah = new ArrayHandle();

@Test
public void arrayCompare() {
Integer[] source = {22, 33, 55, 77, 11, 99, 66};
Integer[] expect = {11, 22, 33, 55, 66, 77, 99};
Assert.assertFalse(ah.arrayCompare(source, expect));
}

@Test
public void arraySort() {
Integer[] source = {22, 33, 55, 77, 11, 99, 66};
Integer[] expect = {11, 22, 33, 55, 66, 77, 99};
Integer[] actual = ah.arraySort(source);
Assert.assertEquals(expect, actual);
}
}



8. TestNG按顺序执行Case。


针对一个测试类中,有多个测试用例的情况,我们也可以为每一个测试方法单独指定运行顺序。就像执行多个测试类一样,我们通过配置XML文件的顺序来进行:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Suite-2">
    <test name="Test-2" preserve-order="true">
        <classes>
            <class name="com.woniuxy.testng.ArrayHandleTest">
                <methods>
                    <include name="arraySort" />
                    <include name="arrayCompare" />
                </methods>
            </class>
        </classes>
    </test>
</suite>



9. TestNG组测试。


在TestNG中,我们还可以把测试用例进行分组,比如本次测试我们只测试ArrayHandle的arraySort和StringHandle的isNumber两个方法,那么这个时候,我们通过把这两条测试用例指定为同一组,即可实现交叉执行。


(1) 先在ArrayHandleTest类中的arraySort的@Test注解后面加上 @Test(groups = {"group1"}):

@Test(groups = {"group1"})
public void arraySort() {
Integer[] source = {22, 33, 55, 77, 11, 99, 66};
Integer[] expect = {11, 22, 33, 55, 66, 77, 99};
Integer[] actual = ah.arraySort(source);
Assert.assertEquals(expect, actual);
}



(2) 再在StringHandleTest类中的isNumber的注解上加上:@Test(groups = {"group1","group2"}),其实大家可以看到,groups后面跟的就是一个字符串数组,基于此来判断哪些用例应该被执行。一个测试用例是可以属于多个组的。


(3) 编写XML执行文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Suite-1">
<test name="Test-1">
<groups>
<run>
<include name="group1" />
</run>
</groups>

<classes>
<class name="com.woniuxy.testng.ArrayHandleTest" />
            <class name="com.woniuxy.testng.StringHandleTest" />
</classes>

<!-- 也可以通过指定包名来快速完成,但是不要与类名同时指定
<packages>
<package name="com.woniuxy.testng"></package>
</packages>
        -->
</test>
</suite>



这样,执行该XML文件,即只会执行groups = {“group1”}的测试用例。需要注意的是,如果分组位于多个类中,我们需要在XML中一起指定完整。


10. TestNG的注解。


版权所有,转载本站文章请注明出处:蜗牛学院在线课堂, http://www.woniuxy.com/note/122
上一篇: 访谈:“水产养殖”转“测试开发”,这姑娘已成功入职,起薪7.3K
下一篇: 资讯:#新班动态#重庆校区7月9日,我们不见不散
提示:登录后添加有效评论可享受积分哦!