一、 单元测试框架
单元测试是 开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为
我们之前的测试添加联系人脚本就是用默认的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的简单对比
testng底层调用junit
历史上曾有testng优于junit的一段时期,但随后junit已更新并追赶上来
testng的data provider使用较方便
testng能做的事情junit都能做,但是有的地方会比较麻烦
三、 使用Testng
开始就用了,根本停不下来,就不用junit,先看看本来使用的单元 测试框架,看看导包就知道了
1.下载Testng
Android studio 添加依赖即可 ,在gradle的dependencies下面添加
(当前最新是6.9.6)
compile 'org.testng:testng:6.9.6'
2.添加Testng插件
AndroidStudio已经默认添加了,在File-Setting-Plugins 搜索即可看到
3.使用Testng
新建一个测试类,新建方法,在方法上面添加注解即可。例如文章开头的代码。
4.运行Testng
在测试的module的根目录下新建testng.xml, 名字随你,内容正常即可。详细的内容配置可以看官网: http://testng.org/doc/documentation-main.html#testng-xml
右键,运行即可