[Android测试] AS+Appium+Java+Win 自动化测试之四: 单元测试框架和TestNg

时间:2022-12-21 06:00:25

一、 单元测试框架

单元测试是 开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为

我们之前的测试添加联系人脚本就是用默认的JUNIT 单元测试框架,实现注解的方式执行case用例。

每个方法上面的 @XXXXX 就是注解,我们需要知道的就是:带了注解的方法将会在某个时机运行,注解具体内容请百度一下。

package com.example;

import org.testng.annotations.AfterClass;
import org.testng.annotations.AfterGroups;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.AfterSuite;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeGroups;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.BeforeSuite;
import org.testng.annotations.BeforeTest;

import java.io.IOException;
import java.net.MalformedURLException;

/**
* Created by LITP on 2016/9/21.
*/


public class Test {

@BeforeMethod
public void BeforeMethod() throws IOException {

}

@BeforeClass
public void beforeClass() {
}


@BeforeGroups
public void beforeGroups() {

}


@BeforeSuite
public void beforeSuite() throws MalformedURLException {

}


@BeforeTest
public void beforeTest() {


}


@AfterMethod
public void afterMethod() {

}

@AfterClass
public void afterClass() {

}

@AfterGroups
public void afterGroups() {

}

@AfterSuite
public void afterSuite() {

}

@AfterTest
public void afterTest() {

}
}

1. Junit:

JUnit是Java单元测试框架,从Junit4开始,通过注解的方式来识别测试方法,我们的Junit4在导入的selenium-server-standalone-3.0.0-beta3 这个包里面。目前支持的主要注解有:

注解 说明
@BeforeClass 全局只会执行一次,而且是第一个运行
@Before 在测试方法运行之前运行
@Test 测试方法
@After 在测试方法运行之后允许
@AfterClass 全局只会执行一次,而且是最后一个运行
@Ignore 忽略此方法

例如我们上一章导入的源码就有Test、Before、After

2.Testng:

它的目的就是是优于JUnit,消除了大部分的旧框架的限制,使开发人员能够编写更加灵活和强大的测试。

特点:

  • 灵活的插件API
  • 支持多线程测试
  • 灵活的运行时配置
  • 使用Java和面向对象的功能
  • 独立的编译时间测试代码运行时配置/数据信息
  • 支持依赖测试方法,并行测试,负载测试,局部故障
  • 支持综合类测试(如: 默认情况下,没有必要创建一个新的测试每个测试方法的类的实例)
  • 测试组。当编译测试,只要问TestNG运行所有的“前端”的测试,或“快”,“慢”,“数据库”等

官网文档地址: http://testng.org/doc/documentation-main.html

注解有:

注解 解析
@BeforeSuite 注解的方法将只运行一次,运行在此套件中的所有测试之前。
@AfterSuite 注解的方法将只运行一次,运行在此套件中的所有测试之后。
@BeforeClass 注解的方法将只运行一次,运行在该class运行之前。
@AfterClass 注解的方法将只运行一次,运行在该class之后。
@BeforeTest class的标签之前被运行。
@AfterTest class的标签之后被运行。
@BeforeGroups 组的列表,这种配置方法将之前运行。此方法是保证在运行属于任何这些组第一个测试方法,该方法被调用。
@AfterGroups 组的名单,这种配置方法后,将运行。此方法是保证运行后不久,最后的测试方法,该方法属于任何这些组被调用。
@BeforeMethod 注解的方法将每个测试方法之前运行。
@AfterMethod 被注释的方法将被运行后,每个测试方法。
@DataProvider 标志着一个方法,提供数据的一个测试方法。注解的方法必须返回一个Object[][],其中每个对象[]的测试方法的参数列表中可以分配。该@Test 方法,希望从这个DataProvider的接收数据,需要使用一个dataProvider名称等于这个注解的名字。
@Factory 作为一个工厂,返回TestNG的测试类的对象将被用于标记的方法。该方法必须返回Object[]。
@Listeners 定义一个测试类的监听器。
@Parameters 将参数传递给@Test方法。
@Test 标记一个类或方法作为测试的一部分。

PS: 设置程序信息一般放在BeforeClass或者BeforeSuite里面,不要放BeforeMethod里,为什么呢,如果有时候不止一个测试方法,放BeforeMethod里面就会导致调用多次,就会报错了。还有你要并行测试的话,设置信息一定得放在BeforeClass,不然就会导致只初始化一次,就会只有一台手机测试 。所以,初始化放在BeforeClass是最安全的,(例如我第十篇文章并行那里有讲到)。

二、 Testng和Junit的简单对比

  1. testng底层调用junit

  2. 历史上曾有testng优于junit的一段时期,但随后junit已更新并追赶上来

  3. testng的data provider使用较方便

  4. testng能做的事情junit都能做,但是有的地方会比较麻烦

三、 使用Testng

开始就用了,根本停不下来,就不用junit,先看看本来使用的单元 测试框架,看看导包就知道了

[Android测试] AS+Appium+Java+Win 自动化测试之四: 单元测试框架和TestNg

1.下载Testng

Android studio 添加依赖即可 ,在gradle的dependencies下面添加
(当前最新是6.9.6)

compile 'org.testng:testng:6.9.6'

[Android测试] AS+Appium+Java+Win 自动化测试之四: 单元测试框架和TestNg

2.添加Testng插件

AndroidStudio已经默认添加了,在File-Setting-Plugins 搜索即可看到
[Android测试] AS+Appium+Java+Win 自动化测试之四: 单元测试框架和TestNg

3.使用Testng

新建一个测试类,新建方法,在方法上面添加注解即可。例如文章开头的代码。

[Android测试] AS+Appium+Java+Win 自动化测试之四: 单元测试框架和TestNg

4.运行Testng

在测试的module的根目录下新建testng.xml, 名字随你,内容正常即可。详细的内容配置可以看官网: http://testng.org/doc/documentation-main.html#testng-xml

[Android测试] AS+Appium+Java+Win 自动化测试之四: 单元测试框架和TestNg

右键,运行即可

[Android测试] AS+Appium+Java+Win 自动化测试之四: 单元测试框架和TestNg