Selenium3自動化測試——22.使用DDT運行同一測試用例

有時,我們需要使用不同數據對同一測試用例進行檢驗,這時需要用到DDT。

1)安裝

pip install ddt

2)以百度搜索爲例,確定DDT的用法

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_kay):
        print("第一組測試用例:", case)
        self.baidu_search(search_kay)
        self.assertEqual(self.driver.title, search_kay + "_百度搜索")

    # 參數化使用方法二元祖
    @data(("case1", "selenium"), ("case2", "ddt"), ("case3", "python"))
    @unpack
    def test_search2(self, case, search_kay):
        print("第二組測試用例:", case)
        self.baidu_search(search_kay)
        self.assertEqual(self.driver.title, search_kay + "_百度搜索")

    # 參數化使用方法三
    @data({"search_kay": "selenium"}, {"search_kay": "ddt"}, {"search_kay": "python"})
    @unpack
    def test_search3(self, search_kay):
        print("第三組測試用例:", search_kay)
        self.baidu_search(search_kay)
        self.assertEqual(self.driver.title, search_kay + "_百度搜索")

    # 參數化讀取JSON文件
    @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 + "_百度搜索")

    @classmethod
    def tearDownClass(cls):
        cls.driver.quit()


if __name__ == '__main__':
    unittest.main(verbosity=2)

首先,通過@ddt裝飾器來進行裝飾

其次,DDT提供了不同形式的參數化。對列表,元組,字典,json數據都可以進行參數化。

結果顯示:

test_search1_1___case1____selenium__ (__main__.TestBaidu) ... 第一組測試用例: case1
ok
第一組測試用例: case2
test_search1_2___case2____ddt__ (__main__.TestBaidu) ... ok
第一組測試用例: case3
test_search1_3___case3____python__ (__main__.TestBaidu) ... ok
第二組測試用例: case1
test_search2_1___case1____selenium__ (__main__.TestBaidu) ... ok
第二組測試用例: case2
test_search2_2___case2____ddt__ (__main__.TestBaidu) ... 第二組測試用例: case3
ok
test_search2_3___case3____python__ (__main__.TestBaidu) ... ok
第三組測試用例: selenium
test_search3_1 (__main__.TestBaidu) ... ok
第三組測試用例: ddt
test_search3_2 (__main__.TestBaidu) ... ok
第三組測試用例: python
test_search3_3 (__main__.TestBaidu) ... 第四組測試用例: python
ok
test_search4_1_case1 (__main__.TestBaidu)
test_search4_1_case1 ... 第四組測試用例: ddt
ok
test_search4_2_case2 (__main__.TestBaidu)
test_search4_2_case2 ... ok
第四組測試用例: Selenium
test_search4_3_case3 (__main__.TestBaidu)
test_search4_3_case3 ... ok

----------------------------------------------------------------------
Ran 12 tests in 102.513s

OK

Process finished with exit code 0

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章