Python&Selenium 數據驅動【unittest+ddt+Excel】
阿新 • • 發佈:2019-01-01
encoding 代碼解析 stc 日誌文件 bject 內容 gin unittest tex
一、摘要
一般情況下我們為了更好的管理測試數據會選擇將測試數據存儲在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_rowdef 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()
Python&Selenium 數據驅動【unittest+ddt+Excel】