簡單版-數據驅動-excel數據源

  1. 目的
    相同的測試腳本使用不同的測試數據來執行,實現測試數據和測試腳本分離。
    從excel表中讀取測試數據,用於程序的參數。

  2. 步驟
    (1)編寫測試腳本,腳本需要指出從程序對象、文件或數據庫讀入測試數據;
    (2)將測試腳本使用的測試數據存入程序對象、文件或數據庫等外部介質中;
    (3)運行腳本過程中,循環盜用存儲在外部介質中的測試數據;
    (4)驗證所有的測試結果是否符合預期結果。

  3. 測試邏輯:
    (1)打開百度首頁
    (2)在搜索框輸入一個搜索關鍵詞
    (3)點擊搜索按鈕
    (4)驗證搜索結果頁面是否包含預期關鍵字,包含則認爲測試執行通過,否則認爲測試執行失敗。

  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()
  1. 百度搜索代碼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()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章