excel封装和ddt D17

news/2024/7/21 6:59:06 标签: python, 单元测试, excel

1)excel封装 openpyxl的操作

2)ddt 数据驱动测试

## openpyxl的操作

1.安装:pip install openpyxl

2.导入 openpyxl: import openpyxl

3.workbook对象:工作簿,openpyxl.load_workbook()

4.sheet对象:表单 sheet = workbook["表单名"]

5.cell对象:单元格 cell = sheet.cell()

## ddt 数据驱动测试

1.安装:pip install ddt

2.导入:import ddt

3.测试类加上 @ddt.ddt

4.需要进行数据驱动的方法上加@ddt.data(*测试数据)

5.测试用例方法用参数接收 def test_login(self,case_info)

附带代码:

"""excel操作"""
import openpyxl


class ExcelHandler:
    def __init__(self, file_path):
        self.file_path = file_path
        self.workbook = None

    def open_file(self):
        """打开文件"""
        workbook = openpyxl.load_workbook(self.file_path)
        self.workbook = workbook
        return workbook

    def get_sheet(self, sheet_name):
        """获取sheet表单"""
        workbook = self.open_file()
        return workbook[sheet_name]

    def read_data(self, sheet_name):
        """读取数据,并将表格内容按照列表嵌套字典形式返回"""
        sheet = self.get_sheet(sheet_name)
        rows = list(sheet.rows)
        # 获取标题
        headers = []
        for title in rows[0]:
            headers.append(title.value)

        data = []
        for row in rows[1:]:
            row_data = {}
            for index, cell in enumerate(row):
                row_data[headers[index]] = cell.value
            data.append(row_data)
        return data

    def write(self, sheet_name, row, column, data):
        sheet = self.get_sheet(sheet_name)
        sheet.cell(row, column).value = data
        self.save()
        self.close()

    def save(self):
        """保存文件"""
        self.workbook.save(self.file_path)

    def close(self):
        """关闭文件"""
        self.workbook.close(self.file_path)


if __name__ == '__main__':
    print(ExcelHandler("web_cases.xlsx").read_data("Sheet1"))
"""测试登录功能"""
import unittest
import ddt

from demo_2024.excel_handler import ExcelHandler


def login(username=None, password=None):
    """登录"""
    if username != None and password != None:
        if username == "huahua" and password == "123456":
            return {"msg": "login success"}
        else:
            return {"msg": "username or password is error"}
    else:
        return {"msg": "username or password is empty"}


# 用封装的excel操作读取出测试用例
cases = ExcelHandler("web_cases.xlsx").read_data("Sheet1")

"""数据驱动测试:ddt driver testing"""


@ddt.ddt
class TestLogin(unittest.TestCase):

    @ddt.data(*cases)
    def test_login(self, case):
        data = eval(case["data"])
        username = data["username"]
        password = data["password"]
        expected = case["expected"]
        actual = login(username, password)
        self.assertTrue(expected == actual["msg"])


if __name__ == '__main__':
    unittest.main()

作业:

ddt数据驱动
1, 封装 excel 操作的类(自己实现!!)
2, 基于ddt, 实现 login 函数的单元测试

上期答案:

# 作业1
import unittest
import os

from lenmon.libs.HTMLTestRunnerNew import HTMLTestRunner

# 初始化一个加载器
loader = unittest.TestLoader()

dir_path = os.path.dirname(os.path.abspath(__file__))
# 使用loader收集所有的测试用例
test_suite = loader.discover(dir_path)

# 执行测试用例,生成测试报告
with open("reports.html", "wb") as f:
    runner = HTMLTestRunner(
        f,
        title="python第一次测试报告",
        description="登录模块的测试报告",
        tester="wuyi"
    )
    runner.run(test_suite)
# 作业2
import openpyxl

work_book = openpyxl.open("web_cases.xlsx")
sheet = work_book["Sheet1"]
rows = list(sheet.rows)

data = []
headers = []
for title in rows[0]:
    headers.append(title.value)

for row in rows[1:]:
    row_data = {}

    for index, cell in enumerate(row):
        row_data[headers[index]] = cell.value
    data.append(row_data)
print(data)


http://www.niftyadmin.cn/n/5434508.html

相关文章

闯关升级游戏特点,闯关小程序游戏开发

闯关升级类游戏一直以来都备受玩家青睐,其独特的游戏性和吸引力让人们乐此不疲。这类游戏以挑战性关卡和角色成长为核心,让玩家在不断的冒险中获得成就感与乐趣。让我们一起深入探讨这类游戏的特点,以及为何它们如此受欢迎。 挑战性关卡设计…

HAProxy高性能负载均衡器

一、HAProxy基础知识 (一)HAProxy概述 HAProxy是一款基于事件驱动、单进程模型设计的四层与七层负载均衡器,它能够在TCP/UDP层面以及HTTP(S)等应用层协议上实现高效的流量分发。HAProxy不仅适用于Web服务器负载均衡,还能应用于数据…

网络编程-套接字相关基础知识

1.1. Socket简介 套接字&#xff08;socket&#xff09;是一种通信机制&#xff0c;凭借这种机制&#xff0c; 客户端<->服务器 模型的通信方式既可以在本地设备上进行&#xff0c;也可以跨网络进行。 Socket英文原意是“孔”或者“插座”的意思&#xff0c;在网络编程…

[力扣 Hot100]Day51 岛屿数量

题目描述 给你一个由 ‘1’&#xff08;陆地&#xff09;和 ‘0’&#xff08;水&#xff09;组成的的二维网格&#xff0c;请你计算网格中岛屿的数量。 岛屿总是被水包围&#xff0c;并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。 此外&#xff0c;你可以…

Linux开发:设置文件或目录的S_ISVTX

Linux开发:open打开文件-CSDN博客 介绍了在创建文件时可以设置S_ISVTX,那么这个S_ISVTX 是做什么的呢? S_ISVTX 的作用是多用于保护目录下的文件或子目录,如果一个目录被设置了 S_ISVTX,那么想要删除该目录下的文件或子目录,用户必须满足以下条件之一: 1.root用户 2.目…

Docker使用(三)Docker底层分析

Docker使用(三)Docker底层分析 四、底层分析 1、Docker镜像原理 1.1 commit镜像 docker commit 提交容器成为一个新的副本 # 命令和git原理类似 docker commit -m“提交的描述信息” -a“作者” 容器id 目标镜像名:[TAG] 实操&#xff1a; # 1、启动一个默认tomcat # …

Redis学习笔记(基础篇)

Redis基础 1 Redis是什么&#xff1f;1.1 键值型1.2 NoSQL1.2.1 NoSQL与SQL的区别是什么1.2.2 总结 1.3 Redis的特点是什么&#xff1f; 2 Redis怎么用&#xff1f;2.1 Redis的基本命令2.2 Key的层级结构2.3 Redis的基本数据类型有哪些&#xff1f;2.1.1 String类型2.1.2 Hash类…

MySQL Enterprise Backup (MEB) for MySQL 8.0 深入解析及企业级备份恢复演练

一、备份恢复核心概念 MEB简介 MySQL Enterprise Backup 是 Oracle 提供的专业物理备份工具&#xff0c;专为MySQL 8.0及以后版本设计&#xff0c;提供高效且低干扰的在线备份解决方案。它能够实现对InnoDB存储引擎数据的快速备份&#xff0c;并兼容MySQL的诸多高级特性。 主…