测试人员一般用TestNG来写自动化测试,开发人员一般用JUnit写单元测试
单元测试关注代码的实现逻辑,例如一个if 分支或一个for循环或者某个功能函数
主要问题
- 项目=src+库
- unable to launch:缺少main()方法
-
cannot be resolved to a type:没有导入相应的库
- 导入库:项目右键 -> Build Path -> Configure Build Path -> Libraries -> Add Library ->XXX-> apply and close
安装使用
- JDK,Eclipse--在eclipse中安装testNG--新建project-新建other(testaNG class)
注解[email protected]
-
对程序元素(类,方法,变量等)进行说明,提供给框架使用
-
launch-发动;Suite-一套;Test-测试方法;Groups-组;Provider-供应者
-
分类
- Suite-在某个测试套件测试执行之前/之后执行
- Class-在某个类的所有方法执行之前/之后
- Test-在某个测试的所有测试方法运行之前/之后
- groups--某个组的所有测试方法执行之前/之后
- Method--在某个测试方法之前/之后--------执行完测试用例后要重置数据才能执行第二条用例时可用之前
- @test--标志一个类或者方法作为测试的一部分
- @parameters--介绍如何将参数传递给@Test方法
- @listeners--定义一个测试类的监听器
- @dateprovider--提供数据的一个测试方法,注解的方法必须返回一个Object[] []
基本步骤:
- 编写测试的业务逻辑代码,并在相应代码中插入TestNG的annotation。
- 将测试信息配置到testng.xml文件中
- 运行TestNG,测试报告位于 "test-output" 目录下
suite :代表一个测试套件,它可以包含一个或多个测试
test:代表一个测试,可以包含一个或多个TestNG测试类
class:代表一个类,至少一个TestNG的注解,也可以包含一个或多个测试方法
groups:用来表明测试用例的分组,有利于针对一类的测试用例进行专门的测试
如何执行测试
-
直接执行--Run As ->TestNG Test
-
textng.xml
-
- 在同包下新建xml文件,填入一些标签,其中class name=测试的包名.类名;
- 按顺序执行:test标签中preserve-order="true",method标签中的内容按顺序执行
- 12
-
异常测试:期望某些代码抛出异常,通过@Test(expectedExceptions=...)添加
忽略测试:用例没写好,修改注解为@Test(enabled=false),@Test不能改
超时测试:常用于性能测试,超过指定的毫秒数就标记为失败
分组测试:xml中使用<group>标签;class中是通过@test(groups={"group1","其它名字"})分组
1 <?xml version="1.0" encoding="UTF-8"?> 2 <suite name="Suite" parallel="false"> 3 <test name="Test"> 4 <groups> 5 <incloud name="组名1"></incloud>//先运行组名1,再运行group2 6 <incloud name="group2"></incloud> 7 </groups> 8 <classes> 9 <class name="包名.类名"/> 10 <class name="com.demo.test.testng.TestCase1"/> 11 </classes> 12 </test> 13 </suite>
<suite>标签是testng.xml的根标记,描述了一个测试套件,可以有几个<test>
verbose:日志描述级别,10最详细
依赖测试:以特定顺序调用测试用例中的方法,或者希望在方法之间共享一些数据和状态;添加注解@Test(dependsOnMethods={"依赖的方法名"});先运行被依赖的。
参数化测试:使用不同的值一次又一次地运行相同的测试
textng.xml传递参数:先在class中多添加个注解@Parameters({"参数1", "参数2"}) //使代码和测试数据分离,方便维护
再在 <parameter name="参数1" value="1011111" /> 赋值,运行xml
@DataProvider提供比较复杂的参数:
返回的必然是Object[][];
传参的类型,个数必须要一致
@DataProvider(name = "参数")
public Object[][] provideData() {
return new Object[][] { { 10, 20 }, { 100, 110 }, { 200, 210 } };
}
@Test(dataProvider = "参数")
public void TestNgLearn1(int param1, int param2) {
System.out.println("this is TestNG test case1, and param1 is:"+param1+"; param2 is:"+param2);
Assert.assertFalse(false);
}
属性介绍
- name:必须有,体现在报告中
- verbose:报告的详细程度,从0开始到10,默认是1
- parallel:指代运行方式,默认是串行-单线程
- 并行方式: