首页 > 编程语言 >python测试用例数据驱动(读取写入excel)

python测试用例数据驱动(读取写入excel)

时间:2023-09-18 15:24:30浏览次数:52  
标签:行号 python self excel param 表单 sheetname 测试用例 row

Python 中处理 excel 数据的模块非常多,比如: xlxd(只读)、xlwd(只写)、openpyxl(可读写)

Excel 文件和下面的py文件代码一定要在同一个文件夹内,不然需要指定具体的 Excel 文件路径

注意:excel文件为xlsx,不能是xls再转换成xlsx格式的文件,会报错

from openpyxl import load_workbook


class HandleExcel:
    """
    封装excel文件处理类
    """
    def __init__(self, filename, sheetname=None):
        """      定义构造方法
        :param filename: 文件名=实例属性
        :param sheetname: 表单名,如果表单名只有一个可以设置为默认值
        """
        self.filename = filename
        self.sheetname = sheetname

    def get_cases(self):
        """
        获取所有的测试用例,实例方法
        :return:为嵌套字典的列表
        """
        # 打开文件:使用load_workbook(楼的我的不可)传入文件名
        wb = load_workbook(self.filename)   # 返回创建一个Workbook的对象, 相当是一个excel文件
        if self.sheetname is None:          # 定位表单,判断是否制定表单默认空,为第一个表单
            ws = wb.active                  # active 获取第一个表单
        else:
            ws = wb[self.sheetname]         # 否则获取指定的表单
        # min_row = 最小行号,max_row=最大行号(可以不写)
        # min_col = 最小列号,max_col=最大列号
        # values_only = 获取单元格的值
        # 获取表头的信息,使用 iter_rows方法,嵌套元祖的元祖,省略最小行号
        head_data_tuple = tuple(ws.iter_rows(max_row=1, values_only=True))[0]
        one_list = []
        for one_tuple in tuple(ws.iter_rows(min_row=2, values_only=True)):  # 不需要表头最小行号为2,不需要最大行号,最大最小列号
            # zip 函数将表头的元祖与每一行用例所在的元祖进行拼接,dict转换为字典后,添加到列表当中 one_list = []
            one_list.append(dict(zip(head_data_tuple, one_tuple)))
        return one_list  # 为嵌套字典的列表

    def get_one_case(self, row):
        """
        获取某一条测试用例
        :param row: 行号
        :return:嵌套字典的列表,使用位置进行获取
        """
        return self.get_cases()[row - 1]

    def write_result(self, row, actual, result):
        """
        写入数据到测试用例指定的行列中
        :param row: 行号
        :param actual: 实际结果
        :param result: 用例执行的结果(Pass或者Fail)
        :return:
        """
        # 同一个Workbook对象, 如果将数据写入到多个表单中, 那么只有最后一个表单能写入成功,需要创建不同的对象
        other_wb = load_workbook(self.filename)     # 创建对象 = 打开一个文件
        if self.sheetname is None:
            other_ws = other_wb.active
        else:
            other_ws = other_wb[self.sheetname]
        # 写入
        if isinstance(row, int) and (2 <= row <= other_ws.max_row):     # 不能修改表头,下一行开始,行号大于2,小于最大的行号
            other_ws.cell(row=row, column=6, value=actual)              # 在第六行写入实际结果
            other_ws.cell(row=row, column=7, value=result)              # 在第七行写入用例执行的结果
            other_wb.save(self.filename)                                # save 保存文件
            other_wb.close()        # close关闭 ----- 读数据的时候不需要关闭,写数据的时候可关闭或不关闭
        else:   # 如果不是整数,行号小于2,并且大于最大的行号
            print("传入的行号有误, 行号应为大于1的整数")


if __name__ == '__main__':      # 自己写的模块自己用使用 main 函数
    filename = "caseqq.xlsx"
    sheetname = "case"     # 指定第二个表单名
    # 创建一个对象,filename=文件名和sheetname=表单名可以不传
    # do_excel = HandleExcel(filename)  # 传文件名,不传默认第一个表单

    do_excel = HandleExcel(filename, sheetname)
    # 获取所有的测试用例cases,使用对象调用实例方法
    cases = do_excel.get_cases()
    print(cases)
    # 写入,在第二行写入"20230918", "设置Pass"
    do_excel.write_result(2, "20230918", "设置pass")

 

标签:行号,python,self,excel,param,表单,sheetname,测试用例,row
From: https://www.cnblogs.com/may18/p/17711902.html

相关文章

  • 极速上手Python分布式爬虫
    随着互联网的快速发展,获取大量数据已成为许多项目的核心需求。而Python分布式爬虫是一种高效获取数据的方法。今天,我将个大家分享一下,想要极速上手Python分布式爬虫的一些知识,让你能够迅速掌握这一实用的技术。什么是分布式爬虫?分布式爬虫是一种利用多台机器协同工作的爬虫系统。它......
  • python包离线环境安装与批量安装
    python项目进行落地部署的时候,经常是在离线的服务器或者工控机中进行的。python不同于c类程序,可以直接复制外部依赖项文件夹,这时,python程序如果需要正常运行,需要编写过程中第三方库的支持。首先,在联网环境下,进入cmd终端,使用以下命令下载包python-mpipdownloadtest1test2==......
  • Python 压缩图片至指定大小
    @https://www.cnblogs.com/jum-bolg/p/13796595.htmlimportbase64importioimportosfromPILimportImagefromPILimportImageFile#压缩图片文件defcompress_image(outfile,mb=600,quality=85,k=0.9):"""不改变图片尺寸压缩到指定大小:paramoutfile......
  • Python在Linux上执行脚本
    Linux命令行运行Python脚本1.安装Python解释器查看Python解释器安装位置:whichpython2.创建Python脚本这里说下在linux中命令行创建Python脚本##nano命令创建hello.py,里面写一个print("Hello,World!")nanohello.py更多场景是你写个python文件,上传服务器,......
  • 184_Python 在 Excel 和 Power BI 绘制堆积瀑布图
    184_Python在Excel和PowerBI绘制堆积瀑布图一、背景在2023年8月22日微软Excel官方宣布:在Excel原生内置的支持了Python。博客原文笔者第一时间就更新到了Excel的预览版,通过了漫长等待分发,现在可以体验了,先来看看效果。在Excel公式选项卡下Python菜单......
  • Excel 中 vbA 获得有效行数的方法
       Excel有65536行256列   但是我们可能只用了其中的部分行。在实际情况下,我们做VBA编程的时候可能希望获得实际使用的有效行数。   下面是用vba获得有效行数的方法:   Range("a1").CurrentRegion.SpecialCells(xlCellTypeLastCell).RowActiveSheet.Ran......
  • vb.net 开发 excel Addin 学习(5)---- 几个小问题
    在做 excelAddin开发的时候越到了几个小问题。总结一下。一,Addin无缘无故不加载。没有任何痕迹可查询。解决方法: 可能是Excel禁止了你的addin,也就是你的addin被列入了黑名单,如果真是这样,看一下下面的(有图示说明),或许可以解决问题。在Excel2003中,点击标题栏中的......
  • 《最新出炉》系列初窥篇-Python+Playwright自动化测试-16-处理模态对话框弹窗
    1.简介我们在日常工作中,会经常遇到弹出警告框的问题,弹框无法绕过,必须处理才可以执行后续的测试,所以弹框处理也是我们必须掌握的一个知识。宏哥在java+selenium系列文章中介绍过这部分内容。那么,playwright对于弹框的处理是怎样的?是否比selenium更加简单呢?下面我们就来介绍一下pla......
  • Python爬虫自动切换爬虫ip的完美方案
    在进行网络爬虫时,经常会遇到需要切换爬虫ip的情况,以绕过限制或保护自己的爬虫请求。今天,我将为你介绍Python爬虫中自动切换爬虫ip的终极方案,让你的爬虫更加高效稳定。步骤一:准备爬虫ip池首先,你需要准备一个可靠的爬虫ip池。爬虫ip池是由多个爬虫ip组成的集合,可以通过API或爬虫获取......
  • Python基础教程08 - 面向对象的基本概念
    Python使用类(class)和对象(object),进行面向对象(object-orientedprogramming,简称OOP)的编程。面向对象的最主要目的是提高程序的重复使用性。我们这么早切入面向对象编程的原因是,Python的整个概念是基于对象的。了解OOP是进一步学习Python的关键。下面是对面向对象的一种理解,基于分......