天天看點

python+selenium web自動化之資料驅動模型

一、環境準備

1、安裝xlrd

python+selenium web自動化之資料驅動模型

2、安裝ddt

python+selenium web自動化之資料驅動模型

二、資料驅動原理

1、測試資料為多個字典的list類型

2、測試類前面加@ddt.ddt修飾

3、case前加@ddt.data()修飾

4、用例會單獨運作多次(取決于測試資料的個數)

三、舉例說明(此例子基于上文python+selenium Page Object 設計模式+Unittest單元測試架構)https://blog.csdn.net/weixin_42228683/article/details/102231182

1、方法一

test_case.py

# Author:Xueyun
# -*- coding:utf-8 -*-
import unittest
import ddt
from po.login_page import LoginPage
from selenium import webdriver

'''測試資料'''
test_data = [{"username": "zhangsan", "password": "zhangsan"},
             {"username": "lisi", "password": "lisi"},
             {"username": "wangwu", "password": "wangwu"},
             ]
@ddt.ddt
class Case01(unittest.TestCase):
    ''''登入樂學'''
    def setUp(self):
        self.driver = webdriver.Chrome()
        self.driver.implicitly_wait(30)
        self.url = "http://www.5itest.cn/login"
        # self.username = "18328379237"
        # self.password = "123456"


    #用例執行體
    @ddt.data(*test_data)
    def test_login_lexue(self, data):
        #聲明登入頁面類對象
        login_page = LoginPage(self.driver,self.url,u"樂學")
        #調用打開頁面元件
        login_page.open()
        #調用使用者名輸入元件
        login_page.input_username(data["username"])
        #調用輸入密碼元件
        login_page.input_password(data["password"])
        #調用點選登入按鈕元件
        login_page.click_submit()

    def tearDown(self):
        self.driver.quit()

if __name__ == '__main__':

    unittest.main()
           

2、方法二

①首先要知道,如何讀取excel表格的資料

read_excel.py

import xlrd


class ReadExcel:
    def __init__(self, excel_path, sheet_name):
        #打開excel表格
        self.data = xlrd.open_workbook(excel_path)
        #通過清單名字擷取
        self.table = self.data.sheet_by_name(sheet_name)
        #擷取第一行key值
        self.keys = self.table.row_values(0)
        #擷取總行數
        self.rownum = self.table.nrows
        #擷取總列數
        self.colnum = self.table.ncols

    def dict_data(self):
        #判斷總行數不小于1
        if self.rownum <= 1:
            print("總行數小于1")
        else:
            #定義一個空清單來存放表格中的資料
            r = []
            #初始化j,從第二行開始取資料
            j = 1
            #利用循環讀取表格中的資料
            for i in range(self.rownum - 1):
                s = {}
                #從第二行取對應的values值
                values = self.table.row_values(j)
                for x in range(self.colnum):
                    s[self.keys[x]] = values[x]
                r.append(s)
                j += 1
            return r

if __name__ == '__main__':
    filepath = "test.xls"
    sheetname = "Sheet1"
    data = ReadExcel(filepath, sheetname)
    print(data.dict_data())
           

②将讀取excel資料與測試用例結合

test_case02.py

# Author:Xueyun
# -*- coding:utf-8 -*-
import unittest
import ddt
from exceldata import read_excel
from po.login_page import LoginPage
from selenium import webdriver

'''測試資料'''
filepath = "E:\\Pycharm_projects\\1\\exceldata\\test.xls"
sheetname = "Sheet1"
exce_data = read_excel.ReadExcel(filepath, sheetname)
test_data = exce_data.dict_data()


@ddt.ddt
class Case01(unittest.TestCase):
    ''''登入樂學'''
    def setUp(self):
        self.driver = webdriver.Chrome()
        self.driver.implicitly_wait(30)
        self.url = "http://www.5itest.cn/login"
        # self.username = "18328379237"
        # self.password = "123456"


    #用例執行體
    @ddt.data(*test_data)
    def test_login_lexue(self, data):
        #聲明登入頁面類對象
        login_page = LoginPage(self.driver,self.url,u"樂學")
        #調用打開頁面元件
        login_page.open()
        #調用使用者名輸入元件
        login_page.input_username(data["username"])
        #調用輸入密碼元件
        login_page.input_password(data["password"])
        #調用點選登入按鈕元件
        login_page.click_submit()

    def tearDown(self):
        self.driver.quit()

if __name__ == '__main__':

    unittest.main()
           
python+selenium web自動化之資料驅動模型

注意:将表格中的資料設定成文本

③執行結果

python+selenium web自動化之資料驅動模型