自动化测试之基于DDT的测试数据参数化

  DDT是针对 unittest 单元测试框架设计的扩展库。允许使用不同的测试数据来运行一个测试用例,并将其展示为多个测试用例。

  安装:

pip install ddt

   使用:

import unittest
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
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()
        time.sleep(3)

    @data(["case1", "selenium"], ["case2", "ddt"], ["case3", "python"])
    @unpack
    def test_search1(self, case, 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)

  结果:

  参数化使用方式一:

@data(["case1", "selenium"], ["case2", "ddt"], ["case3", "python"])

  参数化使用方式二:

@data(("case1", "selenium"), ("case2", "ddt"), ("case3", "python"))

  参数化使用方式三:

@data({"search_key": "selenium"}, {"search_key": "ddt"}, {"search_key":"python"})

  使用 DDT 需要注意以下几点:

  1. 测试类需要通过@ddt 装饰器进行装饰

  2. DDT 提供了不同形式的参数化。这里列举了三组参数化,第一组为列表,第二组为元组,第三组为字典。需要注意的是,字典的 key 与测试方法的参数要保持一致。

  DDT 同样支持数据文件的参数化。

  1. json 格式的数据文件

# 参数化读取 JSON 文件
@file_data('ddt_data_file.json')
def test_search(self, search_key):
    self.baidu_search(search_key)
    self.assertEqual(self.driver.title, search_key + "_百度搜索")

  2. yaml 格式的数据文件

# 参数化读取 yaml 文件
@file_data('ddt_data_file.yaml')
def test_search(self, case):
    search_key = case[0]["search_key"]
    self.baidu_search(search_key)
    self.assertEqual(self.driver.title, search_key + "_百度搜索")

 

posted @ 2022-07-08 22:32  MToy  阅读(314)  评论(0编辑  收藏  举报