TestNG这个测试框架可以很好的和基于Selenium的web自动化测试结合在一起,实现把我们写好的自动化测试用例以自定义顺序执行。下面分为十二步来对TestNG测试框架进行总结,包括环境的部署,从TestNG框架的几种常用方法,到与Ant结合来实现自动化测试。
新建一个名为forTestNg的java project,然后创建一个libs文件夹,导入所有和Selenium相关的jar包:
在Eclipse中点击Help->Install New Software,点击Add,Location填写“http://beust.com/eclipse”,然后点击OK:
之后勾选TestNG,点击Next进行安装即可:
之后点击Next:
点击Accept并Finish:
进行安装:
点击OK:
完成安装后点击Yes重启Eclipse:
Eclipse重启后,可以在libs文件夹中发现多了一个TestNG的jar包:
选中libs文件夹下所有的jar包,右键->Build Path->Add to Build Path:
新建一个名为forTestNg的package:
按下“Ctrl+N”选中TestNG类,点击Next:
填写信息如下(选择Source folder,选择Package name,给你的TestNG测试类起一个Class name,勾选两个Annotations,给XML文件起个名字),点击Finish:
NewTest类代码如下(@BeforeMethod的方法将在每个@Test的方法执行前执行,@AfterMethod的方法将在每个@Test的方法执行后执行):
package forTestNg; import org.testng.annotations.Test; import userInfo.UserInfo; import org.testng.annotations.BeforeMethod; import org.testng.annotations.AfterMethod; import java.util.logging.Level; import java.util.logging.Logger; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; public class NewTest {
public WebDriver webDriver; UserInfo usrInfo = new UserInfo(); @Test public void testA() throws InterruptedException { waitForLinkText(webDriver, "登录"); webDriver.findElement(By.linkText("登录")).click(); waitForId(webDriver, "input1"); webDriver.findElement(By.id("input1")).sendKeys(usrInfo.usrName); webDriver.findElement(By.id("input2")).sendKeys(usrInfo.pwd); webDriver.findElement(By.id("signin")).click(); System.out.println("Login successfully."); } @Test public void testB() throws InterruptedException { waitForLinkText(webDriver, "登录"); webDriver.findElement(By.linkText("登录")).click(); waitForId(webDriver, "input1"); webDriver.findElement(By.id("input1")).sendKeys(usrInfo.usrName); webDriver.findElement(By.id("input2")).sendKeys(usrInfo.pwd); webDriver.findElement(By.id("signin")).click(); System.out.println("Login successfully."); } @BeforeMethod public void beforeMethod() { System.out.println("Before method."); webDriver = new FirefoxDriver(); String url = "http://cnblogs.com"; webDriver.get(url); System.out.println("Navigate successfully."); } @AfterMethod public void afterMethod() { System.out.println("After method."); webDriver.quit(); System.out.println("Quit successfully."); } private static void waitForId(WebDriver webDriver, String id) throws InterruptedException { try {
Thread.sleep(1000); webDriver.findElement(By.id(id)); } catch (Exception e) { Logger log = Logger.getLogger("lavasoft"); log.setLevel(Level.INFO); log.info(e.toString()); } } private static void waitForLinkText(WebDriver webDriver, String linkText) throws InterruptedException { try {
Thread.sleep(1000); webDriver.findElement(By.linkText(linkText)); } catch (Exception e) { Logger log = Logger.getLogger("lavasoft"); log.setLevel(Level.INFO); log.info(e.toString()); } } }
新建一个userInfo包,并创建一个UserInfo类,用于存储用户信息:
代码如下:
package userInfo; public class UserInfo { public String usrName; public String pwd; public UserInfo() { usrName = "用户名"; pwd = "密码"; } }
修改xmlTest.xml文件,内容如下(指定了测试方法的执行顺序):
<?xml version="1.0" encoding="UTF-8"?> <suite name="Suite" parallel="false"> <test name="Test" preserve-order="true"> <classes> <class name="forTestNg.NewTest" /> <methods> <include name="testB" /> <include name="testA" /> </methods> </classes> </test> <!-- Test --> </suite> <!-- Suite -->
以上代码指定了先执行方法testB,然后执行方法testA;
在xml文件右键选择Run As->TestNG Suite运行测试:
运行结果如下,我们可以在Console中看到相应方法的测试结果:
从总结信息中可以看出,共运行了两个test方法,其中有一个失败了,我们可以看到是出现了locate不到link元素的异常,在“Results of running suite”栏下还可以看到测试结果是否通过的信息:
方法testB测试失败了,这是由于在方法testB里输入了乱码的linkText导致的:
@Test public void testB() throws InterruptedException { waitForLinkText(webDriver, "登录"); webDriver.findElement(By.linkText("登录")).click(); waitForId(webDriver, "input1"); webDriver.findElement(By.id("input1")).sendKeys(usrInfo.usrName); webDriver.findElement(By.id("input2")).sendKeys(usrInfo.pwd); webDriver.findElement(By.id("signin")).click(); System.out.println("Login successfully."); }
*、如果运行出错,提示找不到classpath——创建“TESTNG_HOME”环境变量,值为“D:\TestNG”(这里我把“testng-6.9.9.jar”这个jar包放在了D盘的这个路径下):
创建CLASSPATH环境变量,值为“%CLASSPATH%;%TESTNG_HOME%\testng-6.9.9.jar;”:
之后重启Eclipse并运行测试。
相关阅读:TestNG测试框架在基于Selenium进行的web自动化测试中的应用(下篇)
网易云新用户大礼包:https://www.163yun.com/gift
本文来自天外归云的博客园,经作者蓝天祐授权发布。