TextNG
1.TestNG介绍
1.1.TestNG是什么?
TestNG是一个开源的自动化测试框架,其灵感来自于JUnit和Nunit,在此基础上添加了一些新的功能,使其更方便,更强大。
官网:https://testng.org/doc/
1.2.TestNG能干什么?
1.2.1.用来进行测试用的编写,管理和批量运行
测试用例的管理层级:Suite->Test->class->method。通常一个方法代表一个测试用例
1.2.2.用来生成测试报告
1.3.TestNG怎么用?
主要通过Java注解实现测试用例的
@BeforeSuite:将会在testng定义的xml根元素里面的所有执行之前运行
@BeforeClass:将会在当前测试类的第一个测试方法执行之前运行
@BeforeMethod:将会在当前测试类的每一个测试方法执行之前运行
@BeforeTest:将会在一个元素定义的所有里面所有测试方法执行之前运行
@Test:标识为一个测试用例
#alwaysRun : 如果=true,表示即使该测试方法所依赖的前置测试有失败的情况,也要执行
#dataProvider : 选定传入参数的构造器。(@DataProvider注解将在后面章节介绍)
#dataProviderClass : 确定参数构造器的Class类。(参数构造器首先会在当前测试类里面查找,如果参数构造器不在当前测试类定义,那么必须使用该属性来执行它所在的Class类)
#dependsOnGroups : 确定依赖的前置测试组别。
#dependsOnMethods : 确定依赖的前置测试方法。
#description : 测试方法描述信息。(建议为每个测试方法添加有意义的描述信息,这将会在最后的报告中展示出来)
#enabled : 默认为true,如果指定为false,表示不执行该测试方法。
#expectedExceptions : 指定期待测试方法抛出的异常,多个异常以逗号(,)隔开。
#groups : 指定该测试方法所属的组,可以指定多个组,以逗号隔开。组测试的用法将在后面文章单独介绍。
#invocationCount : 指定测试方法需要被调用的次数。
#invocationTimeOut: 每一次调用的超时时间,如果invocationCount没有指定,该参数会被忽略。应用场景可以为测试获取数据库连接,超时就认定为失败。单位是毫秒。
#priority : 指定测试方法的优先级,数值越低,优先级越高,将会优先与其他数值高的测试方法被调用。(注意是针对一个测试类的优先级)
#timeout : 指定整个测试方法的超时时间。单位是毫秒。
@AfterTest:将会在一个元素定义的所有里面所有的测试方法执行之后运行
@AfterMethod:将会在当前测试类的每一个测试方法执行之后运行
@AfterClass:将会在当前测试类的最后一个测试方法执行之后运行
@AfterSuite:将会在testng定义的xml根元素里面的所有执行之后运行
1.3.1.安装插件
IntelliJ IDEA默认安装TestNG插件
eclipse插件安装:Eclipse的版本要在4.6以上才能安装该插件
1.3.2.在maven项目中添加依赖
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.14.3</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>4.1.4</version>
</dependency>
1.3.3.编写测试用例
package com.test.amp.system;
import com.test.amp.base.BaseTest;
import org.openqa.selenium.By;
import org.testng.annotations.Test;
public class Login extends BaseTest {
@Test
public void login(){
webDriver.get(getFullUrl("/login"));
webDriver.findElement(By.xpath("//*[@id=\"app\"]/div/form/div[1]/div/div/input")).sendKeys("admin");
webDriver.findElement(By.xpath("//*[@id=\"app\"]/div/form/div[2]/div/div/input")).sendKeys("admin123");
webDriver.findElement(By.xpath("//*[@id=\"app\"]/div/form/div[3]/div/div[1]/input")).sendKeys("000");
webDriver.findElement(By.xpath("//*[@id=\"app\"]/div/form/div[4]/div/button")).click();
}
}
1.3.4.创建TetsSuite Xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="All Test Suite">
<!-- 打开浏览器 -->
<test verbose="2" preserve-order="true" name="openChrome">
<classes>
<class name="com.test.amp.base.OpenChrome">
<methods>
<include name="open"/>
</methods>
</class>
</classes>
</test>
<!-- 系统登录 -->
<test verbose="2" preserve-order="true" name="login">
<classes>
<class name="com.test.amp.system.Login">
<methods>
<include name="login"/>
</methods>
</class>
</classes>
</test>
<!-- 系统管理-用户管理-->
<test verbose="2" preserve-order="true" name="user">
<classes>
<class name="com.test.amp.system.User">
<methods>
<include name="queryByUserName"/>
</methods>
</class>
</classes>
</test>
<!-- 系统监控-数据监控-->
<test verbose="2" preserve-order="true" name="dataMonitor">
<classes>
<class name="com.test.amp.monitor.DataMonitor">
<methods>
<include name="dataMonitorLogin"/>
<include name="changeSqlMonitorTab"/>
</methods>
</class>
</classes>
</test>
<!-- 关闭浏览器 -->
<test verbose="2" preserve-order="true" name="quitChrome">
<classes>
<class name="com.test.amp.base.QuitChrome">
<methods>
<include name="quit"/>
</methods>
</class>
</classes>
</test>
</suite>
1.3.5.运行测试用例
1.3.6.查看测试报告
然后运行测试用例。会在项目的目录创建一个test-output目录,emailable-report.html就测试报告
在浏览器中打开查看测试报告
1.4.什么是PO
PO是page object的缩写。是一种编写测试用的思想,即一个页面是一个对象,所有关于这个页面的测试用例都添加在这一个对象中进行管理。