Selenium自行整理【四十五】
作者:互联网
8.5、TestNG 测试技巧
8.5.1、依赖性测试
比如下面的测试代码:
package com.testng.test;
import static org.testng.Assert.assertEquals;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.Test;
public class testMail {
//登录方法
public static void login(WebDriver driver,String username,String password){
driver.findElement(By.id("idInput")).clear();
driver.findElement(By.id("idInput")).sendKeys(username);
driver.findElement(By.id("pwdInput")).clear();
driver.findElement(By.id("pwdInput")).sendKeys(password);
driver.findElement(By.id("loginBtn")).click();
}
//退出方法
public static void logout(WebDriver driver){
driver.findElement(By.linkText("退出")).click();
}
@Test
public void verifyLogin() {
WebDriver driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
driver.get("http://www.126.com");
String username = "testingwtb";
String password = "a123456";
login(driver,username,password); //登录
String text = driver.findElement(By.id("spnUid")).getText();
assertEquals(text, "testingwtb@126.com");
logout(driver); //退出
driver.quit();
}
@Test (dependsOnMethods = {"verifyLogin"})
public void verifySearchMail() {
WebDriver driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
driver.get("http://www.126.com");
String username = "testingwtb";
String password = "a123456";
login(driver,username,password);
//搜索
WebElement search = driver.findElement(By.xpath("//input[@class='nui-ipt-input' and @type='text']"));
search.sendKeys("小明");
search.sendKeys(Keys.ENTER);
String text = driver.findElement(By.className("nui-title-text")).getText();
System.out.println(text);
assertEquals(text,"搜索结果");
logout(driver);
driver.quit();
}
}
--------------------------------------------------------------------------------------------------------------------------------、
上面的例子中定义了两个测试:一个验证登录,另一个验证账户信息。请注意,通过使用 Test 注释的dependsOnMethods={"verifyLogin"}子句,verifyAccountInfo 测试指定了它依赖 verifyLogin()方法。
8.5.2、忽略测试
有时候测试用例还没准备好,可以给测试用例加上@Test(enable = false),用来路过此用例的执行,并且并不会将该用例计算到 Skips 的结果中 。
8.5.3、参数化测试
TestNG 中另一个有趣的特性是参数化测试。在 JUnit 中,如果您想改变某个受测方法的参数组,就只能给每个不同的参数组编写一个测试用例。多数情况下,这不会带来太多麻烦。然而,我们有时会碰到一些情况,对其中的业务逻辑,需要运行的测试数目变化范围很大。
在这样的情况下,使用 JUnit 的测试人员往往会转而使用 FIT(验收测试框架)这样的框架,因为这样就可以用表格数据驱动测试。但是 TestNG 提供了开箱即用的类似特性。通过在 TestNG 的 XML 配置文件中放入参数化数据,就可以对不同的数据集重用同一个测试用例,甚至有可能会得到不同的结果。这种技术完美地避免了只能假定一切正常的测试,或是没有对边界进行有效验证的情况。
例 1:通过 testng.xml 传递参数给测试代码
package com.testng.test;
import static org.testng.Assert.assertEquals;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
public class TestBaidu {
private WebDriver driver;
private String baseUrl;
@BeforeClass
public void setUp() throws Exception {
driver = new FirefoxDriver();
baseUrl = "https://www.baidu.com/";
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
}
@Test
@Parameters("test1") //设置测试方法的入参
public void testCase(String test1) throws Exception {
driver.get(baseUrl + "/");
System.out.println("sreach key value:"+ test1);
driver.findElement(By.id("kw")).sendKeys(test1);
driver.findElement(By.id("su")).click();
Thread.sleep(2000);
String title =driver.getTitle();
assertEquals(title, test1+"_百度搜索");
}
@AfterClass
public void tearDown() throws Exception {
driver.quit();
}
}
--------------------------------------------------------------------------------------------------
对应的 testng.xml 文件配置如下:
标签:String,四十五,Selenium,driver,testng,自行,findElement,org,import 来源: https://blog.csdn.net/qq_31942921/article/details/98875159