自動化測試模型,即自動化測試框架與工具設計的思想。有四種常用模型,分別是線性模型、模塊化驅動模型、數據驅動模型和關鍵字驅動模型。
在工作實踐中,最常用的是模塊化驅動和數據驅動兩種,聯合使用的場景十分廣泛。
1、線性模型
概念:線性模型的每個腳本都是相互獨立的,且不會產生其他依賴與調用,單純的來模擬用戶完整的操作場景。邏輯清晰,但缺點非常明顯:開發成本高,用例之間存在重複的操作。
線性模型用一個簡單的登錄後退出的操作說明:
from selenium import webdriver
from time import sleep
driver = webdriver.Firefox()#推薦使用Firefox
# 加載瀏覽器驅動
driver.get("http://localhost")
driver.find_element_by_name("username").clear()#清空文本框的用戶名
driver.find_element_by_name("username").send_keys("forTest")
driver.find_element_by_name("password").clear()
driver.find_element_by_name("password").send_keys("123456")
driver.find_element_by_name("Submit").click()# 點擊“登錄”按鈕
sleep(3)#這裏使用了顯式等待,等待登錄後的首頁頁面元素加載完成。否則下面可能會找不到‘退出’。
driver.find_element_by_link_text("退出").click()
sleep(2)
driver.switch_to_alert().accept()#點擊退出後會彈出提示框,要點擊確認
driver.quit()# 關閉瀏覽器及其驅動,單個窗口也可以使用driver.close()
2、模塊化驅動模型
概念:將重複的操作封裝成公共模塊,當用例執行過程中需要用到這一模塊操作時直接調用即可。相對與線性模型,最大的優勢是最大限度消除了重複,從而提高了開發效率和提高測試用例的可維護性。缺點:雖然操作步驟相同,但是用到的測試數據可能不同。
(1)common.py
import random
class common():
def type_getRandomNum(self):
try:
self.randoma = random.randint(100000, 999999)
return self.randoma
except BaseException as msg:
print(msg)
(2)instance1.py
import common
def instance1(self):
try:
randomNum1 = common.type_getRandomNum()
print("randomNum1 is :%d"%randomNum1)
except BaseException as msg:
print(msg)
(3)instance2.py
import common
def instance2(self):
try:
randomNum2 = common.type_getRandomNum()
print("randomNum2 is :%d"%randomNum2)
except BaseException as msg:
print(msg)
3、數據驅動模型
概念:將測試中的測試數據和操作分離,數據存放在文件中單獨維護(不直接放在代碼中)。通過數據的改變從而驅動自動化測試的執行,最終引起測試結果的改變。實際就是將測試數據參數化。
(1)test_login.py
from login import test_login
from testCase.model.getuserInfo import getYaml
class userMgt():
def test_login(self):
#調用函數獲取賬號密碼
data = getYaml('userInfo.yaml')
username = data['user']['username']
psd = data['user']['password']
test_login.login_action(self,username,psd)
sleep(3)
(2)login.py
from selenium import webdriver
from time import sleep
class test_login():
def login_action(self,username,psd):#公共模塊參數化
driver = webdriver.Firefox()
driver.get("http://localhost")
driver.find_element_by_name("username").clear()
driver.find_element_by_name("username").send_keys(username)
driver.find_element_by_name("password").clear()
driver.find_element_by_name("password").send_keys(psd)
driver.find_element_by_name("Submit").click()
(3)getuserInfo.py
from ruamel import yaml
def getYaml(yamlName):
#讀取yaml文件
with open('F:\\phomeNetFront\\test_data\\yaml\\'+yamlName,'r',encoding="utf-8") as file:
data=yaml.load(file, Loader=yaml.RoundTripLoader)
return data
(4)userInfo.yaml
user:
username: forTest
password: 123456
4、關鍵字驅動模型
概念:即通過關鍵字的改變引起測試結果的改變。Selenium IDE也是一種傳統的關鍵字驅動的自動化工具,可以進行錄製、回放等操作。對於沒多少編程經驗的初學者來說,Selenium IDE是一個不錯的自動化測試入門工具。這裏不具體展開。