下載ddt並安裝
Pip install ddt
或者官網下載安裝
http://ddt.readthedocs.io/en/latest/
DDT的使用
DDT包含類的裝飾器ddt和兩個方法裝飾器data(直接輸入測試數據),file_data(可以從json或者yaml中獲取測試數據)
只有yaml和yml結尾的文件以yaml形式上傳,其他情況下默認為json
通常情況下,data中的數據按照一個參數傳遞給測試用例,如果data中含有多個數據,以元組,列表,字典等數據,需要自行在腳本中對數據進行分解或者使用unpack分解數據
@data(a,b)
那么a和b各運行一次用例
@data([a,d],[c,d])
如果沒有unpack,那么[a,b]當成一個參數傳入用例運行
如果有unpack,那么[a,b]被分解開,按照用例中的兩個參數傳遞
@file_data(filename)
對於json的文件,每一個json元素按照一個用例運行,可以依照python分解元組,列表或者字典的方式分解傳入
from ddt import ddt,unpack,data
from selenium import webdriver
from selenium.webdriver.common.by import By
import unittest,time
#數據驅動模型
# ddt excel+ddt yaml+ddt txt+ddt
#@unpack 表示用來解壓元組到多個參數
#應用:ui級別的自動化測試中可以實現編寫一個測試用例實現多個不同的測試點驗證
#例如在163郵箱登錄頁面中,存在多種測試情況,如用戶名和密碼為空,用戶名為空密碼不為空,密碼為空用戶名不為空返回的錯誤提示信息
@ddt
class Mail_163(unittest.TestCase):
def setUp(self) -> None:
self.driver = webdriver.Chrome()
self.driver.maximize_window()
self.driver.implicitly_wait(5)
self.driver.get("https://mail.163.com/")
def tearDown(self) -> None:
self.driver.quit()
@data(('','','請輸入帳號'),('admin','','請輸入密碼'),('','admin','請輸入帳號'),('^^^','','帳號格式錯誤'))
@unpack
def test_login_163(self,username,password,result):
#驗證登錄163郵箱N中情況
self.driver.find_element(By.ID,"switchAccountLogin").click()
iframe = self.driver.find_element(By.TAG_NAME,'iframe')
self.driver.switch_to_frame(iframe)
self.driver.find_element(By.NAME,'email').send_keys(username)
self.driver.find_element(By.NAME,'password').send_keys(password)
time.sleep(1)
self.driver.find_element(By.ID,"dologin").click()
divtext = self.driver.find_element(By.CSS_SELECTOR,'div.ferrorhead').text
print("錯誤信息:",divtext)
self.assertEqual(divtext,result)
self.driver.switch_to_default_content()
if __name__ == '__main__':
unittest.main(verbosity=2)