在单元测试框架的组成中,测试框架主要由测试用例,测试执行,测试套件,以及测试报告,当然还有其他的信息。
所谓测试套件就是测试用例的集合,我们也可以把测试套件理解成一个容器,在这个容器里面可以存储很多的测试用例,
那么本文章中,我们主要来看TestNG测试框架的测试套件,主要内容为创建测试套件,测试套件的参数化,以及测试套
件中针对测试用例依赖这部分的处理。
我们还是通过具体的案例来说明这部分的应用,测试类里面的测试方法源码如下:
package test.suite;
import org.testng.annotations.Test;
public class SampleTest
{
@Test
public void testMethodOne()
{
System.out.println("test method one");
}
@Test
public void testMethodTwo()
{
System.out.println("test method two");
}
}
定义测试套件以及加载测试套件和执行测试套件的源码为:
package test.suite;
import java.util.ArrayList;
import java.util.List;
import org.testng.TestNG;
import org.testng.xml.XmlSuite;
import org.testng.xml.XmlTest;
import org.testng.xml.XmlClass;
public class SampleCode
{
public void simpleTestNGTest()
{
List<XmlSuite> suites=new ArrayList<XmlSuite>();
List<XmlClass> classes=new ArrayList<XmlClass>();
//定义suite的名称
XmlSuite suite=new XmlSuite();
suite.setName("测试执行结果:");
//定义测试套件的测试
XmlTest test=new XmlTest(suite);
test.setName("simple config test");
//定义类的测试套件
XmlClass clz=new XmlClass("test.suite.SampleTest");
classes.add(clz);
test.setXmlClasses(classes);
suites.add(suite);
//加载测试套件并且运行
TestNG ng=new TestNG();
ng.setXmlSuites(suites);
ng.run();
}
public static void main(String[] args)
{
SampleCode objCode=new SampleCode();
objCode.simpleTestNGTest();
}
}
执行后,就会执行测试套件里面所有测试类的测试方法,执行后的结果信息如下:
[TestNG] Running:
Command line suite
test method one
test method two
===============================================
测试执行结果:
Total tests run: 2, Failures: 0, Skips: 0
===============================================
在上面的结果信息中,能够看到加载测试套件以及运行测试套件后的结果信息。针对TestNG测试框架里面的测试套件涉及到的API具体
我们详细的来看下,具体总结如下:
- XmlSuite:定义测试 XML 的简单 XML 套件标记
- XmlTest:描述testng xml的测试标记
- XmlPackage:描述testng xml中包的标记
- XmlClass:描述 testng xml中类的标记
- XmlGroups:描述testng xml中包的标记
- XmlInclude:描述testnt xml中包含的标记
- XmlDefine:描述testng xml中默认的标记
- XmlDependencies:描述testng xml中依赖的标记
在前面我们已经很详细的介绍了参数化的案例应用和实战,下来我们主要来看测试参数化在测试套件里面的应用和结合具体的案例来
看这部分的案例应用实战,测试类的源码为:
package test.suite;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
public class ParametrTest
{
@Parameters({"suite-param-one","test-param-one"})
@Test(description = "测试参数化的测试")
public void paramTestOne(String suiteParam,String testParam)
{
System.out.println("Test One:");
System.out.println("测试套件参数:"+suiteParam);
System.out.println("测试用例参数:"+testParam);
}
@Parameters({"suite-param-two","test-param-two"})
@Test
public void paramTestTwo(String suiteParam,String testParam)
{
System.out.println("Test Two:");
System.out.println("测试套件参数:"+suiteParam);
System.out.println("测试用例参数:"+testParam);
}
}
测试套件的代码为:
package test.suite;
import java.util.*;
import org.testng.TestNG;
import org.testng.xml.XmlClass;
import org.testng.xml.XmlSuite;
import org.testng.xml.XmlTest;
public class ParamSuite
{
public void suite()
{
List<XmlSuite> suites=new ArrayList<XmlSuite>();
List<XmlClass> classes=new ArrayList<XmlClass>();
Map<String, String> suiteParams=new HashMap<String, String>();
Map<String, String> testParams=new HashMap<String, String>();
XmlSuite suite=new XmlSuite();
suite.setName("测试执行结果:");
suiteParams.put("suite-param-one","Suite Param One");
suiteParams.put("suite-param-two","Suite Param Two");
suite.setParameters(suiteParams);
XmlTest test=new XmlTest(suite);
test.setName("测试执行结果:");
testParams.put("test-param-one", "Test Param One");
testParams.put("test-param-two", "Test Param Two");
test.setParameters(testParams);
XmlClass clz=new XmlClass("test.suite.ParametrTest");
classes.add(clz);
test.setXmlClasses(classes);
suites.add(suite);
TestNG ng=new TestNG();
ng.setXmlSuites(suites);
ng.run();
}
public static void main(String[] args)
{
ParamSuite testSuite=new ParamSuite();
testSuite.suite();
}
}
执行后,就会依据测试套件显示执行的结果进行赋值,执行后的结果信息为:
[TestNG] Running:
Command line suite
Test One:
测试套件参数:Suite Param One
测试用例参数:Test Param One
Test Two:
测试套件参数:Suite Param Two
测试用例参数:Test Param Two
===============================================
测试执行结果:
Total tests run: 2, Failures: 0, Skips: 0
===============================================
在使用TestNG测试框架应用中,我们经常会遇到测试用例与测试用例之间存在依赖性的关系,这种这种情况其实在测试中是非常常见的,下面
我们就根据实际的案例来演示依赖性的测试在测试套件中的应用,测试类的源码为:
package test.suite;
import org.testng.annotations.Test;
public class DependencyTest
{
@Test(groups = {"group-one"})
public void testMethodOne()
{
System.out.println("this is the method one");
}
@Test(groups = {"group-one"})
public void testMethodTwo()
{
System.out.println("this is the method two");
}
@Test(groups = {"group-one"})
public void testMethodThree()
{
System.out.println("this is the method three");
}
@Test(groups = {"group-two"})
public void testMethodFour()
{
System.out.println("this is the method four ");
}
@Test(groups = {"group-two"})
public void testMethodFive()
{
System.out.println("this is the method five");
}
}
测试套件的代码为:
package test.suite;
import java.util.*;
import org.testng.xml.*;
import org.testng.*;
public class DependCode
{
public void suite()
{
List<XmlSuite> suites=new ArrayList<XmlSuite>();
List<XmlClass> classes=new ArrayList<XmlClass>();
XmlSuite suite=new XmlSuite();
suite.setName("测试执行结果:");
XmlTest test=new XmlTest(suite);
test.setName("依赖性测试");
XmlClass clz=new XmlClass("test.suite.DependencyTest");
classes.add(clz);
test.setXmlClasses(classes);
//处理依赖性的关系
test.addXmlDependencyGroup("group-one","group-two");
suites.add(suite);
TestNG tng = new TestNG();
tng.setXmlSuites(suites);
tng.run();
}
public static void main(String[] args)
{
DependCode objCode=new DependCode();
objCode.suite();
}
}
加载测试套件中,我们依赖的组主要是group-one和group-two,执行后的结果信息为:
[TestNG] Running:
Command line suite
this is the method five
this is the method four
this is the method one
this is the method three
this is the method two
===============================================
测试执行结果:
Total tests run: 5, Failures: 0, Skips: 0
===============================================