Selenium 項目實戰(一)自動化測試模型


進行實戰之前,我們先來了解一下自動化測試模型

一、線性測試

根據應用的操作步驟來編寫對應的測試腳本,每個測試腳本相對獨立且不產生其它的依賴於調用。

優點:每個測試腳本都是完整且獨立的,可單獨執行
缺點:開發和維護成本很高,存在很多重復的操作,且操作發生改變時需要修改多個地方

以登錄豆瓣為例,注意豆瓣登錄區域是一個iframe,需先切換到 iframe 再進行操作

示例代碼:

import time
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait

driver = webdriver.Chrome()
driver.maximize_window()

# 1. 打開豆瓣首頁
driver.get("https://www.douban.com/")

# 2. 登錄(先來一條簡單的,默認未登錄)
# 切換到登錄的iframe
login_frame = driver.find_element_by_css_selector("div.login iframe")
WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it(login_frame))
# 點擊密碼登錄
driver.find_element_by_css_selector("li.account-tab-account").click()
# 輸入賬號密碼
driver.find_element_by_css_selector("#username").send_keys("****")
driver.find_element_by_css_selector("#password").send_keys("****")
# 點擊登錄
driver.find_element_by_css_selector(".account-form-field-submit").click()
time.sleep(2)
# 切換到默認頁面
driver.switch_to.default_content()

# 3. 判斷是否登錄成功
eles = driver.find_elements_by_css_selector(".nav-user-account")
if len(eles) > 0:
    print("登錄成功")

driver.quit()

二、模塊化驅動測試

借鑒了編程語言中的模塊化思想,把重復的操作封裝成一個公共的模塊,當需要這一操作時直接調用公共模塊即可,大大提高了開發效率,簡化了維護的復雜性。

例如上面的測試腳本,可以把登錄功能封裝成一個方法,需要時直接調用

import time
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait

driver = webdriver.Chrome()
driver.maximize_window()

def login():
    # 切換到登錄的iframe
    login_frame = driver.find_element_by_css_selector("div.login iframe")
    WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it(login_frame))
    # 點擊密碼登錄
    driver.find_element_by_css_selector("li.account-tab-account").click()
    # 輸入賬號密碼
    driver.find_element_by_css_selector("#username").send_keys("****")
    driver.find_element_by_css_selector("#password").send_keys("****")
    # 點擊登錄
    driver.find_element_by_css_selector(".account-form-field-submit").click()
    time.sleep(2)
    # 切換到默認頁面
    driver.switch_to.default_content()

driver.get("https://www.douban.com/")
login()
eles = driver.find_elements_by_css_selector(".nav-user-account")
if len(eles) > 0:
    print("登錄成功")

driver.quit()

三、數據驅動

模塊化驅動測試很好的解決了腳本重復的問題,但是如上面的登錄用例,當需要使用不同的賬號登錄時還是需要重新編寫用例,所以我們期望根據數據的改變來驅動測試,也就是數據的參數化,其中的數據可以是字典、數組或者是外部文件(csv、excel 等等),目的是實現數據與腳本的分離。

import time
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait

driver = webdriver.Chrome()
driver.maximize_window()

douban_account = {"username":"****", "password":"****"}

def login(account):
    # 切換到登錄的iframe
    login_frame = driver.find_element_by_css_selector("div.login iframe")
    WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it(login_frame))
    # 點擊密碼登錄
    driver.find_element_by_css_selector("li.account-tab-account").click()
    # 輸入賬號密碼
    driver.find_element_by_css_selector("#username").send_keys(account["username"])
    driver.find_element_by_css_selector("#password").send_keys(account["password"])
    # 點擊登錄
    driver.find_element_by_css_selector(".account-form-field-submit").click()
    time.sleep(2)
    # 切換到默認頁面
    driver.switch_to.default_content()

driver.get("https://www.douban.com/")
login(douban_account)
eles = driver.find_elements_by_css_selector(".nav-user-account")
if len(eles) > 0:
    print("登錄成功")

driver.quit()

四、關鍵字驅動測試

關鍵字驅動就是通過改變關鍵字來驅動測試,如目前市面上的工具 QTP、Rotbot Framework 都是典型的關鍵字驅動的工具,封裝了底層代碼,提供給用戶獨立的圖形界面,降低了腳本編寫難度。Selenium IDE 也可以看做一種關鍵字驅動的自動化工具。

 

 例如上面的腳本:打開百度 -> 在搜索輸入框輸入 selenium -> 點擊“百度一下”

注:在自動化實施過程中,可以根據項目需求選擇合適的模型來開展自動化測試。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM