DDT(Data-Driven Tests) 是针对unittest单元测试框架设计的扩展库。允许使用不同的测试数据来运行一个测试用例,并将其展示为多个测试用例
示例代码:
import unittest
from time import sleep
from selenium import webdriver
from ddt import ddt,data,file_data,unpack
@ddt
class TestBaidu(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.driver=webdriver.Chrome()
cls.base_url="https://www.baidu.com/"
def baidu_search(self,search_key):
self.driver.get(self.base_url)
self.driver.find_element_by_id("kw").send_keys(search_key)
self.driver.find_element_by_id("su").click()
sleep(3)
#参数化使用方式一(读取列表数据)
@data(["case1","selenium"],["case2","ddt"],["case3","python"])
@unpack
def test_search1(self,case,search_key):
print("第一组测试用例",case)
self.baidu_search(search_key)
self.assertEqual(self.driver.title,search_key+"_百度搜索")
# 参数化使用方式二(读取元组数据)
@data(("case1", "selenium"), ("case2", "ddt"), ("case3", "python"))
@unpack
def test_search2(self, case, search_key):
print("第二组测试用例", case)
self.baidu_search(search_key)
self.assertEqual(self.driver.title, search_key + "_百度搜索")
# 参数化使用方式三(读取字典数据)
@data({"search_key":"selenium"}, {"search_key":"ddt"}, {"search_key":"python"})
#若测试方法有多个参数,则应写成:
@data({"search_key":"selenium","key","test"}, {"search_key":"ddt","key","test"
}, {"search_key":"python","key","test"})
@unpack
def test_search3(self, search_key):
print("第三组测试用例", search_key)
self.baidu_search(search_key)
self.assertEqual(self.driver.title, search_key + "_百度搜索")
#参数化使用方式四(读取Json文件)
#ddt_data_file.json文件内容如下:
# {
# "case1": {"search_key": "python"},
# "case2": {"search_key": "ddt"},
# "case3": {"search_key": "Selenium"}
# }
@file_data("ddt_data_file.json")
def test_search4(self,search_key):
print("第四组测试用例", search_key)
self.baidu_search(search_key)
self.assertEqual(self.driver.title, search_key + "_百度搜索")
# 参数化使用方式五(读取yaml文件)
#ddt_data_file.yaml文件内容如下
# case1:
# -search_key: "python"
# case2:
# -search_key: "ddt"
# case3:
# -search_key: "unittest"
@file_data("ddt_data_file.yaml")
def test_search5(self, case):
search_key=case[0]["search_key"]#与解析json文件的不同之处
print("第五组测试用例", search_key)
self.baidu_search(search_key)
self.assertEqual(self.driver.title, search_key + "_百度搜索")
@classmethod
def tearDownClass(cls):
cls.driver.quit()
if __name__=="__main__":
unittest.main(verbosity=2)
注意事项:
1.如使用DDT,测试类需要通过@ddt装饰器进行装饰
2.DDT可提供不同数据类型参数化,本例列举了列表、元组、字典三种类型。若使用字典的话,字典的key需与参数保持一致。
3.DDT支持数据文件参数化,参考方式四、五分别为读取json文件、yaml数据文件。若数据文件与测试文件不在同一目录下,需指定数据文件路径
版权声明:本文为xiaoxiao_chen945原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。