前言
在設計用例的時候,有些用例只是參數數據的輸入不一樣,比如登錄這個功能,操作過程但是一樣的。如果用例重複去寫操作過程會增加代碼量,對應這種多組數據的測試用例,可以用數據驅動設計模式,一組數據對應一個測試用例,用例自動加載生成。
一、環境準備
1.安裝ddt模塊,打開cmd輸入pip install ddt在線安裝
>>pip install ddt
二、數據驅動原理
1.測試數據爲多個字典的list類型
2.測試類前加修飾@ddt.ddt
3.case前加修飾@ddt.data()
4.運行後用例會自動加載成三個單獨的用例
5.測試結果:
Testing started at 21:51 ...
start!
{'username': 'selenium\xe7\xbe\xa4', 'psw': '232607095'}
end!
start!
{'username': 'python\xe7\xbe\xa4', 'psw': '226296743'}
end!
start!
{'username': 'appium\xe7\xbe\xa4', 'psw': '512200893'}
end!
三、selenium案例
1.從上一篇封裝的excel方法裏面讀取數據,作爲測試測試Selenium2+python自動化58-讀取Excel數據(xlrd)
2.在之前寫的登錄那篇基礎上做點修改,測試參數讀取excel裏的數據Selenium2+python自動化48-登錄方法(參數化)
3.代碼參考如下
# 測試數據
testData = data.dict_data()
print testData
@ddt.ddt
class Bolg(unittest.TestCase):
u'''登錄博客'''
def setUp(self):
self.driver = webdriver.Firefox()
url = "https://passport.cnblogs.com/user/signin"
self.driver.get(url)
self.driver.implicitly_wait(30)
def login(self, username, psw):
u'''這裏寫了一個登錄的方法,賬號和密碼參數化'''
self.driver.find_element_by_id("input1").send_keys(username)
self.driver.find_element_by_id("input2").send_keys(psw)
self.driver.find_element_by_id("signin").click()
time.sleep(3)
def is_login_sucess(self):
u'''判斷是否獲取到登錄賬戶名稱'''
try:
text = self.driver.find_element_by_id("lnk_current_user").text
print text
return True
except:
return False
@ddt.data(*testData)
def test_login(self, data):
u'''登錄案例參考'''
print ("當前測試數據%s"%data)
# 調用登錄方法
self.login(data["username"], data["password"])
# 判斷結果
result = self.is_login_sucess()
self.assertTrue(result)
def tearDown(self):
self.driver.quit()
if __name__ == "__main__":
unittest.main()