接口测试---Excel表格的数据读、写

介绍了Python中第三方库openpyxl对xlsx格式Excel表格进行数据读取和写回操作。包括安装openpyxl,使用load_workbook()函数进行读写,读取全部数据的三种方式,将实际与测试结果写回表格,最后总结成具备读写功能的完整类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python中第三方库openpyxl可以同时对Excel表格进行读取、写回操作(注意:Excel表格后缀是:xlsx格式)
在这里插入图片描述

一、安装openpyxl

pip install openpyxl

二、使用openpyxl模块中load_workbook()函数对Excel表中的数据进行读取/写回

读取:

  #第一步:打开工作簿
wb = openpyxl.load_workbook('test_data.xlsx')

#第二步:定位表单
sheet = wb['add']

#第三步:定位单元格(取值)
data=sheet.cell(6,2).value
print('读取第6行第2列的值:',data)

#第四步:获取最大行数和最大列数
print('Excel表中最大行:',sheet.max_row)
print('Excel表中最大行:',sheet.max_column)

读取第6行第2列的值: 负数和0相加
Excel表中最大行: 6
Excel表中最大行: 7

写回:

#第一步:打开工作簿
wb = openpyxl.load_workbook('test_data.xlsx')

#第二步:定位表单
sheet = wb['add']

#第三步:定位单元格(写回)
data = sheet.cell(3,6).value='888'
wb.save('test_data.xlsx')

注意:
1.读取、写回操作,Excel表必须关闭状态;
2.Excel表中的数据类型分别是:字符串、数字(整型/浮点型),如需保持Excel 表中的 数据类型,如:列表,元组,字典,可是使用eval()函数。
3.获取Excel表格中最大行、最大列使用:sheet.max_row、sheet.max_column(指的是:有数据的行和列)

三、读取Excel表中的全部数据(for循环),三种方式:

方式一: 把数据放到嵌套的列表里面

import openpyxl

class Doexcel:
    '''封装一个读取数据的类'''

    def __init__(self,filename,sheetname): #把文件名、表单名作为初始化函数,调用类时,要传入
        self.filename = filename
        self.sheetname = sheetname

    def get_data(self):
        wb = openpyxl.load_workbook(self.filename)
        sheet = wb[self.sheetname]

        datas = []
        for i in range(2,sheet.max_row+1):
            data_1 = []
            data_1.append(sheet.cell(i,1).value)
            data_1.append(sheet.cell(i,2).value)
            data_1.append(sheet.cell(i,3).value)
            data_1.append(sheet.cell(i,4).value)
            data_1.append(sheet.cell(i,5).value)
            datas.append(data_1)
        return datas

if __name__ == "__main__":
    res = Doexcel('test_data.xlsx','add').get_data()
    print(res)
    
#取出来的值:使用DDT去解包后,根据索引去取值
[[1, '两个正数相加', 'get', '[1,2]', 3], [2, '一正一负正相加', 'get', '[10,-3]', 7], [3, '两个复数相加', 'get', '[-21,-29]', 50], [4, '正数和0相加', 'post', '[91,0]', 91], [5, '负数和0相加', 'post', '[-1,0]', -1]]

方式二:把数据放在列表里面的子字典里

import openpyxl

class Doexcel:
    '''封装一个读取数据的类'''

    def __init__(self,filename,sheetname): #把文件名、表单名作为初始化函数,调用类时,要传入
        self.filename = filename
        self.sheetname = sheetname

    def get_data(self):
        wb = openpyxl.load_workbook(self.filename)
        sheet = wb[self.sheetname]

        datas = []
        for i in range(2,sheet.max_row+1):
            data_1 = {}
            data_1["case_id"] = sheet.cell(i,1).value
            data_1["title"] = sheet.cell(i,2).value
            data_1["method"] = sheet.cell(i,3).value
            data_1["data"] = sheet.cell(i,4).value
            data_1["eccept_result"] = sheet.cell(i,5).value
            datas.append(data_1)

        return datas

if __name__ == "__main__":
    res = Doexcel('test_data.xlsx','add').get_data()
    print(res)
    
#取出来的值:使用DDT去解包后,根据key去取值
[{'title': '两个正数相加', 'case_id': 1, 'method': 'get', 'eccept_result': 3, 'data': '[1,2]'}, {'title': '一正一负正相加', 'case_id': 2, 'method': 'get', 'eccept_result': 7, 'data': '[10,-3]'}, {'title': '两个复数相加', 'case_id': 3, 'method': 'get', 'eccept_result': 50, 'data': '[-21,-29]'}, {'title': '正数和0相加', 'case_id': 4, 'method': 'post', 'eccept_result': 91, 'data': '[91,0]'}, {'title': '负数和0相加', 'case_id': 5, 'method': 'post', 'eccept_result': -1, 'data': '[-1,0]'}]

方式三:把数据放在对象里面

import openpyxl

class cases:
    '''专门存储测试数据的类'''
    
    def __init__(self):  #属性值为None
        self.case_id = None
        self.title = None
        self.method = None
        self.data = None
        self.except_result = None

class Doexcel:
    '''封装一个读取数据的类'''

    def __init__(self,filename,sheetname): #把文件名、表单名作为初始化函数,调用类时,要传入
        self.filename = filename
        self.sheetname = sheetname

    def get_data(self):
        wb = openpyxl.load_workbook(self.filename)
        sheet = wb[self.sheetname]
        
        datas = []
        for i in range(2,sheet.max_row+1):
            data_1 = cases() #创建一个对象,给对象里面的属性赋值
            data_1.case_id = sheet.cell(i,1).value
            data_1.title = sheet.cell(i,2).value
            data_1.method = sheet.cell(i,3).value
            data_1.data = sheet.cell(i,4).value
            data_1.eccept_result = sheet.cell(i,5).value
            datas.append(data_1)

        return datas

if __name__ == "__main__":
    res = Doexcel('test_data.xlsx','add').get_data()
    print(res)
    
#取出来的值:使用DDT去解包后,根据对象去取值
[<__main__.cases object at 0x000000000351E710>, <__main__.cases object at 0x0000000003D83FD0>, <__main__.cases object at 0x0000000003D83F98>, <__main__.cases object at 0x0000000003D83F60>, <__main__.cases object at 0x0000000003D83F28>]

四、测试完成后,把实际结果与测试结果写回Excel表中:
在这里插入图片描述

import openpyxl

class Doexcel:
    '''封装一个写回数据的类'''

    def __init__(self,filename,sheetname): #把文件名、表单名作为初始化函数,调用类时,要传入
        self.filename = filename
        self.sheetname = sheetname

    def write_back_data(self,row,actual_result,test_result):
        wb = openpyxl.load_workbook(self.filename)
        sheet = wb[self.sheetname]

        sheet.cell(row,6).value = actual_result
        sheet.cell(row,7).value = test_result
        wb.save(self.filename)


if __name__ == "__main__":
    Doexcel('test_data.xlsx','add').write_back_data(5,"2019","fail")

五、总结:写成一个完整的类,具备读取、写回功能

import openpyxl

class Doexcel:
    '''封装一个读取、写回数据的类'''

    def __init__(self,filename,sheetname): #把文件名、表单名作为初始化函数,调用类时,要传入
        self.filename = filename
        self.sheetname = sheetname

    def get_data(self):
        '''读取数据的函数'''
        wb = openpyxl.load_workbook(self.filename)
        sheet = wb[self.sheetname]

        datas = []
        for i in range(2,sheet.max_row+1):
            data_1 = []
            data_1.append(sheet.cell(i,1).value)
            data_1.append(sheet.cell(i,2).value)
            data_1.append(sheet.cell(i,3).value)
            data_1.append(sheet.cell(i,4).value)
            data_1.append(sheet.cell(i,5).value)
            datas.append(data_1)
        return datas

    def write_back_data(self,row,actual_result,test_result):
        '''写回结果的函数'''
        wb = openpyxl.load_workbook(self.filename)
        sheet = wb[self.sheetname]

        sheet.cell(row,6).value = actual_result  #实际结果
        sheet.cell(row,7).value = test_result     #测试结果
        wb.save(self.filename) #注意:必须保存

if __name__ == "__main__":
    res = Doexcel('test_data.xlsx','add').get_data()
    print(res)
    Doexcel('test_data.xlsx','add').write_back_data(6,"2000","pass")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值