TestNG(一)

详细的结介绍:

https://blog.csdn.net/lovedingd/article/details/106784561

这半年面试了很多候选人,大多数候选人都会在简历上写上自己公司的接口自动化框架或者UI自动化框架。在大多数框架的实现方式中,都会写到一个TestNG。然后我们展开了如下的对话。

A:看你们这边用到了TestNG,那你对它了解多少呢?

M:我知道这是个单元测试的框架。它比较有名的是注解。

A:那你们有用到什么注解嘛?

M:我们只用到了@Test……

A:那你们@Test的参数是如何运用的呢?

M:好像没有……

鉴于我们在设计接口测试框架或者UI自动化框架的时候,大概率都会用到TestNG,且大多数同学对这个框架其他的应用一无所知,我们就写一个关于

TestNG的系列。

TestNG的官方文档:

TestNG有几个显著且好用的特点。

  • 大名鼎鼎的注解功能,系列中会写到各个注解的作用及示例
  • 测试组的概念
  • 多线程测试
  • 支持依赖测试方法,并行测试,负载测试,局部故障

那TestNG有以上这些特点,怎么集成进你的框架并使用呢?

第一步:你需要确认已经配置了Java环境。

第二步:1、项目中配置了maven,则引入以下依赖就行

<dependency>
    <groupId>org.testng</groupId>
    <artifactId>testng</artifactId>
    <version>6.14.3</version>
</dependency>

  

2、如果没有maven,则可以直接引入TestNG.jar即可

第三步:编写测试业务逻辑,在代码中插入TestNG的注解

第四步:在TestNG对应的配置文件testng.xml或build.xml中配置测试信息

第五步:运行TestNG即可

前面一直提到注解的好处,那我们就从运用最广泛的@Test注解开始说起。被@Test标注的方法或者类则是我们对应的一条测试用例。如下面的代码显示,

runTest1、runTest2分别是我们自己写的两条测试用例。

package com.tester;
​
import org.testng.annotations.Test;
​
public class TestInterface {
​
    @Test
    public void runTest1() {
        System.out.println("@Test - runTest1");
    }
​
    @Test
    public void runTest2() {
        System.out.println("@Test - runTest2");
    }
}

  

@Test就这么简单?No,它的精华在于它的以下几个参数。

  • groups:组测试,一个test属于哪一个组,可以跑一个特定组的所有test
  • dependsOnMethods、dependsOnGroups:依赖测试,一个test依赖于另一个test的执行结果
  • expectedExceptions:异常测试
  • dataProvider:参数化测试,将参数传入该test
  • enabled:忽略测试,不执行该test
  • timeOut、threadPoolSize、invocationCount、successPercentage:并发测试,设置并发测试的各种参数
  • alwaysRun:如果为true的话,不管怎样都会运行

这次先介绍TestNG的一个创新,组测试。它不存在于JUnit框架,它允许你执行一个测试组内的所有测试用例。你不仅可以声明一个测试用例属于哪个组,你也可以指定一组包含其他组。然后,TestNG可调用和要求包括一组特定的群体(或正则表达式),而排除另一个集合。这就给了我们最大的灵活性,如何分区测试,如果想运行两套不同的测试背靠背,不需要重新编译任何东西,只需要运行不同的组即可。

package com.tester;
​
import org.testng.annotations.AfterGroups;
import org.testng.annotations.BeforeGroups;
import org.testng.annotations.Test;
​
public class TestGroup {
​
    @Test(groups = "appium-test")
    public void runAppium() {
        System.out.println("runAppium()");
    }
​
    @Test(groups = "appium-test")
    public void runAppium1() {
        System.out.println("runAppium1()");
    }
​
    @Test(groups = "interface-test")
    public void testConnectOracle() {
        System.out.println("testConnectOracle()");
    }

​    @Test(groups = "interface-test")
    public void testInterface() {
        System.out.println("testInterface()");
    }
}

  以上代码,我们可以看到,声明了2个测试组appium-test、interface-test,每个测试组下面分别有2个测试用例。还有如下代码所示,直接将整个类归为一个测试组的情况。

package com.tester;
​
import org.testng.annotations.Test;
​
@Test(groups = "selenium-test")
public class TestSelenium {
​
    public void runSelenium() {
        System.out.println("runSelenium()");
    }
​
    public void runSelenium1() {
        System.out.println("runSelenium()1");
    }
}

  那怎么运行呢?上面提到需要配置对应的testng.xml,我们将对应的testng.xml写成如下。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
​
<suite name="TestAll">
​    <!-- 只跑selenium-test这个测试组 -->
    <test name="selenium">
        <groups>
            <run>
                <include name="selenium-test" />
            </run>
        </groups>
​
        <classes>
            <class name="com.tester.TestSelenium" />
            <class name="com.tester.TestGroup" />
        </classes>
    </test>
</suite>

  当然,一个测试方法或者一个类,也可以同时属于多个组。

@Test(groups = {"appium","uiautomator"})
public void testUI() {
    System.out.println("testUI");
}

  

原文地址:https://www.cnblogs.com/MLing/p/14662304.html