6.1 自动化测试模型介绍
6.1.1 线性测试 :其实就是单纯地来模拟用户完整的操作场景。
优势就是每一个脚本都是完整且独立的;
缺陷测试用例的开发与维护成本很高。
6.1.2 模块化驱动测试 :编程语言中模块化的思想,把重复的操作独立成公共模块,当用例执行过程中需要用到这一模块操作时则被调用,这样就最大程度上消除了重复,从而提高测试用例的可维护性。
6.1.3 数据驱动测试 :数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变.(我们读取的是定义的数组、字典,或者是外部文件(excel、csv、txt、xml等)都可以看作是数据驱动。)
6.1.4 关键字驱动测试:
6.2 模块化实例
线性测试实例:
package com.cy; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; public class TestModel { public static void main(String[] args) throws InterruptedException { System.out.println("博客园登录 操作 退出"); WebDriver driver =new FirefoxDriver(); driver.get("https://passport.cnblogs.com/user/signin?AspxAutoDetectCookieSupport=1"); // 清除input 输入用户名 driver.findElement(By.id("input1")).clear(); driver.findElement(By.id("input1")).sendKeys("Smile燕"); // 清除input 输入密码 driver.findElement(By.id("input2")).clear(); driver.findElement(By.id("input2")).sendKeys("acy123"); // 点击登录 driver.findElement(By.id("signin")).click(); Thread.sleep(5000); /** * 操作 */ // 退出 driver.findElement(By.linkText("退出")).click(); Thread.sleep(5000); // // 接受弹框 driver.switchTo().alert().accept(); Thread.sleep(5000); // 关闭浏览器 driver.quit(); } }
模块化驱动测试实例: 把登录和退出进行封装。
package com.cy; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; public class TestModel { public static void main(String[] args) throws InterruptedException { System.out.println("博客园登录 操作 退出"); WebDriver driver =new FirefoxDriver(); /** * 操作 */ login(driver); Thread.sleep(5000); logout(driver); Thread.sleep(5000); // 关闭浏览器 driver.quit(); } public static void login(WebDriver driver) { driver.get("https://passport.cnblogs.com/user/signin?AspxAutoDetectCookieSupport=1"); // 清除input 输入用户名 driver.findElement(By.id("input1")).clear(); driver.findElement(By.id("input1")).sendKeys("Smile燕"); // 清除input 输入密码 driver.findElement(By.id("input2")).clear(); driver.findElement(By.id("input2")).sendKeys("acy123"); // 点击登录 driver.findElement(By.id("signin")).click(); } public static void logout(WebDriver driver){ // 退出 driver.findElement(By.linkText("退出")).click(); // // 接受弹框 driver.switchTo().alert().accept(); } }
我们可以把这两个方法 封装成单独的文件中供其它用例调用。这样对于每个用例来说就简便了许多,也更易于维护。
数据驱动实例:前面提到关于数据驱动的形式有很多,我们既可以通过定义变量的方式进行参数化,也可以通过定义数组、字典的方式进行参数化,还可以通过读取文件(txtcsvxml)的方式进行参数化。
package com.cy; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; public class TestModel { public static void main(String[] args) throws InterruptedException { System.out.println("博客园登录 操作 退出"); WebDriver driver =new FirefoxDriver(); /** * 操作 */ String username="Smile燕"; String password="acy123@@"; login(driver,username,password); Thread.sleep(5000); logout(driver); Thread.sleep(5000); // 关闭浏览器 driver.quit(); } public static void login(WebDriver driver,String username,String password) { driver.get("https://passport.cnblogs.com/user/signin?AspxAutoDetectCookieSupport=1"); // 清除input 输入用户名 driver.findElement(By.id("input1")).clear(); driver.findElement(By.id("input1")).sendKeys(username); // 清除input 输入密码 driver.findElement(By.id("input2")).clear(); driver.findElement(By.id("input2")).sendKeys(password); // 点击登录 driver.findElement(By.id("signin")).click(); } public static void logout(WebDriver driver){ // 退出 driver.findElement(By.linkText("退出")).click(); // // 接受弹框 driver.switchTo().alert().accept(); } }
关键字驱动测试实例:(未完待续哈。。。)