1. 程式人生 > >Python&Selenium 數據驅動【unittest+ddt+Excel】

Python&Selenium 數據驅動【unittest+ddt+Excel】

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_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
= uD:\\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】