seldom之數據驅動
如果自動化某個功能,測試數據不一樣而操作步驟是一樣的,那么就可以使用參數化來節省測試代碼。
seldom是我在維護一個Web UI自動化測試框,這里跟大家分享seldom參數化的實現。
GitHub:https://github.com/SeldomQA/seldom
參數化測試用例
import seldom
from seldom import data
class BaiduTest(seldom.TestCase):
@data([
("case1", "seldom"),
("case2", "selenium"),
("case3", "unittest"),
])
def test_baidu(self, name, keyword):
"""
參數化測試用例
:param name: 用例名稱
:param keyword: 搜索關鍵字
"""
self.open("https://www.baidu.com")
self.type(id_="kw", text=keyword)
self.click(css="#su")
self.assertTitle(keyword+"_百度搜索")
if __name__ == '__main__':
seldom.main()
通過@data()
裝飾器來參數化測試用例,用法非常簡單。
將測試數據寫代碼里面並不是特別優雅的方式,尤其在數據比較多長時間。那么通過數據文件管理可能會更加優雅。
讀取csv文件
seldom支持csv文件的數據解析為 list。
讀取CSV文件中的數據。
import seldom
from seldom import data
from seldom import csv_to_list
class YouTest(seldom.TestCase):
@data(csv_to_list(file="data.csv", line=2))
def test_login(self, username, password):
"""a simple test case """
self.open("https://login.xxx.com")
self.type(id_="user", text=username)
self.type(id_="pawd", text=password)
# ...
csv_to_list()
方法CSV文件內容轉化為list。
- file: 指定csv測試文件。
- line: 指定從第幾行開始讀取,默認第一行。
CSV文件不支持多個Sheet,這就要求一個組數據必須創建一個單獨JSON文件,如果數據多了之后就需要創建許多單獨的JSON文件,這就不太方便了。
讀取excel文件
seldom支持excel文件的數據解析為list。
Excel文件可以創建多個Sheet標簽,通過不同的標簽管理數據。
import seldom
from seldom import data
from seldom import excel_to_list
class YouTest(seldom.TestCase):
@data(excel_to_list(file="data.xlsx", sheet="login", line=2))
def test_login(self, username, password):
"""test login"""
self.open("https://login.xxx.com")
self.type(id_="user", text=username)
self.type(id_="pawd", text=password)
@data(csv_to_list(file="data.xlsx", sheet="search", line=2))
def test_search(self, keyword):
"""test search """
self.open("https://www.baidu.com")
self.type(id_="kw", text=keyword)
excel_to_list()
方法excel文件數據轉化為list。
- file : 指定excel文件的絕對路徑。
- sheet: 指定excel的標簽頁,默認名稱為 Sheet1。
- line : 指定從第幾行開始讀取,默認第一行。
#### 讀取JSON文件
seldom支持將JSON文件的數據解析為 list/dict。
json 文件:
{
"search":[
["python"],
["seldom"],
["unittest"]
],
"login": [
["admin", "admin123"],
["guest", "guest123"]
]
}
一個JSON文件里面同樣可以表示不同格式的的文件。
import seldom
from seldom import data
from seldom import json_to_list
class YouTest(seldom.TestCase):
@data(json_to_list(file="data.json", key="login"))
def test_login(self, username, password):
"""test login """
self.open("https://login.xxx.com")
self.type(id_="user", text=username)
self.type(id_="pawd", text=password)
@data(csv_to_list(file="data.json", key="search"))
def test_search(self, keyword):
"""test search """
self.open("https://www.baidu.com")
self.type(id_="kw", text=keyword)
json_to_list()
方法JSON文件數據轉化為list/dict。
- file : 指定JSON文件的絕對路徑。
- key: 指定字典的key,默認不指定解析整個JSON文件。
使用第三方ddt
seldom也支持第三方ddt庫。
GitHub:https://github.com/datadriventests/ddt
安裝:
> pip install ddt
創建測試文件test_data.json
:
{
"test_data_1": {
"word": "seldom"
},
"test_data_2": {
"word": "unittest"
},
"test_data_3": {
"word": "selenium"
}
}
在 seldom 使用ddt
。
import seldom
from ddt import ddt, file_data
@ddt
class YouTest(seldom.TestCase):
@file_data("test_data.json")
def test_case(self, word):
"""a simple test case """
self.open("https://www.baidu.com")
self.type(id_="kw", text=word)
self.click(css="#su")
self.assertTitle(word + "_百度搜索")
if __name__ == '__main__':
seldom.main()
更多的用法請查看ddt文檔:https://ddt.readthedocs.io/en/latest/example.html