实验:基于TestNG实现代码级接口测试
作者:reader1   类别:Web前端    日期:2018-04-17 16:13:19    阅读:906 次   消耗积分:0 分




实验简介


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 version="1.0" encoding="UTF-8"?>

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<suite name="Suite-1">

    <test name="Test-1">

        <classes>

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

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

        </classes>

    </test>

</suite>


在此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>

版权所有,转载本站文章请注明出处:蜗牛笔记, http://www.woniunote.com/article/50
${comment['nickname']}   ${comment['createtime']}
  
       
${comment.content}
${reply.nickname} 回复 ${comment.nickname}    ${reply.createtime}
     
  
回复内容:${reply.content}