【Web自动化测试——代码篇十一】自动化测试模型——线性测试和模块化驱动测试...
自动化测试模型可以看作自动化测试框架与工具设计的思想。随着自动化测试技术的发展,演化为以下几种模型:
- 线性测试
- 模块化驱动侧式
- 数据驱动测试
- 关键字驱动测试
线性测试
线性测试较为简单,前几篇文章编写的脚本就属于线性测试,因此就在该篇文章中顺便提一下。
线性测试的每个脚本都是相对独立的(不产生其他依赖和调用),所以任何一个测试用例脚本拿出来都可以单独执行。
优点: 每一个脚本都是完整且独立的
缺点: 1、开发成本高。测试用例之间可能会存在重复的操作。
2、维护成本高。因为测试用例之间存在重复操作,所以当这些重复操作发生变化时,需要对它们逐一更改。
模块化驱动测试
由于线性测试的缺点太过于明显,因此我们需要新的模型来代替它。做法很简单,借鉴编程语言中的模块化思想,把重复的操作独立成公共模块(公共方法),当脚本需要时我们就可以调用该公共模块。
- 提高了开发效率,不用重复编写相同的操作脚本。
- 简化了维护的复杂性,重复操作的脚本发生变化时只需要修改公共模块的部分。
Java
测试目录:
share.java package PublicMethods; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import java.util.concurrent.TimeUnit; import org.openqa.selenium.firefox.FirefoxDriver; public class share { private static WebDriver driver; public static WebDriver OpenDriver(String url) { driver = new FirefoxDriver(); driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); driver.get(url); return driver; } public static void UserLogin(WebDriver driver) throws InterruptedException { Thread.sleep(2000); driver.findElement(By.xpath("//*[@id='username']")).sendKeys("admin"); driver.findElement(By.xpath("//*[@id='password']")).sendKeys("123456"); Thread.sleep(2000); driver.findElement(By.xpath("//*[@id='login_button']")).click(); Thread.sleep(2000); } public static void UserLogout(WebDriver driver) throws InterruptedException { driver.findElement(By.xpath("//*[@id='logout_button']")).click(); Thread.sleep(2000); } }
LoginTest.java package Test; import PublicMethods.share; import org.openqa.selenium.WebDriver; public class LoginTest { public static void main(String[] args) throws InterruptedException { // TODO Auto-generated method stub WebDriver driver = OpenDriver("file:///D:/%E7%99%BB%E5%BD%95.html"); UserLogin(driver); share.UserLogout(driver); driver.quit(); } }
Python
测试目录:
share.py from time import * from selenium import webdriver from selenium.webdriver.common.by import By class share(): # 启动浏览器 def open_driver(self, url): driver = webdriver.Firefox() driver.implicitly_wait(10) driver.get(url) return driver # 登录账号 def user_login(self, driver): sleep(2) driver.find_element(By.XPATH, "//*[@id='username']").send_keys('admin') driver.find_element(By.XPATH, "//*[@id='password']").send_keys('123456') sleep(2) driver.find_element(By.XPATH, "//*[@id='login_button']").click() sleep(2) # 退出账号 def user_logout(self, driver): driver.find_element(By.XPATH, "//*[@id='logout_button']").click() sleep(2)
LoginTest.py from public import share # 调用启动浏览器方法 driver = share.share().open_driver('file:///D:/%E7%99%BB%E5%BD%95.html') share.share().user_login(driver) # 调用登录账号方法 share.share().user_logout(driver) # 调用退出账号方法
Ruby
测试目录:
module Share require 'rubygems' require 'selenium-webdriver' # 启动浏览器 def openDriver(url) driver = Selenium::WebDriver.for :firefox driver.manage.timeouts.implicit_wait = 10 driver.navigate.to url return driver end # 登录账号 def userLogin(driver) sleep(2) driver.find_element(:xpath => "//*[@id='username']").send_keys('admin') driver.find_element(:xpath => "//*[@id='password']").send_keys('123456') sleep(2) driver.find_element(:xpath => "//*[@id='login_button']").click sleep(2) end # 退出账号 def userLogout(driver) driver.find_element(:xpath => "//*[@id='logout_button']").click sleep(2) end end
require File.expand_path('../../publicMethods/share',__FILE__) class LoginTest extend Share driver = LoginTest.openDriver('file:///D:/%E7%99%BB%E5%BD%95.html') LoginTest.userLogin(driver) LoginTest.userLogout(driver) driver.quit end