Python自动化测试学习(五)— 读取Excel做数据驱动测试

1、读取Excel文件

安装xlrd库,调用xlrd库去读取文件并返回数据
import xlrd
class ReadExcel:

    @staticmethod
    def get_data():
        # 创建一个空的List
        row_list = []
        # 打开工作簿
        book = xlrd.open_workbook("C:\Users\Think\Desktop\test_python_data.xlsx")
        # 获取第一个sheet
        '''
        1、sheet.nrows: 工作表中有值总行数
        2、sheet.ncols:工作表中有值总列数
        3、sheet.row_values(rowx, start_colx=0, end_colx=None):
           返回给定行中单元格值的一部分(开始行,开始列默认是0,结束列)
        '''
        sheet = book.sheet_by_index(0)
        for i in range(1, sheet.nrows):
            row_value = sheet.row_values(i, 0, sheet.ncols-1)
            row_list.append(row_value)
        return row_list


# if __name__ == '__main__':
#     ReadExcel().get_data()

2、使用ddt库中的@data解析数据,如下简单示例:

import unittest
from ddt import ddt,data,unpack
from src.utils.ReadExcel import ReadExcel


@ddt
class Testddt2(unittest.TestCase):
    def setUp(self):
        pass

    '''
    *的作用类似于将原始数据的最外层括号拿掉,例如我们的原始数据是:
    [['123456', 111], ['111', 'aaa'], ['123458', 'aaa'], ['123459', 'aaa']]
    加上*之后变成:
    ['123456', 111], ['111', 'aaa'], ['123458', 'aaa'], ['123459', 'aaa']
    然后可使用@unpack读取值,参数两位,运行结果:
        15210 111
        111 aaa
        123458 aaa
        123459 aaa
    '''
    #调用ReadExcel类中的get_data()方法获取数据

    @data(*ReadExcel().get_data())
    @unpack
    def test_1(self, username, password, message):
        print()
        print(username, password, message)

    '''
    不加*,不拆包时运行结果:
    [['123456', 111.0], ['111', 'aaa'], ['123458', 'aaa'], ['123459', 'aaa']]
    '''
    @data(ReadExcel().get_data())
    def test_2(self, value):
        print()
        print("---test_2---")
        print(value)
    '''
    不加*,使用@unpack时,运行结果:
    ['123456', 111.0] ['111', 'aaa'] ['123458', 'aaa'] ['123459', 'aaa']
    '''
    @data(ReadExcel().get_data())
    @unpack
    def test_3(self, value1, value2, value3, value4):
        print()
        print("---test_3---")
        print(value1, value2, value3, value4)

3、实际项目中使用:

from src.pages.LoginPage import LoginPage
from selenium import webdriver
from time import sleep
import unittest
from src.utils.ReadExcel import ReadExcel
from ddt import ddt, data, unpack
'''
    1、使用数据驱动模式,测试用户登录测试用例
    2、测试模板Excel
'''


@ddt
class TestLoginCaseDataDrive(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Chrome()
        self.url = "http://mail.163.com/"
        # 打开浏览器
        LoginPage(self.driver).open_browser(self.url)
        sleep(1)
    '''
    1、读取ReadExcel类中的get_data(),获取数据
    2、将获取到的数据进行拆包,并根据数据个数传参数
    3、test_login根据参数个数,运行多次(根据逻辑说明的)
    '''

    @data(*ReadExcel().get_data())
    @unpack
    def test_login(self, username, password, expect_message):
        print(username,password,expect_message)
        LoginPage(self).login_operation(username, password)
        # 定位错误提示消息,设置断言
        actual_message = self.driver.find_element_by_xpath("//div[@class='ferrorhead']")
        print(actual_message.text)
        self.assertEqual(actual_message.text, expect_message, msg="测试失败!")
        print("测试成功!")

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

4、简单的Excel数据格式

5、生成测试报告

运行[https://www.cnblogs.com/liho/p/13851923.html]中的HtmlReport类
做测试所以将pattern改成了pattern='TestLoginCaseDataDrive.py',只测试当前文件,运行结果如下:

原文地址:https://www.cnblogs.com/liho/p/14049212.html