python webdriver 測試架構-資料驅動excel驅動的方式

來源:互聯網
上載者:User

標籤:輸入   基礎   sheet   value   try   tuple   cal   迭代   time   

  簡介:資料驅動excel驅動方式,就是資料配置在excel裡面,主程式調用的時候每次用從excel裡取出的資料作為參數,進行操作,需要掌握的地方是對excel的操作,要靈活的找到目標資料 測試資料.xlsx:

路徑-D:\test\0627

 

ExcelUtil.py:

#encoding=utf-8
from openpyxl import load_workbook

class ParseExcel(object):

    def __init__(self, excelPath, sheetName):
        # 將要讀取的excel載入到記憶體
        self.wb = load_workbook(excelPath)
        # 通過工作表名稱擷取一個工作表對象
        self.sheet = self.wb.get_sheet_by_name(sheetName)
        # 擷取工作表中存在資料的地區的最大行號
        self.maxRowNum = self.sheet.max_row

    def getDatasFromSheet(self):
        # 用於存放從工作表中讀取出來的資料
        dataList = []
        # 因為工作表中的第一行是標題列,所以需要去掉
        for line in self.sheet.rows:  
            # 遍曆工作表中資料區域的每一行,
            # 並將每行中各個儲存格的資料取出存於列表tmpList中,
            # 然後再將存放一行資料的列表添加到最終資料列表dataList中
            tmpList = []
            tmpList.append(line[1].value)
            tmpList.append(line[2].value)
            dataList.append(tmpList)
        # 將擷取工作表中的所有資料的迭代對象返回
        return dataList[1:]

if __name__ == ‘__main__‘:
    excelPath = u‘E:\\資料驅動\\測試資料.xlsx‘
    sheetName = u"搜尋資料表"
    pe = ParseExcel(excelPath, sheetName)
    print pe.getDatasFromSheet()
    for i in pe.getDatasFromSheet():
        print i[0], i[1]

加print調試日誌:
#encoding=utf-8
from openpyxl import load_workbook

class ParseExcel(object):
    def __init__(self,excelPath,sheetName):
        self.wb=load_workbook(excelPath)
        self.sheet=self.wb.get_sheet_by_name(sheetName)
        self.maxRowNum=self.sheet.max_row

    def getDatasFromSheet(self):
        dataList=[]
        for line in self.sheet.rows:
            tmpList=[]
            tmpList.append(line[1].value)
            print "line[1].value",line[1].value
            tmpList.append(line[2].value)
            print "line[2].value",line[2].value
            dataList.append(tmpList)
        print dataList[1:]
        return dataList[1:]

if __name__==‘__main__‘:
    excelPath=u"d:\\test\\0627\\測試資料.xlsx"
    sheetName=u"搜尋資料表"
    pe=ParseExcel(excelPath,sheetName)
    print pe.getDatasFromSheet()
    for i in pe.getDatasFromSheet():
        print i[0],i[1]
單獨運行結果:
D:\test\0627>python  ExcelUtil.py
ExcelUtil.py:7: DeprecationWarning: Call to deprecated function get_sheet_by_name (Use wb[sheetname]).
  self.sheet=self.wb.get_sheet_by_name(sheetName)
line[1].value 搜尋字詞
line[2].value 期望結果
line[1].value 鄧肯
line[2].value 蒂姆
line[1].value 喬丹
line[2].value 邁克爾
line[1].value 庫裡
line[2].value 斯蒂芬
[[u‘\u9093\u80af‘, u‘\u8482\u59c6‘], [u‘\u4e54\u4e39‘, u‘\u8fc8\u514b\u5c14‘], [u‘\u5e93\u91cc‘, u‘\u65af\u8482\u82ac‘]]
[[u‘\u9093\u80af‘, u‘\u8482\u59c6‘], [u‘\u4e54\u4e39‘, u‘\u8fc8\u514b\u5c14‘], [u‘\u5e93\u91cc‘, u‘\u65af\u8482\u82ac‘]]
line[1].value 搜尋字詞
line[2].value 期望結果
line[1].value 鄧肯
line[2].value 蒂姆
line[1].value 喬丹
line[2].value 邁克爾
line[1].value 庫裡
line[2].value 斯蒂芬
[[u‘\u9093\u80af‘, u‘\u8482\u59c6‘], [u‘\u4e54\u4e39‘, u‘\u8fc8\u514b\u5c14‘], [u‘\u5e93\u91cc‘, u‘\u65af\u8482\u82ac‘]]
鄧肯 蒂姆
喬丹 邁克爾
庫裡 斯蒂芬

最後啟動並執行指令碼:

data_drivern_by_excel.py:

#encoding=utf-8
from selenium import webdriver
import unittest,time
import logging,traceback
import ddt
from ExcelUtil import ParseExcel
from selenium.common.exceptions import NoSuchElementException

#初始化日誌對象
logging.basicConfig(
    #記錄層級
    level=logging.INFO,
    #日誌格式
    #時間、代碼所在檔案名稱、程式碼號、記錄層級名稱、日誌資訊
    format=‘%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s‘,
    #列印日誌的時間
    datefmt=‘%a,%Y-%m-%d %H:%M:S‘,
    #記錄檔存放的目錄(目錄必須存在)及記錄檔名
    filename=‘d:\\test\\0627\\report.log‘,
    #開啟記錄檔的方式
    filemode=‘w‘
)

excelPath=u"d:\\test\\0627\\測試資料.xlsx"
sheetName=u"搜尋資料表"
#建立ParseExcel類的執行個體對象
excel=ParseExcel(excelPath,sheetName)

#資料驅動裝飾器
@ddt.ddt
class TestDemo(unittest.TestCase):
    def setUp(self):
        self.driver=webdriver.Firefox(executable_path=‘c:\\geckodriver‘)
    
    @ddt.data(*excel.getDatasFromSheet())#對調用函數返回的含列表的列表進行解包,傳過來的就是列表中的一個列表
    def test_dataDrivenByFile(self,data):
        print "tuple(data):",tuple(data)#把傳過來的一個列錶轉換成元祖,包含兩個元素,搜尋值和期望值
        testData,expectData=tuple(data)
        print "testData:",testData#調試用
        print "expectData:",expectData#調試用
        url=‘http://www.baidu.com‘
        #訪問百度首頁
        self.driver.get(url)
        #講瀏覽器視窗最大化
        self.driver.maximize_window()
        #print testData,expectData   
        #設定隱式等待時間為10秒鐘    
        self.driver.implicitly_wait(10)
        try:
            #擷取當前的時間戳記,用於後面計算查詢耗時用
            start=time.time()
            #擷取目前時間的字串,表示測試開始時間
            startTime=time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())
            #找到搜尋輸入框,並輸入測試資料
            self.driver.find_element_by_id(‘kw‘).send_keys(testData)
            #找到搜尋按鈕,並點擊
            self.driver.find_element_by_id(‘su‘).click()
            time.sleep(3)
            #斷言期望結果是否出現在頁面原始碼中
            self.assertTrue(expectData in self.driver.page_source)
            print u"搜尋-%s,期望-%s"%(testData,expectData)

        except NoSuchElementException,e:
            logging.error(u"尋找的頁面元素不存在,異常堆棧資訊:"+str(traceback.format_exc()))
        except AssertionError,e:
            logging.info(u‘搜尋-"%s",期望-"%s",-失敗‘%(testData,expectData))
        except Exception,e:
            logging.error(u"未知錯誤,錯誤資訊:"+str(traceback.format_exc()))
        else:
            logging.info(u‘搜尋- "%s",期望-"%s"-通過‘%(testData,expectData))
    def tearDown(self):
        self.driver.quit()
    
if __name__==‘__main__‘:
    unittest.main()
 
結果:

d:\test\0627>python test.py
d:\test\0627\ExcelUtil.py:11: DeprecationWarning: Call to deprecated function get_sheet_by_name (Use wb[sheetname]).
  self.sheet=self.wb.get_sheet_by_name(sheetName)
tuple(data): (u‘\u9093\u80af‘, u‘\u8482\u59c6‘)
testData: 鄧肯
expectData: 蒂姆
搜尋-鄧肯,期望-蒂姆
.tuple(data): (u‘\u4e54\u4e39‘, u‘\u8fc8\u514b\u5c14‘)
testData: 喬丹
expectData: 邁克爾
搜尋-喬丹,期望-邁克爾
.tuple(data): (u‘\u5e93\u91cc‘, u‘\u65af\u8482\u82ac‘)
testData: 庫裡
expectData: 斯蒂芬
搜尋-庫裡,期望-斯蒂芬
.
----------------------------------------------------------------------
Ran 3 tests in 45.614s

OK

 

 

report.log:

Fri,2018-06-29 11:18:S test.py[line:70] INFO 搜尋- "鄧肯",期望-"蒂姆"-通過
Fri,2018-06-29 11:18:S test.py[line:70] INFO 搜尋- "喬丹",期望-"邁克爾"-通過
Fri,2018-06-29 11:18:S test.py[line:70] INFO 搜尋- "庫裡",期望-"斯蒂芬"-通過

總結:

如果日誌logging部分書寫格式有問題、或者路徑不存在、或者字元等有問題,日誌就會輸出到螢幕上,如果沒有問題,才會列印到記錄檔report.log中

資料驅動excel驅動方式和其他方式(txt等)原理大同小異,都是把資料從檔案中取出來,用ddt模組進行解包,傳進主程式,痛點就是對不同的檔案類型進行讀取可能需要專門的程式包來處理,說白了,都是對基礎的運用進行整合,真正項目中用到的肯定比這個要複雜。。。

 

   

python webdriver 測試架構-資料驅動excel驅動的方式

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.