自動化測試如何根據測試資料反覆測試(DDT)
(圖檔取至 xUnit Test pattern 一書)
這篇文章主要說明如何根據測試資料執行測試程式。也就是所謂的 Data Driven Testing (DDT)。
這樣的測試特別適用在當多有多組變數資料輸入需要測試的情況。
常見的像是帳號密碼的測試。測試每一組帳號密碼對系統的反應
這樣的測試的特徵是測試步驟都是一致但是只有測試帳號不同。
測試情境
我們用一個測試情境說明這樣的自動化測試如何處理。
舉 google Search 為例。我們將搜尋關鍵字建立成測試資料,
接著用這些搜尋關鍵字一一用自動化測試測試,看看Google 搜尋結果是否如預期。
測試步驟如下
1. 準備搜尋關鍵字測試資料,定義在檔案d:\input_file.txt
Search1
Search2
Search3
…
2. 瀏覽 www.google.com
3. 將測試資料的關鍵字輸入
4. 檢查搜尋結果是含有輸入的關鍵字
5. 重複上述步驟直到所有測試資料測試完畢為止
程式說明
這個程式我們用幾個小技巧
讀取檔案資料
讀檔案。將檔案中每一行的資料讀到 values 中。
source = open("d:\input_file.txt", "r") values = source.readlines() source.close() |
等待網頁元件出現
為了避免因為瀏覽器顯示時間的關係,造成某些網頁元件出現的時間比較慢導致自動化測試失敗
因此,這裡使用一個 Explict Wait 的小技巧。另外指定 Expected_conditions,程式會等待到該元件找到的時候才會繼續進行。
from selenium.webdriver.support import expected_conditions as EC
SearchTextField = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.NAME, “q”)))
網頁結果的搜尋
那麼我們怎麼知道網頁搜尋結果是含有我們輸入的關鍵字呢?
Google 在搜尋結果頁面的最下面都會顯示 “xxxxx的相關搜尋”
因此我們擷取這個網頁原件,Xpath 為 “//*[@id=’brs’]/h3”
同樣利用 Explict Wait 的小技巧,等待到該網頁原件出現程式才會繼續進行。
取道該原件之後,用 text的屬性就可以將該網頁上顯示的文字取得。
element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//*[@id='brs']/h3")))
element.text
最後再驗證該網頁文字是否含有原先設定的文字。如果是中文的話,記得特別要用 unicode處理。 u'TextHere' assert str(u'element.text').find(search)
Python程式範例 (DDT, Explicit Wait)
[pastacode lang=”python” message=”” highlight=”” provider=”manual”]
# -*- coding: utf-8 -*-
from selenium.webdriver import FirefoxProfile
from selenium.webdriver.support.wait import WebDriverWait
import re
from selenium.webdriver.common.by import By
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
source = open("d:\input_file.txt", "r")
values = source.readlines()
source.close()
driver = webdriver.Firefox()
# Execute For loop for each String in the values array
for search in values:
driver.get('http://www.google.com')
SearchTextField = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.NAME, "q")))
SearchTextField.send_keys(search)
SearchTextField.submit()
#driver.find_element_by_name("q").send_keys(search)
#driver.find_element_by_id("btnG").click()
element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//*[@id='brs']/h3")))
print "search Keyword =" + search
print "Text shown on Google Search result page: " + element.text
assert str(u'element.text').find(search)
driver.quit()
[/pastacode]