TestNG—学习笔记2

        关于TestNG,也是一边学一边总结,对于TestNG和Junit的比较其实也没有什么意义,都是一种测试框架,都是为了应用而生的东西,没有必要说谁好谁不好了。用的熟练用的好就是真的好啊。

        下面简单的总结了些关于TestNG的基本使用方法,如果说的不明白或者有错误的地方,还望大家不要手下留情了。尽情拍砖,使劲的拍。。。。

        首先我们得了解一下关于TestNG的几种注释方法(都是从官网上翻译的,有问题迫切希望大家指正),了解以后往下走会越来越顺的。

@BeforeSuite(执行集合之前执行的方法,它的优点我觉得应该体现在运行配置文件的时候,同时添加多个class,然后让有关的class同时运行进行测试)

@AfterSuite(执行完所有的测试集合以后运行的方法)

@BeforeClass(当前所在类的测试带@Test注释的方法运行之前运行一次)

@AfterClass  (当前所在类的测试全部运行完以后运行一次)

@BeforeTest (带有@Test注释的方法运行之前都会运行一次beforeTest中的方法)

@AfterTest (带有@Test注释的方法运行之后都会运行一次afterTest中的方法)

@BeforeMethond(在每个测试的方法之前运行一次)

@AfterMethond(在每个测试的方法运行之后运行一侧)

@BeforeGroups(结合在配置文件中使用,每个组运行之前运行一次)

@AfterGroups(结合在配置文件中使用,每个组运行之后运行一次)

@Test(表明这是一个测试用例的方法)

 

上面个都是一些最基本的注释方法,接下来可以看到稍微复杂点的注释,就是关于参数化和监控之类的注释:

@Listeners(相当于监控类,主要监控suite method 之类的相关动作,它主要是实现ISuiteListener,ITestListener,IInvokedMethodListener这三个对象,然后重写他们的相关方法)

@DataProvider(数据提供,以数组的形式来提供数据,实现数据的参数化)

@Parameters (结合配置文件来提供数据,实现数据的参数化)

我门在学习TestNG时,其实TestNG最大的优点我觉得应该体现在它的Suite XML文件上,如果我们想同时运行几个测试类,这个时候我们不需要像JUnit那样在类里面定义Suite类了,TestNG将Suite从类里面分离出来了,它是直接写在一个XML文件中的。

为了更好的理解上面几种注释方法,下面直接在Suite XML配置文件中定义来对他们进行了解,我觉得这样理解起来或许会更快一点。

首先我们看看Suite XML文件的基本格式:

<!-- suite name 自己定义,没有任何限制  -->
<suite name="xxx">
<!-- test name 也是自己定义的,名称不做任何限制 -->
    <test name="xxx">
<!-- classes name 也是自己定义的,名称不做任何限制 -->
         <classes name="xxx">
<!-- 可以添加多个class,然后同时运行这几个测试类-->
                <class name="packageName.className1"/>
                <class name="packageName.classNam2"/>    
         </classes>
    </test>
</suite>

Group的使用(结合下面的代码可以看出,当运行suiteXML文件的时候只有在组里面的测试用例才能被执行,在运行这个测试之前就会调用@BeforeGroups中的方法,运行完这个测试之后就会运行@AfterGroups这个方法)

@Test(groups={"test1"})
 public void testMethond6(){
 
  System.out.println("testMethond6");
 }

 @Test (groups={"test2"})
 public void testMethond7(){
 
  System.out.println("tsetMethond7");
 
 }

Suite XML 文件:

<suite name="xxx">
     <test name="xxx">
       <gropus name="xxx">
            <run>
             <include name="test1" />
           </run>
        </groups>
         <classes name="xxx>
              <class name="className"> </class>
       </classes>
    </test>
</suite>

当我们运行上面的Suite XML文件的时候,只有被定义为test1的Group,方法“testMethond6”才会被执行,通过Group的控制,我们可以自定义一个测试类中需要运行的方法。

关于DataProvider的使用(通过下面的代码展现):

定义好DataProvider,然后将数据以数组的形式写到数组里面,在测试方法中直接调用DataProvider中定义好的数据:

@DataProvider(name="data1")
 public static Object[][] getData(){
 
  return new Object[][] {{"user1","password1"},{"user2","password2"},{"user3","password3"}};
 
 }
 
 @Test(dataProvider="data1")
 public void testMethond8(String userName, String password){
 
  System.out.println("The UserName is:"+userName);
  System.out.println("The Password is:"+password);
   
 }

关于参数化(Parameters)的使用,在suiteXML文件中定义好数据,然后直接通过value-key对应的方式得到相关的数据。

@Test
 @Parameters({"username","password"})
 public void testMethond9(String userName, String password){
 
  System.out.println("The UserName is:"+userName);
  System.out.println("The Password is:"+password);
 
 }

Suite XML:

<suite name="testNG2">
    <paremeter name="username", value="liangtao1"></paremeter>
    <paremeter name="password",value="password1"></paremeter>
    <paremeter name="username", value="liangtao2"></paremeter>
    <paremeter name="password",value="password2"></paremeter>
    <test name="testNG2">
    <classes>
        <class name="study.testNG.TestListener"></class>
    </classes>
    </test>
</suite>
原文地址:https://www.cnblogs.com/taoSir/p/4815664.html