-
目的
相同的測試腳本使用不同的測試數據來執行,實現測試數據和測試腳本分離。
從excel表中讀取測試數據,用於程序的參數。 -
步驟
(1)編寫測試腳本,腳本需要指出從程序對象、文件或數據庫讀入測試數據;
(2)將測試腳本使用的測試數據存入程序對象、文件或數據庫等外部介質中;
(3)運行腳本過程中,循環盜用存儲在外部介質中的測試數據;
(4)驗證所有的測試結果是否符合預期結果。 -
測試邏輯:
(1)打開百度首頁
(2)在搜索框輸入一個搜索關鍵詞
(3)點擊搜索按鈕
(4)驗證搜索結果頁面是否包含預期關鍵字,包含則認爲測試執行通過,否則認爲測試執行失敗。 -
百度搜索代碼1:
4.1. 程序文件結構
DataDrivenProject |---------------python工程
Data.xls |---------------excel數據文件,存儲測試數據
ExcelDataDrivenTest.py |---------------測試程序文件
4.2. data.txt
4.3. ExcelDataDrivenTest.py
from selenium import webdriver
from openpyxl import *
import unittest
import time
class ExcelDriven(unittest.TestCase):
# 初始化加載數據
def setUp(self):
self.driver = webdriver.Firefox()
path = './data.xlsx'
# 加載excel
self.wb = load_workbook(path)
# 設置第一個sheet爲活動頁
self.ws = self.wb.active
def test_excel_driven(self):
for row in self.ws[2:self.ws.max_row]:
# 讀取每一行的第1、第2單元格中的值
key, key_assert = row[1].value, row[2].value
# 進行百度搜索
self.driver.get('https://www.baidu.com')
self.driver.find_element_by_id('kw').send_keys(key)
self.driver.find_element_by_id('su').click()
time.sleep(3)
try:
# 斷言關鍵詞
assert key_assert in self.driver.page_source
print('ok')
except:
print('error')
# 測試數據清理
def tearDown(self):
self.driver.quit()
if __name__ == '__main__':
unittest.main()
- 百度搜索代碼2(ddt):
5.1. 程序文件結構
DataDrivenProject |---------------python工程
Data.xls |---------------excel數據文件,存儲測試數據
ExcelUtil.py |---------------讀取excel單元格中數據
ExcelDataDrivenTest.py |---------------測試程序文件
5.2. data.txt
5.3. ExcelUtil.py
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 = []
# 把每一個的每一個單元格中內容存放的到列表中
tmpList.append(line[1].value)
tmpList.append(line[2].value)
# 將行列表數據存存放數據列表中,格式[[],[],[]]
dataList.append(tmpList)
return dataList[1:]
if __name__ == '__main__':
excelPath = u'./data.xlsx'
sheetName = u"搜索數據表"
pe = ParseExcel(excelPath, sheetName)
print (pe.getDatasFromSheet())
for i in pe.getDatasFromSheet():
print (i[0], i[1])
5.4. ExcelDataDrivenTest.py
from selenium import webdriver
from excelData.ExcelUtil import ParseExcel
import unittest
import time
import ddt
excelpath = './data.xlsx'
sheetName = '搜索數據表'
# 創建ParseExcel類的實例對象
excel = ParseExcel(excelpath, sheetName)
@ddt.ddt
class ExcelDriven(unittest.TestCase):
# 初始化加載數據
def setUp(self):
self.driver = webdriver.Firefox()
# 通過ddt獲取excel類中的數據
@ddt.data(*excel.getDatasFromSheet())
def test_excel_driven(self, data):
key, key_assert = tuple(data)
# 訪問百度首頁
self.driver.get('https://www.baidu.com')
# 找到搜索輸入框並輸入測試數據
self.driver.find_element_by_id('kw').send_keys(key)
# 找到查詢按鈕,並點擊查詢按鈕
self.driver.find_element_by_id('su').click()
time.sleep(3)
try:
# 斷言期望結果是否出現在頁面中
assert key_assert in self.driver.page_source
print('ok')
except:
print('error')
# 測試數據清理
def tearDown(self):
self.driver.quit()
if __name__ == '__main__':
unittest.main()