在前面詳細的介紹了ddt模塊的安裝以及在自動化項目中的使用,我們再已驗證V客網登錄界面爲實例,來說明ddt模塊在自動化中的實戰,驗證點分別爲如下幾點:
驗證點一:輸入無效的用戶名和密碼,驗證返回的錯誤信息
驗證點二:輸入有效的用戶名和無效的密碼,驗證返回的錯誤信息
驗證點三:輸入無效的郵箱和無效的密碼,驗證返回的錯誤信息
我們把讀取數據的方法,登錄以及獲取錯誤信息,編寫的 location.py的模塊中,見location.py的源碼:
#!/usr/bin/env python
#coding:utf-8
import csv,xlrd
from selenium import webdriver
import time as t
def getCsv(file_name):
rows=[]
withopen(file_name,'rb') as f:
readers=csv.reader(f,delimiter=',',quotechar='|')
next(readers,None)
forrow in readers:
rows.append(row)
returnrows
defgetExcel(rowValue,colValue,file_name='d:\\test.xlsx'):
"""
:paramrowValue:表格的行
:paramcolValue: 表格的列
:paramfile_name: excel文件
:return:
"""
book=xlrd.open_workbook(file_name)
sheet=book.sheet_by_index(0)
returnsheet.cell_value(rowValue,colValue)
#V客網登錄
def clickLogin(driver,username,password):
driver.find_element_by_id('l-1').send_keys(username)
t.sleep(2)
driver.find_element_by_id('l-2').send_keys(password)
t.sleep(2)
driver.find_element_by_id('l-4').click()
#獲取返回的錯誤信息
def getText(driver):
returndriver.find_element_by_xpath(".//*[@id='login-tips']").text
見驗證weke登錄界面的測試代碼:
#!/usr/bin/python
#coding:utf-8
from selenium import webdriver
import time as t
from ddt import ddt,data,unpack
import unittest,sys,location
reload(sys)
sys.setdefaultencoding('utf-8')
@ddt
class WekeTest(unittest.TestCase):
defsetUp(self):
self.driver=webdriver.Firefox()
self.driver.maximize_window()
self.driver.implicitly_wait(30)
self.driver.get('http://my.weke.com/loginVerify.html')
@data(('admin','admin',u'賬號必須是郵箱或者手機號'),('13484545195','admin',u'用戶名或密碼錯誤'),('[email protected]','admin',u'用戶名或密碼錯誤'))
@unpack
deftestCase_01(self,username,password,expect):
"""
驗證點一:輸入無效的用戶名和密碼,驗證返回的錯誤信息
驗證點二:輸入有效的用戶名和無效的密碼,驗證返回的錯誤信息
驗證點三:輸入無效的郵箱和無效的密碼,驗證返回的錯誤信息
:return:
"""
location.clickLogin(self.driver,username,password)
self.assertEqual(location.getText(self.driver),expect)
deftearDown(self):
self.driver.quit()
if __name__=='__main__':
suite=unittest.TestLoader().loadTestsFromTestCase(WekeTest)
unittest.TextTestRunner(verbosity=2).run(suite)
ok,我現在結合ddt模塊,把上面自動化使用到的數據,存儲在excel 中,見excel的數據截圖:
這樣修改後的location.py源碼爲:
#!/usr/bin/env python
#coding:utf-8
import csv,xlrd
from selenium import webdriver
import time as t
def getCsv(file_name):
rows=[]
withopen(file_name,'rb') as f:
readers=csv.reader(f,delimiter=',',quotechar='|')
next(readers,None)
forrow in readers:
rows.append(row)
returnrows
defgetExcel(rowValue,colValue,file_name='d:\\test.xlsx'):
"""
:paramrowValue:表格的行
:paramcolValue: 表格的列
:paramfile_name: excel文件
:return:
"""
book=xlrd.open_workbook(file_name)
sheet=book.sheet_by_index(0)
returnsheet.cell_value(rowValue,colValue)
defgetDdtExcel(file_name='d:\\test.xlsx'):
rows=[]
book=xlrd.open_workbook(file_name)
sheet=book.sheet_by_index(0)
forrow in range(1,sheet.nrows):
rows.append(list(sheet.row_values(row,0,sheet.ncols)))
returnrows
#V客網登錄
def clickLogin(driver,username,password):
t.sleep(2)
driver.find_element_by_id('l-1').send_keys(username)
t.sleep(2)
driver.find_element_by_id('l-2').send_keys(password)
t.sleep(2)
driver.find_element_by_id('l-4').click()
#獲取返回的錯誤信息
def getText(driver):
returndriver.find_element_by_xpath(".//*[@id='login-tips']").text
修改後的測試代碼見wekeTest.py模塊的源碼:
#!/usr/bin/python
#coding:utf-8
from selenium import webdriver
import time as t
from ddt import ddt,data,unpack
import unittest,sys,location
reload(sys)
sys.setdefaultencoding('utf-8')
@ddt
class WekeTest(unittest.TestCase):
defsetUp(self):
self.driver=webdriver.Firefox()
self.driver.maximize_window()
self.driver.implicitly_wait(30)
self.driver.get('http://my.weke.com/loginVerify.html')
@data(*location.getDdtExcel())
@unpack
deftestCase_01(self,username,password,expect):
"""
驗證點一:輸入無效的用戶名和密碼,驗證返回的錯誤信息
驗證點二:輸入有效的用戶名和無效的密碼,驗證返回的錯誤信息
驗證點三:輸入無效的郵箱和無效的密碼,驗證返回的錯誤信息
:return:
"""
location.clickLogin(self.driver,username,password)
self.assertEqual(location.getText(self.driver),expect)
deftearDown(self):
self.driver.quit()
if __name__=='__main__':
suite=unittest.TestLoader().loadTestsFromTestCase(WekeTest)
unittest.TextTestRunner(verbosity=2).run(suite)
見執行代碼後的截圖:
OK,我們比較二次實現的方式,可以發現,在第二次的代碼中,我們只需要調用調用getDdtExcel() 的函數,該函數實現了從excel讀取存儲的數據。