Python自动化测试|【Python自动化测试17】openpyxl二次封装与数据驱动


文章目录

  • 一、前言
  • 二、二次封装
  • 三、数据驱动

一、前言
??本文章主要讲解Python自动化测试中openpyxl的二次封装,在自动化测试中能够更好的管理测试用例以及代码,除此之外下方有系列文章的传送门,还在持续更新中,感兴趣的小伙伴也可以前往查看,话不多说,让我们一起看看吧~
Python自动化测试|【Python自动化测试17】openpyxl二次封装与数据驱动
文章图片
系列文章:
??系列文章1:【Python自动化测试1】遇见Python之美
??系列文章2:【Python自动化测试2】Python安装配置及PyCharm基本使用
??系列文章3:【Python自动化测试3】初识数据类型与基础语法
??系列文章4:【Python自动化测试4】字符串知识总结
??系列文章5:【Python自动化测试5】列表与元组知识总结
??系列文章6:【Python自动化测试6】字典与集合知识总结
??系列文章7:【Python自动化测试7】数据运算符知识合集
??系列文章8:【Python自动化测试8】流程控制语句讲解
??系列文章9:【Python自动化测试9】函数知识合集
??系列文章10:【Python自动化测试10】文件基础操作
??系列文章11:【Python自动化测试11】模块、包与路径知识合集
??系列文章12:【Python自动化测试12】异常处理机制知识合集
??系列文章13:【Python自动化测试13】类、对象、属性与方法知识合集
??系列文章14:【Python自动化测试14】Python自动化测试基础与进阶练习题
??系列文章15:【Python自动化测试15】unittest测试框架的核心概念与作用
??系列文章16:【Python自动化测试16】测试用例数据分离
??
二、二次封装
【Python自动化测试|【Python自动化测试17】openpyxl二次封装与数据驱动】??基于上一次16章节的代码,我们可以继续对代码进行优化封装,封装后的代码会更加高效,主要分为三个文件:
(1)test_login.py # 测试文件
(2)login_function # 存储被测函数
(3)excel # excel表格读取
(4)login_case.xlsx # 测试用例数据
??优化后的代码如下所示(如果没有看过16章的同学,建议先去阅读16章):
"""被测函数:login_function""" def login(username=None, password=None): if username is None or password is None: return {"code": 400, "msg": "用户名或密码为空"} if username == "萌笑天" and password == "123456": return {"code": 200, "msg": "登录成功"} return {"code": 300, "msg": "用户名或密码错误"}

"""测试文件:test_login.py""" import unittest from excel import read_excel # 导入read_excel的函数,以使用对应的功能 from login_function import login# 获取excel数据 login_data = https://www.it610.com/article/read_excel("login_case.xlsx", "login")class TestLogin(unittest.TestCase):def test_login_success(self): # 通过索引为0,找到第一组测试数据 data_info = login_data[0] # 取出测试数据当中的data字段 user_info = eval(data_info["data"]) username = user_info["username"] password = user_info["password"] expected = eval(data_info["expected"])actual = login(username, password)self.assertEqual(expected, actual)

"""表格读取:excel.py"""""" Python操作excel的思路: 1、先打开excel文件 2、选择对应表格页签 3、读取对应单元格数据 4、通过数据实现一定的操作 5、关闭excel文件 """ import openpyxl# 专门用于处理excel表格的库,openpyxl拥有pandas的特性,并属于轻量级库,不会像pandas一样更加复杂,更具优势 from openpyxl.worksheet.worksheet import Worksheetdef read_excel(file_path, sheet_name ): """读取excel的函数""" workbook_data = https://www.it610.com/article/openpyxl.load_workbook(file_path)# 打开名称为case.xlsx的excel文档 sheet: Worksheet = workbook_data[sheet_name]# 页签名为login,定位到login页签,指明sheet类型为Worksheet#"""如果我们想要获取某一个单元格的数据,可以使用这个方式,但往往一个表格中有庞大的数据,我们并非通过这样的方式获取""" # cell = sheet.cell(row=1, column=1)# 获取单元格数据,row为行,column为列,代码中表示的为第一行第一列的单元格 # print(cell.value)# 获取第一行第一列的数据"""更推荐的获取方法是获取所有数据,因为获取的数据并非列表类型,我们还需要进一步进行数据转换""" values = list(sheet.values) workbook_data.close()# 关闭文件 title = values[0] rows = values[1:] new_rows = [dict(zip(title, row)) for row in rows] return new_rowsdata = https://www.it610.com/article/read_excel("login_case.xlsx", "login") print(data)

??测试用例数据如下所示:
Python自动化测试|【Python自动化测试17】openpyxl二次封装与数据驱动
文章图片

??执行结果如下所示,测试通过:
Python自动化测试|【Python自动化测试17】openpyxl二次封装与数据驱动
文章图片

??当有过多的测试函数数据时我们需要通过循环去遍历,也就是for循环遍历,虽然更加便捷可以省略过多的测试函数编写,当仍然会出现一些新问题,Python程序从上往下执行,并逐条进行excel的数据读取,一旦出现报错,会终止程序运行,如下所示,会告知预期结果与实际结果不符,那么程序就会终止运行了(代码中没有直接使用for循环):
Python自动化测试|【Python自动化测试17】openpyxl二次封装与数据驱动
文章图片

??

三、数据驱动
??思想:数据驱动(data driven testing)是一种将测试数据(输入,和期望输出)从只包含测试逻辑的测试脚本代码中区别开的方法,简单点说也就是数据分离,数据驱动也是使用不同的数据达到想要的目的。
??实现:通过导入数据驱动(DDT)的方式,进行数据驱动:
??注意:特别需要注意的就是,如果在代码中加了装饰器实现了数据驱动后,执行代码需要在空白行执行,否则会出现AttributeError的报错,需要牢记!
??意义:
??(1)测试逻辑高,代码复用率高,可以被多条测试数据复用,同时可以提高编写效率。
??(2)异常排查率较高,测试框架依据测试数据,每条数据生成测试用例,用例执行过程相互隔离,数据驱动可以让测试用例数据更加独立,具有独立性,每一个测试用例相互之间不会影响。
??(3)代码的可维护性高,清晰的测试框架,提高可读性与可维护性。

import unittest from excel import read_excel # 导入read_excel的函数,以使用对应的功能 from login_function import login from unittestreport import ddt, list_data # unittestreport是一个综合报告输出、ddt等多个内容的库# 获取excel数据 login_data = https://www.it610.com/article/read_excel("login_case.xlsx", "login")# 测试类上使用ddt,以表示使用数据驱动 @ddt class TestLogin(unittest.TestCase):# 如果你想在哪个函数上使用数据驱动,那么就在函数上增加list_data @list_data(login_data) def test_login_success(self, data_info): # 通过索引为0,找到第一组测试数据 data_info = login_data[0] # 取出测试数据当中的data字段 user_info = eval(data_info["data"]) username = user_info["username"] password = user_info["password"] expected = eval(data_info["expected"])actual = login(username, password)self.assertEqual(expected, actual)

Python自动化测试|【Python自动化测试17】openpyxl二次封装与数据驱动
文章图片

??
??
??好啦~以上就是本次文章分享的全部内容啦,你学会了吗?希望能给大家带来帮助哦!
??
??
Python自动化测试|【Python自动化测试17】openpyxl二次封装与数据驱动
文章图片

    推荐阅读