您好,欢迎来到外链网!
当前位置:外链网 » 站长资讯 » 专业问答 » 文章详细 订阅RssFeed

testng测试框架搭建,testng集成测试

来源:互联网 浏览:41次 时间:2023-04-08

part 1、认识单元测试框架TestNG

Java语言的单元测试框架
. JUnit4,要求JDK1.5及以上版本
. TestNG,同理
单元测试框架的作用
. 使测试代码和产品代码分离
. 简化测试代码的编写
. 灵活组织单元测试用例
. 方便与CI系统集成

TestNG的主要特点:
注解
1. TestNG使用Java和面向对象的功能
2. 支持综合类测试(单元测试、集成测试)
3. 灵活的运行时配置(testng.xml)
4. 支持依赖测试方法,并行测试,负载测试,局部故障
5. 支持多线程测试
6. 支持数据驱动的测试
7. 可扩展

TestNG使用基本步骤
1. 编写测试代码
2. 编写配置文件,testng.xml
3. 运行测试程序

TestNG注解:

TestNG中测试的级别
.Suite:最上层的元素
.Test:次一级的元素
.Class:测试类
.Method:测试类中的方法
上面的层次是包含关系,即:Suite可以包含多个Test,Test可以包含多个 Class
Method作用:排除某些测试用例;安排测试用例的执行顺序

import org.testng.annotations.AfterMethod; import org.testng.annotations.Test; import org.testng.annotations.BeforeMethod; import org.testng.Assert;public class TestNGLearn1 {@BeforeClasspublic void beforeClass() { System.out.println("this is before class");}@Testpublic void TestNgLearn() {System.out.println("this is TestNG test case"); }@AfterClasspublic void afterClass() { System.out.println("this is after class");} }

Testng.xml

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="Suite" parallel="none"><test name="Test"><classes><class name="TestNGLearn1"/> <methods> <include name="TestNgLearn" /> </methods></classes> </test> <!-- Test --> </suite> <!-- Suite -->

TestNG运用实例:

运行单元测试用例
. 在Elipse中运行
1. “Run AS Testng Test”运行java测试类
2. “Run AS Testng Test”运行testng.xml文件
. 在命令行中运行
Java –cp …… org.testng.TestNG testng.xml


TestNG单元测试实例:

项目工程结构

业务逻辑代码

package Demo;public class compute {public int add(int x, int y) {return (x+y);}}

测试用例代码

package UnitTest;import Demo.compute;import org.testng.annotations.AfterClass; import org.testng.annotations.AfterSuite; import org.testng.annotations.AfterTest; import org.testng.annotations.BeforeClass; import org.testng.annotations.BeforeSuite; import org.testng.annotations.BeforeTest; import org.testng.annotations.Test; import org.testng.Assert;public class TestCompute { @BeforeSuitepublic void setup() { //to do something before all testcase } @AfterSuitepublic void tearDown() {//to do something after all testcase }

@BeforeClass

public void doBeforeClass() { //to do something }@AfterClasspublic void doAfterClass() { //to do something }@Testpublic void testAdd() {compute cp = new compute(); int result;result = cp.add(2, 3);Assert.assertEquals(5,result);} }

TestNG常用功能:

一、按顺序执行用例:preserve-order=”true“

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > <suite name="Suite1"><test name="test12" preserve-order="true"><classes><class name="TankLearn2.Learn.TestNGLearn1"><methods><include name="TestNgLearn3" /> <include name="TestNgLearn1" /> <include name="TestNgLearn2" /> </methods> </class></classes> </test></suite>

二、异常测试:通过@Test(expectedExceptions) 来判断期待的异常, 并且判断Error Message

package TankLearn2.Learn;import org.testng.annotations.Test;public class ExceptionTest { @Test(expectedExceptions = IllegalArgumentException.class, expectedExceptionsMessageRegExp="NullPoint")public void testException(){throw new IllegalArgumentException("NullPoint");}}

三、测试用例分组:可以按组来执行测试用例

package TankLearn2.Learn;import org.testng.annotations.Test; public class GroupTest {@Test(groups = {"systemtest"}) public void testLogin(){System.out.println("this is test login"); }@Test(groups = {"functiontest"}) public void testOpenPage(){System.out.println("this is test Open Page"); }} <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" ><suite name="Suite1"><test name="test1"><groups><run><include name="functiontest" /></run></groups></test></suite>

四、参数化测试:给测试用例传递参数

4.1使用testng.xml传递参数,此处注意参数的使用范围

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" ><suite name="Suite1"> <parameter name="test1" value="Tank" /> <parameter name="test2" value="Xiao" /> <test name="test12"><classes> <class name="TankLearn2.Learn.ParameterizedTest1" /> </classes></test> </suite> package TankLearn2.Learn;import org.testng.annotations.Parameters;import org.testng.annotations.Test;public class ParameterizedTest1 {@Test@Parameters("test1")public void ParaTest(String test1){System.out.println("This is " + test1);}}

4.2数据驱动的测试:为测试用例提供数据的不是配置文件参数,而是一段自己编写的程序,使用 @DataProvider注解,并且必须返回Object[][]或Iterator[]

public class InterfaceTest {LogFile lf = new LogFile();@DataProvider(name = "TestCases")public Object[][] getTestCases() {int len,i,j;String tcfile,path;TestCaseXML tcx;List<TestCase> tcList = new ArrayList<TestCase>();List<TestCase> tmpList = new ArrayList<TestCase>();PublicVariable.init();len = PublicVariable.testcaseFiles.size();for (i = 0;i < len;i ++) {//get TestCasestcfile = PublicVariable.testcaseFiles.get(i);path = System.getProperty("user.dir") + "/" + PublicVariable.testcase_dir + "/" + tcfile;tcx = new TestCaseXML(path);tmpList = tcx.getTestCases();if (tmpList != null) {tcList.addAll(tmpList);} }Object[][] tcs = new Object[tcList.size()][];for(j = 0;j < tcList.size();j++){tcs[j] = new Object[]{tcList.get(j)};}return tcs;} @Test(dataProvider = "TestCases")public void testHTTPInterface(TestCase tc) {String result,message,response,status;String enter = "\r\n";try {Thread.sleep(PublicVariable.sleepTime);//delay 5s cause of interface system} catch (Exception e) {e.printStackTrace();}System.out.print("Testing " + tc.getInterfaceName() + " ...... ");TestCaseHandler tch = new TestCaseHandler(tc);message = tc.getTestCaseInfoString();response = tch.runTestCase();result = "ResponseContent = " + response + enter;if (tch.assertResults(response)) {System.out.println("Pass");status = "PASS";} else {System.out.println("Fail");status = "FAIL";lf.addFailContent(status + enter + message + result);lf.printSeperatorLineFailContent("=");}

五、依赖测试:如果在执行某个用例之前必须执行其它用例,dependsOnMethods

package TankLearn2.Learn;import org.testng.annotations.Test; public class DependsTest {@Testpublic void setupEnv(){System.out.println("this is setup Env"); }@Test(dependsOnMethods = {"setupEnv"}) public void testMessage(){System.out.println("this is test message"); }}

六、忽略测试:不执行该测试用例,enable=false

package TankLearn2.Learn;import org.testng.annotations.Test;public class TesgNGIgnore {@Test(enabled = false)public void testIgnore(){System.out.println("This test case will ignore");}}