自動化測試如何根據測試資料反覆測試(DDT)

自動化測試如何根據測試資料反覆測試(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]

 

Leave a Reply

Your email address will not be published. Required fields are marked *