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