Python&Selenium 資料驅動【unittest+ddt+Excel】
阿新 • • 發佈:2018-12-31
一、摘要
一般情況下我們為了更好的管理測試資料會選擇將測試資料儲存在Excel檔案當中去,本節內容將展示給讀者將測試資料儲存在Excel文件中的案例。
二、建立儲存測試資料的Excel
建立一個Excel檔案TestData.xlsx,並將如下表格資料寫入到Excel檔案中,作為測試資料。
序號 | 搜尋詞 | 期望結果 |
1 | 北京 | 北京 |
2 | 上海 | 上海 |
3 | 廣州 | 廣州 |
三、封裝解析Excel檔案模組
要解析Excel檔案,需要先給Python環境安裝openpyxl模組,啟動命令列,輸入命令pip install openpyxl並回車
在工程中建立ParseExcelUtil.py檔案,並寫入如下程式碼:
# encoding = utf-8 from openpyxl import load_workbook class ParseExcel(object): def __init__(self, excelPath, sheetName): self.wb = load_workbook(excelPath)# self.sheet = self.lwb.get_sheet_by_name(sheetName) self.sheet = self.wb[sheetName] self.maxRowNum = self.sheet.max_row def getDatasFromSheet(self): dataList = [] for line in list(self.sheet.rows)[1:]: tmpList = [] tmpList.append(line[1].value) tmpList.append(line[2].value) dataList.append(tmpList) return dataList if __name__ == '__main__': excelPath = u'D:\\Programs\\Python\\PythonUnittest\\TestData\\測試資料.xlsx' sheetName = u'搜尋資料表' pe = ParseExcel(excelPath, sheetName) for i in pe.getDatasFromSheet(): print(i[0], i[1])
程式碼解析:
封裝了getDatasFromSheet方法,該方法將解析Excel,並將資料存到List中去,後續的測試程式碼呼叫的實際上是從List裡邊獲取資料。
四、測試程式碼
# encoding = utf-8 from selenium import webdriver import unittest import time import traceback import ddt import logging from Util.ParseExcelUtil 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, %d %b %Y %H:%M:%S', # 日誌檔案存放的目錄及日誌檔名 filename='D:\\Programs\\Python\\PythonUnittest\\Reports\\TestResults.TestResults', # 開啟日誌的方式 filemode='w' ) excelPath = u"D:\\Programs\\Python\\PythonUnittest\\TestData\\測試資料.xlsx" sheetName = u"搜尋資料表" excel = ParseExcel(excelPath, sheetName) @ddt.ddt class TestDataDrivenByExcel(unittest.TestCase): def setUp(self): self.driver = webdriver.Chrome() @ddt.data( * excel.getDatasFromSheet()) def test_dataDrivenByExcel(self, data): testData, expectData = tuple(data) url = "http://www.baidu.com" self.driver.get(url) self.driver.maximize_window() self.driver.implicitly_wait(10) try: 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) except NoSuchElementException as e: logging.error(u"查詢的頁面元素不存在,異常堆疊資訊為:" + str(traceback.format_exc())) except AssertionError as e: logging.info(u"搜尋 ‘%s’,期望 ‘%s’ ,失敗" % (testData, expectData)) except Exception as 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()