使用“數據驅動測試”之前應該知道的


我曾經寫過一篇博客《自動化測試---被玩壞的數據驅動》討論過數據驅動測試,當時主要是吐槽那些教大家讀取txt、csv/excel、xml文件文章。“我教大家如何做數據驅動測試,來!我們先學習如何讀取excel文件。。。”,然后,網上也有大量的文章來介紹如何用excel來管理測試數據的,甚至是測試報告展示的。

讀各種數據文件就是驅動測試?這樣真的方便做測試么?


#### 什么是數據驅動測試?

從它的定義來看,就是數據的改變從而驅動自動化測試的執行,最終引起測試結果的改變。說的直白些,就是參數化的應用。


#### “他們”認為數據驅動什么樣子?

這里以csv文件為例,大多文章也是選用的csv/excel文件。

參數、斷言、結果都有了,大概就這樣子吧?

接下來需要將數據讀取出來。

# coding=utf-8
import csv
import codecs
from itertools import islice

# 讀取本地 CSV 文件
data = csv.reader(codecs.open('user_info.csv', 'r', 'utf_8_sig'))

# 用戶存放用戶數據
users = []

# 循環輸出每一行信息
for line in islice(data, 1, None):
    users.append(line)

# 打印
print(users)

得到結果:

[['', '123', '請輸入帳號', ''],
['user', '', '請輸入密碼', ''],
['error', 'error', '帳號或密碼錯誤',''],
['admin', 'admin123', 'admin你好', ''],
['guest', 'guest123', 'guest你好', '']]

這里得到一個測試數據的二維數組。

那么接下來要用這些數據做自動化測試了?被測試功能如下:

測試代碼如下:

# 測試登陸功能
from selenium import webdriver
from time import sleep


driver = webdriver.Chrome()

for user in users:
    driver.get("http://127.0.0.1:8000/")
    driver.find_element_by_id("inputUsername").send_keys(user[0])
    driver.find_element_by_id("inputPassword").send_keys(user[1])
    driver.find_element_by_id("Login").click()
    sleep(2)    
    tips = driver.find_element_by_id("tips").text
    print(tips)
    print(user[2])
    try:
        assert tips == user[2]
    except AssertionError as msg:
        print(msg)
        user[3] = "Faile"
    else:
        user[3] = "Pass"

driver.quit()

# 打印結果
print(users)

運行之后的測試結果:

[['', '123', '請輸入帳號', 'Pass'],
['user', '', '請輸入密碼', 'Pass'],
['error', 'error', '帳號或密碼錯誤','Pass'],
['admin', 'admin123', 'admin你好', 'Faile'],
['guest', 'guest123', 'guest你好', 'Faile']]

看,結果已經寫到最后一列了。

最后,我們還需要將測試結果寫回到csv文件中。

# 讀取本地 CSV 文件
csv_file = csv.writer(codecs.open('user_info.csv', 'w','utf_8_sig'), 
                                  dialect="excel")

# 寫入標題
csv_file.writerow(['用戶名','密碼','斷言','結果'])

# 循環寫入數據
for user in users:
    csv_file.writerow(user)

# 打印
print(users)

打開CSV文件,結果如下:

看結果一列,是不是已經有了結果。


#### 那么,下來思考幾個問題。

1、測試結果是否太過簡單了,只有“Pass”和“Faile”,沒有任何失敗的日志,是否需要另起一列記錄失敗日志?

2、如何統計出總失敗的用例數和成功的用例數?

3、如果想單獨驗證失敗的兩條用例應該怎么做?例如上圖中的最后兩條失敗的用例。

4、上面的測試代碼中,有多少是真正用在測試操作的,至少一半都在讀寫csv文件,是否需要做封裝,想想怎么封裝更簡單?

5、在獲取具體讀取數據的時候,我們使用的是user[0]、user[1]、user[2],你真的容易分辨這些數據么?如果又加了一列數據呢?不改代碼是不是就對不上號了。

6、這只是一組登錄數據。我們知道不同的功能,所需要的數據是不一樣的,比如搜索,只需要“搜索關鍵字”, 例如注冊,需要“郵箱”、“密碼”、“重復密碼”、“昵稱”等。我們一個系統有N多功能的好吧!

7、如第6條,這些測試數據要怎么放,放在一個csv文件還是多個文件?怎么統計測試結果?

所以,知道讀取數據文件有多坑了吧!?誰說的方便維護?你一定沒用這種方式寫過真正的項目吧!一直處在跟着別人寫demo階段。如果你有更“高大上”的處理方式歡迎請告訴我,謝謝!

下一篇,我將介紹基於單元測試框架的數據驅動。


免責聲明!

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



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