DDT ( Data-Driven Test) 参数化
DDT
DDT ( Data-Driven Test) 是针对 unittest 单元测试框架设计的扩展库。 允许使用不同的测试数据来运行一个测试用例。
pip install ddt
pip install ddt #如果 ddt 引用了 yaml 系统上要安装 pyyalm pip install pyyalm
---------------json文件-------------------------
{ "case1": {"search_key": "python"}, "case2": {"search_key": "selenium"}, "case3": {"search_key": "unittest"} }
-----------------------------------------------
----------------yaml文件--------------------------
case1: - "search_key": "python" case2: - "search_key": "selenium" case3: - "search_key": "unittest"
-----------------------------------------------
接下来创建运行文件test_baidu_data.py
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
import unittest from time import sleep from selenium import webdriver from os.path import dirname, abspath from ddt import ddt, data, unpack, file_data @ddt class TestBaidu(unittest.TestCase): @classmethod def setUpClass(cls): cls.driver = webdriver.Firefox() cls.baseUrl = "http://www.baidu.com" @classmethod def tearDownClass(cls): cls.driver.quit() def baidu_search(self, search_key): self.driver.get(self.baseUrl) self.driver.find_element_by_id("kw").send_keys(search_key) self.driver.find_element_by_id("su").click() sleep(2) # DDT 参数化使用方式一 @data( ["case1", "selenium"], ["case2", "python"], ["case3", "unittest"], ["case4", "pytest"] ) @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", "python"), ("case3", "unittest"), ("case4", "pytest") ) @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": "python"}, {"search_key": "unittest"}, {"search_key": "pytest"} ) @unpack def test_search3(self, search_key): print("第三组测试用例是:", search_key) self.baidu_search(search_key) self.assertEqual(self.driver.title, search_key + "_百度搜索") baseDir = dirname(dirname(abspath(__file__))) dataFileDir = baseDir + '/datafile' jsonFilePath = dataFileDir + "/ddt_data_file.json" yamlFilePath = dataFileDir + "/ddt_data_file.yaml" @file_data(jsonFilePath) def test_search4(self, search_key): print("第四组测试用例:", search_key) self.baidu_search(search_key) self.assertEqual(self.driver.title, search_key + "_百度搜索") @file_data(yamlFilePath) def test_search5(self, case): search_key = case[0]["search_key"] print("第五组测试用例:", search_key) self.baidu_search(search_key) self.assertEqual(self.driver.title, search_key + "_百度搜索") if __name__ == '__main__': unittest.main()
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
----------------------运行结果----------------------------
第一组测试用例是: case1
.第一组测试用例是: case2
.第一组测试用例是: case3
.第一组测试用例是: case4
.第二组测试用例是: case1
.第二组测试用例是: case2
.第二组测试用例是: case3
.第二组测试用例是: case4
.第三组测试用例是: selenium
.第三组测试用例是: python
.第三组测试用例是: unittest
.第三组测试用例是: pytest
.第四组测试用例: python
.第四组测试用例: selenium
.第四组测试用例: unittest
.第五组测试用例: python
.第五组测试用例: selenium
.第五组测试用例: unittest
.
Ran 18 tests in 55.443s
OK
***Repl Closed***
----------------------------------------------------------------------
使用 DDT 需要注意以下几点:
首先: 测试类需要通过 @ddt 装饰器进行装饰
其次: DDT 提供了不同形式的参数化。 这里列举了三组参数化, 第一组为列表,第二组为元组,第三章为字典。 需要注意的是,
字典的 key 与测试方法的参数要保持一致。
DDt 同样支持数据文件的参数化。 它封装了数据文件的读取,让我们更专注于数据文件的内容,以及在测试用例中的使用,而不需
关心数据文件是如何被读取进来的
yaml 的取值 与 json 有所不同,yaml 的每一条用例都被解析为 [{'search_key': 'python'}], 所以要想取得搜索文字,则
需要通过 case[0]['search_key'] 的方式获取
浙公网安备 33010602011771号