TestNG入门_webDriver+java(二)

来源:互联网 发布:js字符串转换为日期 编辑:程序博客网 时间:2024/06/01 07:49

大纲如下:

TestNG的基本注解

TestNG 按顺序执行测试用例及设置生成报告内容显示的级别

TestNG 异常测试

TestNG 组测试

TestNG 参数化测试

TestNG依赖测试

 

1、TestNG的基本注解

 

2、TestNG 按顺序执行测试用例及设置生成报告内容显示的级别

TestNGSimpleTest中的代码如下(只是一部分):

public class TestNGSimpleTest {@Testpublic void A1_ff(){System.out.println("执行1");}@Testpublic void A2_ff(){System.out.println("执行2");}@Testpublic void A3_ff(){System.out.println("执行3");}


 

在testNG.xml中,可以控制测试用例按照顺序执行,当perserve-order="true"时,可以保证节点下面的方法是按顺序执行的,如下图所示:

<?xml version="1.0" encoding="UTF-8"?><suite name="Suite" parallel="false" >  <test verbose="2" preserve-order="true" name="Test" >    <classes>       <class name="selenium2.TestNGSimpleTest"/>          <methods>             <include name = "A2_ff"/>             <include name = "A1_ff"/>          </methods>    </classes>  </test> <!-- Test --></suite> <!-- Suite -->


注释:

 

其中verbose = 2 标识的就是记录的日志级别,共有0-10的级别,其中0表示无,10表示最详细
preserve-order = true 控制@test标识的测试用例执行顺序,默认是FALSE,在节点下面的所有方法的执行顺序是无序的,把它设置为true以后就保证在节点下的方法是按照顺序执行的

执行testNG.xml后,结果如下:

[TestNG] Running:  D:\eclipse_workingspace\git\fifp_ls\selenium2\src\testNG.xml执行2执行1PASSED: A2_ffPASSED: A1_ff===============================================    Test    Tests run: 2, Failures: 0, Skips: 0==============================================================================================SuiteTotal tests run: 2, Failures: 0, Skips: 0===============================================[TestNG] Time taken by org.testng.reporters.JUnitReportReporter@1d225a7: 19 ms[TestNG] Time taken by org.testng.reporters.jq.Main@39ab89: 50 ms[TestNG] Time taken by org.testng.reporters.SuiteHTMLReporter@13c468a: 47 ms[TestNG] Time taken by org.testng.reporters.EmailableReporter2@15253d5: 5 ms[TestNG] Time taken by org.testng.reporters.XMLReporter@dda25b: 10 ms[TestNG] Time taken by [FailedReporter passed=0 failed=0 skipped=0]: 0 ms


 

3、TestNG 异常测试

testNG跟踪异常处理代码提供了一个选项,可以测试是否需要代码抛出异常或不抛出。@Test注释 expectedExceptions参数一起使用。

4、TestNG 组测试

例如:

@Test(groups ={"systemtest"})
 public void A2_ff()
 {
  System.out.println("执行2");
 }
 @Test(groups = {"group2"})
 public void A3_ff()
 {
  System.out.println("执行3");
 }

配置如下:testNG.xml

<?xml version="1.0" encoding="UTF-8"?>
<suite name="Suite" parallel="false" >
  <test verbose="2" preserve-order="true" name="Test" >
         <class name="selenium2.TestNGSimpleTest"/>
          <groups>

                <run>
             <include name = "group2"/>
             </run>
          </groups>
    </test> <!-- Test -->
</suite> <!-- Suite -->

5、TestNG 参数化测试

测试时需要进行参数化,TestNG提供了2种传递参数的方式

第一种:testng.xml方式使代码和测试数据分离,方便扩展和维护

第二种:@DataProvider能够提供比较复杂的参数(data -driven testing),同时方便产生具有一定规律的测试数据集

5.1、通过testng.xml传递参数给测试代码

通过<parameter>标签,在testng.xml中定义参数的值,对于同一参数,可以再不同地方定义不同值。

java代码如下:

public class TestNGSimpleTest {@Test@Parameters("ID")public void A1_ff(int id){System.out.println("学生编号为:"+id);}@Test


tstng.xml配置如下:

<?xml version="1.0" encoding="UTF-8"?><suite name="Suite" parallel="false" >  <test verbose="2" preserve-order="true" name="Test" >    <parameter name="ID" value="2"/>    <parameter name="ID" value="3"/>    <classes>       <class name="selenium2.TestNGSimpleTest"/>          <methods>             <include name = "A2_ff"/>             <include name = "A1_ff"/>          </methods>    </classes>    </test>    </suite> <!-- Suite -->


执行结果如下:

执行2
学生编号为:3
PASSED: A2_ff
PASSED: A1_ff(3)

 

不过此时有个疑问,从实际来说应该执行3次啊,学生编号为:2的循环丢失了,具体不知道什么原因,网上也没查到为啥没有按顺序进行循环。

5.2、通过DataProvider传递参数

举例:

java代码如下:

public class TestNGSimpleTest {@DataProvider(name="Per")public Object[][] createData(){Object[][] arr={{"001","张三"},{"002","李四"},{"003","王五"}};return(arr);}@Test(dataProvider ="Per")public void A2_ff(String id,String name){System.out.println("学生编号为:"+id);System.out.println("学生姓名为:"+name);}@Test@Parameters("ID")public void A1_ff(int id){System.out.println("学生编号为:"+id);}


testng.xml代码如下:

<?xml version="1.0" encoding="UTF-8"?><suite name="Suite" parallel="false" >  <test verbose="2" preserve-order="true" name="Test" >    <parameter name="ID" value="2"/>    <parameter name="ID" value="3"/>    <classes>       <class name="selenium2.TestNGSimpleTest"/>          <methods>             <include name = "A2_ff"/>             <include name = "A1_ff"/>          </methods>    </classes>    </test>  </suite> <!-- Suite -->


运行结果如下:

学生编号为:001学生姓名为:张三学生编号为:002学生姓名为:李四学生编号为:003学生姓名为:王五学生编号为:3PASSED: A2_ff("001", "张三")PASSED: A2_ff("002", "李四")PASSED: A2_ff("003", "王五")PASSED: A1_ff(3)===============================================    Test    Tests run: 4, Failures: 0, Skips: 0===============================================


 

6、TestNG依赖测试

有时需要按顺序执行用例,一个用例的执行需要前一个用例执行完才可以进行,即用例之间存在依赖关系。

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


 

0 0
原创粉丝点击