日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

自动化测试之 ddt 驱动 excel 文件

發(fā)布時間:2023/12/14 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 自动化测试之 ddt 驱动 excel 文件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、ddt 用途

  • 一般進行接口測試時,每個接口的傳參都不止一種情況,一般會考慮正向、逆向等多種組合,所以在測試一個接口時,通常會編寫多條 case,而這些除了傳參不同外,并沒有什么區(qū)別。這個時候就可以利用 ddt 來管理測試數據,提高代碼復用率。
  • ddt => data driver test 數據驅動測試

二、安裝 ddt

  • pip install ddt
三、ddt 模塊組成
  • ddt.ddt:裝飾類,也就是繼承 TestCase 的類。

  • ddt.data:裝飾測試方法,參數是一系列的值

  • ddt.unpack:用來拆解 data 的數據。通常 data 中包含的每一個值都會作為一個單獨的參數傳給測試方法,如果這些值是用元組或者列表傳進來的,可以用 unpack 方法將其自動分解成多個參數
  • ddt.file_data:裝飾測試方法,參數是文件名。文件可以是 json 或者 yaml 類型。

    • 注意:如果文件是以 “.yml”或者".yaml" 結尾,ddt 會作為 yaml 類型處理,其他文件都會作為 json 文件處理?! ?/p>

    • 如果文件是列表,列表的值會作為測試用例參數,同時,會作為測試用例方法名后綴顯示。  

    • 如果文件是字典,字典的 key 會作為測試用例方法的后綴顯示,字典的 value 會作為測試用例參數。  
四、示例
  • 使用 data 傳參數給測試用例
    • 如下示例,可以看出 data 分別傳參數 2 和 4 給測試用例,然后測試用例執(zhí)行了兩遍
from ddt import ddt, data import unittest@ddt class MyTestDdt(unittest.TestCase):def setUp(self):print('start')@data(2, 4) # 使用 data 傳參數給測試用例def test_one(self,value):print('the @data number is {}'.format(value))def tearDown(self):print('end')if __name__ == '__main__':unittest.main()# 結果如下: start the @data number is :2 end start the @data number is :4 end
  • 使用 unpack 分解 list 或者 tuple
    • 可以看出 data 分別傳元組參數(1,2)和(4,5)給測試用例,然后測試用例執(zhí)行了兩遍  
from ddt import ddt, data, unpack import unittest@ddt class MyTestDdt(unittest.TestCase):def setUp(self):print('start')@data((1, 2), (4, 5)) # 元組@unpack # 二次分解元組def test_one(self, value1, value2):print('the @data number is {} and {}'.format(value1, value2))def tearDown(self):print('end')if __name__ == '__main__':unittest.main()# 結果如下 start the @data number is 1 and 2 end start the @data number is 4 and 5 end
  • ?用 unpack 分解字典
from ddt import ddt, data, unpack import unittest@ddt class MyTestDdt(unittest.TestCase):def setUp(self):print('start')@data({'value1': 1, 'value2': 2}, {'value1': 3, 'value2': 4}) # 字典@unpackdef test_one(self, value1, value2):print('the @data number is {} and {}'.format(value1, value2))def tearDown(self):print('end')if __name__ == '__main__':unittest.main()# 結果如下 start the @data number is 1 and 2 end start the @data number is 3 and 4 end from ddt import ddt, data, unpack import unittest@ddt class MyTestDdt(unittest.TestCase):def setUp(self):print('start')@data(*[{'value1': 1, 'value2': 2}, {'value1': 3, 'value2': 4}]) # 這里加 * 后會將返回數據分為一個個的字典@unpackdef test_one(self, **value):print('the @data number is {} and {}'.format(value.get("value1"), value.get("value2")))def tearDown(self):print('end')if __name__ == '__main__':unittest.main()# 結果如下 start the @data number is 1 and 2 end start the @data number is 3 and 4 end

五、cms 登錄實例

""" getTestData.py 封裝讀取 excel 文件內容且返回 [['Evan', '123456'], ['duoceshi007', '123456'], ['Evan', 'xxxxxx']] 格式數據的方法 """

import xlrddef getdata():book = xlrd.open_workbook("data.xls")sheet = book.sheet_by_name("Sheet1")rows = sheet.nrowsdata_list = []for t in range(rows-1):row_list = []row_data = sheet.row_values(t + 1)for i in row_data:if isinstance(i, float):d = int(i)row_list.append(str(d))else:row_list.append(i)data_list.append(row_list)return data_list """ lesson3_5_1.py cms 登錄測試用例 """from selenium import webdriver import time import unittest from ddt import ddt, data, unpack from Python_selenium.lesson3_2020_11_2.lesson3_5_ddt.getTestData import getdata@ddt class cmsLogin(unittest.TestCase):def setUp(self) -> None:self.dr = webdriver.Chrome()self.dr.get("http://xxx.xxxxxxxxx.xx/cms/manage/login.do")self.dr.maximize_window()self.dr.implicitly_wait(10)def tearDown(self) -> None:time.sleep(2)self.dr.quit()@data(*getdata())@unpackdef test_login(self, username, password):self.dr.find_element_by_id("userAccount").send_keys(username)self.dr.find_element_by_id("loginPwd").send_keys(password)self.dr.find_element_by_id("loginBtn").click()time.sleep(2)if username == "Evan" and password == "123456":try:nickName = self.dr.find_element_by_class_name("c-white").textexcept:raise AssertionError("登錄失敗!")else:assert username in nickNameelse:loginText = self.dr.find_element_by_css_selector('[for="online"]').textassert "使我保持登錄狀態(tài)" in loginTextif __name__ == '__main__':unittest.main()

總結

以上是生活随笔為你收集整理的自动化测试之 ddt 驱动 excel 文件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。