TestNG基础

<suite name="Suite1" verbose="1" >

  <test name="Nopackage" >

    <classes>

       <class name="NoPackageTest" />

    </classes>

  </test>



  <test name="Regression1">

    <classes>

      <class name="test.sample.ParameterSample"/>

      <class name="test.sample.ParameterTest"/>

    </classes>

  </test>

</suite>
<suite>...</suite> 表示定义了的一个测试套件。
name 定义测试套件的名称。
verbose 定义命令行信息打印等级,不会影响测试报告输出内容;可选值(1|2|3|4|5) 
<test>...</test> 表示定义了一个测试。
name 定义测试的名称。
<classes>...</classes> 表示定义一组测试类。
<class .../> 表示定义一个测试类。
name 指定要运行的测试类

通过 testng.xml 文件来配置测试用例的执行
1、用例级别

在我们创建测试用例时,大概分三个层级。

  • 测试包(目录)
  • 测试类(文件)
  • 测试用例(@Test 注解的方法)
<packages>...</packages> 定义一组测试包。
<package.../> 定义一个测试包。
name 指定测试包(目录)的名称。
<methods>...</methods> 定义一组测试方法。
<include.../> 指定包含的测试用例(方法)。
name 指定测试用例(方法)的名称

注意: 测试方法<methods>必须包含在<class>标签中。

2、用例分组

TestNG 允许我们给测试用例贴标签。我们可以根据这些标签有选择地的跳过或执 行这些用例。

<groups>...</groups> 测试组标签。
<run>...</run> 运行测试。
<exclude> 根据groups的设置,排除不执行的用例。
<include> 根据groups的设置,指定执行的测试用例。
3、用例执行顺序
  • preserve-order 参数用于控制测试用例的执行顺序。
  • 如果为:true,测试用例的顺序为:testCase > testCase1 > testCase2。
  • 如果为:false ,那么默认会按照用例的名称的有字母/数字的顺序执行:testCase1 > testCase2 > testCase3。
4、用例依赖
  • dependsOnGroups 来设置组的依赖,testAdd1()和 testAdd2() 同属于于 funtest组,testAdd3() 依赖于funtest组,该组有中有一条用例运行失败,则testAdd3() 不再执行。
5、用例参数化

(1)通过 @Parameters 实现参数化

import org.testng.annotations.Parameters;

import org.testng.annotations.Test;

import static org.testng.AssertJUnit.assertEquals;


public class DataProviderTest {

    @Test

    @Parameters({"add1","add2","result"})

    public void testAdd1(int add1, int add2, int result){

        assertEquals(add1+ add2, result);
    }
}

@Parameters 获取参数化数据,作为 testAdd1() 测试方法的参数。
具体的测试数据在 testng.mxl 文件中设置。

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<suite name="测试套件">

    <test name="简单测试">

        <parameter name="add1" value="3"/>

        <parameter name="add2" value="2"/>

        <parameter name="result" value="5"/>

        <classes>

            <class name="test.sample.DataProviderTest" />

        </classes>

    </test>

</suite>
<parameter.../> 定义测试数据name 定义数据的名字,在测试用例中通过该名字来获取对应的vlaue。value 定义测试数据,通过对应的name来获取该值。

(2)通过 @DataProvider 实现参数化

import org.testng.annotations.DataProvider;

import org.testng.annotations.Test;

import static org.testng.AssertJUnit.assertEquals;



public class DataProviderTest {

    // 定义对象数组

    @DataProvider(name = "add")

    public Object[][] Users() {

        return new Object[][] {

                { 3, 2, 5 },

                { 2, 2, 4 },

                { 3, 3, 7 },

        };

    }

    @Test(dataProvider="add")

    public void testAdd2(int add1, int add2, int result){

        assertEquals(add1+add2, result);

    }
}

  • @DataProvider 定义对象数组,数组的名称为:add 。

在 testAdd2() 中通过 dataProvider="add" 调用定义的对象数组,并通过参数获取相应的测试数据。


6、多线程运行用例

这里只介绍 testng.xml 文件,其中的使用到的测试用例,请参考前面的章节创建。

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<suite name="测试套件" parallel="classes" thread-count="2" >

    <test name="简单测试">

        <classes>

            <class name="test.sample.FirstTest" />

            <class name="test.sample.SecondTest" />

        </classes>

    </test>

</suite>


  • parallel 设置多线程的级别划分。
    • parallel=“methods”: TestNG将在不同的线程中运行所有的测试方法。依赖方法也将在单独的线程中运行,但它们将尊重你指定的顺序。
    • parallel=“tests”: TestNG 将在同一个线程中运行相同的标记的所有方法,但是每个标记将在一个单独的线程中。这允许你将所有非线程安全的类分组在同一个中,并保证它们将在同一个线程中运行,同时利用尽可能多的线程来运行测试。
    • parallel=“classes”: TestNG将在同一个线程中运行同一个类中的所有方法,但是每个类都将在一个单独的线程中运行。
    • parallel=“instances”: TestNG将在同一个线程中运行相同实例中的所有方法,但是在两个不同实例上的两个方法将在不同的线程中运行。
  • thread-count 用于指定线程的个数。








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值