TestNG自动化测试框架说明书
天翼电子商务有限公司
TestNG自动化测试框架
设计说明书
V1.0
33
1. 背景 4
1.1 编写背景 4
1.2 自动化成果 4
2. TestNG介绍 5
2.1 TestNG概述 5
2.2 TestNG优点 5
2.3 TestNG安装 6
2.4 TestNG注解 6
2.4.1 使用注解的好处 6
2.4.2 TestNG中注解种类 6
2.4.3 TestNG中注解执行顺序 7
2.5 TestNG测试用例编写 7
2.6 TestNG测试集文件使用 8
2.7 TestNG数据提供者 8
3. 使用TestNG进行Dubbo协议接口测试 8
3.1 测试框架整体设计图 8
3.2 项目工程结构图 9
3.3 Dubbo介绍 11
3.4 数据参数化 12
3.5 项目代码托管 13
4. 使用TestNG进行Http和Soap协议接口测试 14
4.1 项目工程结构图 15
4.2 项目框架介绍 15
4.3 数据流介绍 17
4.4 新建测试用例 17
4.5 运行测试 18
4.5.1 在方法名上右击运行 18
4.5.2 在Test Case类上右击运行 18
4.5.3 在test suite xml 文件上右击运行 19
4.5.4 运行maven Test 19
5. 使用TestNG结合Selenium进行Web UI自动化测试 21
5.1 测试框架整体设计图 21
5.2 项目工程结构图 21
5.3 页面对象模型 23
5.4 定位页面元素方法 23
6. 环境搭建 25
6.1 配置Java环境 25
6.2 配置Maven环境 28
6.3 准备Intellij IDEA开发工具 29
6.4 IDEA中安装Lombok插件 29
6.5 IDEA中配置Maven 30
6.6 IDEA中配置Spring 30
6.7 IDEA中配置JDK 31
6.8 配置Git环境 32
1. 背景
1.1 编写背景
随着公司的发展与业务的拓展,手工测试已经跟不上公司发展的节奏。全靠手工测试无法保证测试质量与效率,所以引入自动化测试来加强回归测试。自动化测试的目的是通过提高测试效率、测试质量和测试覆盖率来达成节约成本的目的。但平台接口目前使用的是dubbo协议,目前市面上没有可用的自动化测试工具。所以测试组引入了TESTNG进行自主研发进行自动化测试框架搭建。开始了自动化测试实施的道路。
1.2 自动化成果
自动化收益公式:自动化的收益 = 迭代次数 * 全手动执行成本 - 首次自动化成本 - 维护次数 * 维护成本
目前项目组已经进行几个常版本迭代,每个版本进行一次维护,维护成本为2人日。自动化测试的收益随着时间的推移为上升趋势。
目前项目组内自动化执行人员比例为100%。提高了人员素质,同等单价创造了更高的收益。详细数据如下图所示:
2. TestNG介绍
2.1 TestNG概述
TestNG是一套根据JUnit和NUnit思想而构建的利用注释来强化测试功能的一个测试框架,既可以用来做单元测试,也可以用来做集成测试。
TestNG是一个开源的自动化测试框架,NG表示Next Generation,TestNG即表示下一代测试技术。TestNG与JUnit类似,它受JUnit测试思想启发但是比JUnit更加强大,特别是在集成测试时候。特别感谢TestNG的创始人Cedric Beust, TestNG为我们测试者带来诸多方便。
TestNG消除了以往老的测试框架中的许多限制,让开发者和测试者能够通过简单的注解、分组、指定顺序、参数化就可以编写更加灵活、更加强大的测试用例。
TestNG官方文档:http://testng.org/doc/documentation-main.html
2.2 TestNG优点
TestNG有如下优点:
1. TestNG可以生成HTML格式的测试报告。对测试结果的描述更加详细,方便定位错误。
2. TestNG注解丰富,如@ExpectedExceptions、@DataProvider等。
3. TestNG可以对测试用例进行分组或指定测试用例执行的先后顺序。JUnit 4测试的依赖性非常强,测试用例间有严格的先后顺序。前一个测试不成功,后续所有的依赖测试都会失败。TestNG 利用@Test 的dependsOnMethods属性来应对测试依赖性问题。某方法依赖的方法失败,可以设置它将被跳过,而不是标记为失败。
4. TestNG可以通过Parallel属性设置并发测试。
5. 对于n个不同参数组合的测试,JUnit 4要写n个测试用例。每个测试用例完成的任务基本是相同的,只是受测方法的参数有所改变。TestNG的数据参数化只需要一个测试用例,然后把所需要的参数加到TestNG的xml配置文件中。这样的好处是参数与测试代码分离,非程序员也可以修改参数,同时修改无需重新编译测试代码。
2.3 TestNG安装
如果在IntelliJ IDEA中使用maven,在项目的pom.xml文件中增加依赖描述即可:
org.testng
testng
6.8.8
test
2.4 TestNG注解
2.4.1 使用注解的好处
1. TestNG通过查找注解定位到目标方法,因此方法名称并不局限于任何格式或语法。
2. 我们可以通过注解传递参数。
3. 注解是强类型的,所以编译器可以立即识别任何错误。
4. 测试类不再需要继承任何类。
2.4.2 TestNG中注解种类
@BeforeSuite
@AfterSuite
@BeforeTest
@AfterTest
@BeforeGroups
@AfterGroups
@BeforeClass
@AfterClass
@BeforeMethod
@AfterMethod
@DataProvider
@Factory
@Listeners
@Parameters
@Test
2.4.3 TestNG中注解执行顺序
2.5 TestNG测试用例编写
使用TestNG来编写一个测试用例很简单,主要描述为以下几步:
第一步:编写测试用例的业务逻辑。
第二步:在测试方法上插入TestNG注解。
第三步:增加测试用例相关信息,如类名、方法名、组名等等。
第四步:运行该TestNG测试用例。
2.6 TestNG测试集文件使用
2.7 TestNG数据提供者
这个是通过数据提供者来传递数据的,会把二维数组的数据传递给@Test中并打印出计算结果。
3. 使用TestNG进行Dubbo协议接口测试
3.1 测试框架整体设计图
一个好的自动化测试框架可以大幅度提高测试人员自动化脚本开发的效率,可以提高自动化脚本开发的并行性和可靠性。自动化测试框架设计得好与坏,直接关系到整个公司的测试水平,也关系到公司产品的发布周期和发布质量。所以设计框架时候尽量做到数据分离,业务层和逻辑层不能混杂在一起。整体框架设计图如图:
Dubbo采用全Spring配置方式,它基于Spring的Schema扩展进行加载,所要我们需要用到Spring来加载Dubbo的配置。Dubbo服务提供者会将自己的提供出来的服务注册到zookeeper中心,我们的测试工程模拟的角色是服务消费者,需要在dubbo配置文件中配置注册中心zookeeper的地址和即将测试的目标接口。
Dubbo协议接口自动化测试项目由maven+TestNG+Spring设计而成。Maven可以统一管理项目依赖的jar包,通过Maven可以在IDEA中直接进行编译、执行测试,也可以与持续发布工具Jenkins集成。Jenkins通过Git插件,获取到我们托管在git仓库中工程项目的最新代码,通过maven命令对项目进行编译、执行。将生成的测试报告通过邮件发送到指定邮箱。
3.2 项目工程结构图
使用TestNG进行Dubbo协议接口测试工程结构图如下:
.bestpay.test.services: 这里放的是测试用例代码。测试用例中以@Test注释为主体,在@Test方法中书写完整的测试步骤。
src.test.resources.test-excels: 这里放的是数据文档。在Excel中设计测试数据。每个sheet对应的是一个测试用例的测试数据。
src.test.resources.test-suites: testng的配置文件,用于存放部分测试数据以及测试的平台,设置用例执行策略(多线程还是单线程,顺序执行还是无序执行以及是否依赖执行等),以及设置要执行的用例。
mon: 提供公共使用的方法和类。
.bestpay.test.utils: 这个包主要是封装了各种工具类。
src.main.resources: 存放Dubbo Spring配置文件、指定excel配置文件,以及日志配置文件。
pom.xml: maven的配置文件,项目核心配置,用于构建项目、自动下载项目依赖以及和testng、jenkins配合持续集成等。
3.3 Dubbo介绍
Dubbo采用全Spring配置方式,基于Spring的Schema扩展进行加载Dubbo的配置。Dubbo服务提供者会将自己的提供出来的服务注册到zookeeper中心,我们的测试工程模拟的角色是服务消费者,需要在dubbo配置文件中配置注册中心zookeeper的地址和即将测试的目标接口。
测试一个服务接口,需要以下几步:
1. 到Maven私服系统中获取到maven依赖描述。
2. 到Maven配置文件pom.xml中,将依赖描述增加到dependency里。
3. 在Dubbo Consumer Spring配置文件中增加测试接口申明。
4. 通过Spring容器获取测试类的实例化对象
5. 做好以上几步之后就可以编写测试代码。
3.4 数据参数化
在自动化领域里,提倡把测试用例和测试数据分开处理。无论是进行自动化测试还是手工测试,我们都需要设计测试用例、准备测试数据。
可以将测试数据存储到excel、csv、txt、数据库等,本项目中我们使用的是Excel。工程中,我们把需要参数化的数据写在EXCEL里,并给它们赋予不同的数据组合,在运行脚本时调用。每一行Excel数据就是一种参数化的数据组合、就是一条测试用例。
Excel格式如下图:
运行测试时,通过TestNG中的DataProvider将Excel中的数据读取到Map中作为执行测试用例的数据来源。TestNG会将一条测试用例作为一个测试用例进行测试。
3.5 项目代码托管
我们使用Git进行团队开发过程中托管代码的工具。如果一位新成员想要获取我们的工程代码,需要把它拉取(Clone)到本地,如果某位成员本地修改了代码,需要提交(push)到git远程仓库,仓库的代码才会更新成最新的。其他成员就可以从git远程仓库拉取最新提交的代码。这样就能保证多人协作开发同一个项目。
Git的常用命令介绍如下:
1. 克隆远程仓库中的代码至本地,并进入工程目