• 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',只测试当前文件,运行结果如下:

  • 相关阅读:
    (005)每日SQL学习:关于物化视图的一系列创建等语句
    (004)每日SQL学习:物化视图之二
    (003)每日SQL学习:普通视图和物化视图
    (002)每日SQL学习:删除名称重复的数据
    (001)每日SQL学习:关于UNION的使用
    (002)每日一课:表格的数据排序
    (001)每日一课:报表隔行换色
    (Oracle)关于blob转到目标库报ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值错误解决方案
    (Oracle)数据库用户的密码过期时间如何修改为永不过期
    Entity Framework 中遇到的一些小问题
  • 原文地址:https://www.cnblogs.com/liho/p/14049212.html
Copyright © 2020-2023  润新知