文章目录
- 一、前言
- 二、二次封装
- 三、数据驱动
一、前言
文章图片
系列文章:??
??系列文章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】测试用例数据分离
二、二次封装
(1)test_login.py??优化后的代码如下所示(如果没有看过16章的同学,建议先去阅读16章):# 测试文件
(2)login_function# 存储被测函数
(3)excel# excel表格读取
(4)login_case.xlsx# 测试用例数据
"""被测函数: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)
??测试用例数据如下所示:
文章图片
??执行结果如下所示,测试通过:
文章图片
??当有过多的测试函数数据时我们需要通过循环去遍历,也就是
for
循环遍历,虽然更加便捷可以省略过多的测试函数编写,当仍然会出现一些新问题,Python程序从上往下执行,并逐条进行excel的数据读取,一旦出现报错,会终止程序运行,如下所示,会告知预期结果与实际结果不符,那么程序就会终止运行了(代码中没有直接使用for循环):文章图片
??
三、数据驱动
??实现:通过导入数据驱动(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)
文章图片
??
??
??好啦~以上就是本次文章分享的全部内容啦,你学会了吗?希望能给大家带来帮助哦!
??
??
文章图片
推荐阅读
- vue|2022 年最新前端 Vue 项目重构总结
- SQL|python操作mysql插入数据
- oeasy教您玩转python - 010 - # 不换行输出
- Python|Pycharm 搭建 Django 项目 (非常详细)
- Php|php实现表单校验功能
- C#|C#文件流FileStream
- CPU底层|【CPU底层那些事(数组和指针真的一样吗()】)
- python|python 内部收益率_用Python计算可变现金流内部收益率(pandas)
- java|为什么使用开源软件_为什么要使用开源软件()