測試驅動之excel文件與ddt模塊在自動化中的引用(十三)

在前面詳細的介紹了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讀取存儲的數據。

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