如果自动化某个功能,测试数据不一样而操作步骤是一样的,那么就可以使用参数化来节省测试代码。
seldom集成了参数化功能。
参数化测试用例:
import seldom
from seldom import data
class BaiduTest(seldom.TestCase):
@data([
(1, 'seldom'),
(2, 'selenium'),
(3, 'unittest'),
])
def test_baidu(self, name, keyword):
"""
used parameterized test
:param name: case name
:param keyword: search keyword
"""
self.open("https://www.baidu.com")
self.type(id_="kw", text=keyword)
self.click(css="#su")
self.assertTitle(keyword+"_百度搜索")
通过@data()
装饰器来参数化测试用例。
参数化测试类:
也可以针对测试类进行参数化, 通过data_class
方法:
import seldom
from seldom import data_class
@data_class(
("keyword", "assert_tile"),
[("seldom", "seldom_百度搜索"),
("python", "python_百度搜索")
])
class YouTest(seldom.TestCase):
def test_case(self):
"""a simple test case """
self.open("https://www.baidu.com")
self.type(id_="kw", text=self.keyword)
self.click(css="#su")
self.assertTitle(self.assert_tile)
seldom支持将 csv文件的数据解析为 list。
表格内容如下(data.csv):
username | password |
---|---|
admin | admin123 |
guest | guest123 |
import seldom
from seldom import data
from seldom import csv_to_list
class YouTest(seldom.TestCase):
@data(csv_to_list(file="test_data/data.csv", line=2))
def test_login(self, username, password):
"""a simple test case """
print(username)
print(password)
# ...
csv_to_list()
方法excel文件内容转化为list。
- file: 指定csv文件的绝对路径。
- line: 指定从第几行开始读取,默认第一行。
seldom支持将excel文件的数据解析为 list。
import seldom
from seldom import data
from seldom import excel_to_list
class YouTest(seldom.TestCase):
@data(excel_to_list(file="test_data/data.xlsx", sheet="Sheet1", line=2))
def test_login(self, username, password):
"""a simple test case """
print(username)
print(password)
# ...
excel_to_list()
方法excel文件数据转化为list。
- file : 指定excel文件的绝对路径。
- sheet: 指定excel的标签页,默认名称为 Sheet1。
- line : 指定从第几行开始读取,默认第一行。
seldom支持将JSON文件的数据解析为 list/dict。
json 文件:
{
"login": [
["admin", "admin123"],
["guest", "guest123"]
]
}
import seldom
from seldom import data
from seldom import json_to_list
class YouTest(seldom.TestCase):
@data(json_to_list(file="test_data/data.json", key="login"))
def test_login(self, username, password):
"""a simple test case """
print(username)
print(password)
# ...
json_to_list()
方法JSON文件数据转化为list/dict。
- file : 指定JSON文件的绝对路径。
- key: 指定字典的key,默认不指定解析整个JSON文件。
有时测试数据会比较多,需要将数据存到测试文件,推荐使用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(path="test_sample.py",
rerun=0,
save_last_run=False,
)
更多的用法请查看ddt文档:https://ddt.readthedocs.io/en/latest/example.html