上次我们已经将requests库封装成我们想要的样子了,我们的接口自动化已经完成了最开始的一步了,接下来我们需要完成我们相应的其他模块的封装,下面简单介绍下我们在接口自动化需要用到的模块吧
在接口自动化中我们常用的模块有requests、openpyxl、pymysql、configparser、ddt、HTMLTestRunner等一些模块
下面介绍下openpyxl是怎么用的吧

安装方式

  pip install openpyxl

使用方式
直接看代码块吧,详细描述在代码块里面的注释会写的

 import openpyxl

 # 获取wb的对象
wb = openpyxl.load_workbook(r"D:\test.xlsx")
# 获取工作表
sheet = wb["test1"]
# 读取改工作表的最大行
print(sheet.max_row)

上面的只是一个openpyxl的简单用法,获取Excel里面的数据我直接封装到类里面了
下面的封装方法都是适用任何项目的

import openpyxl

class ReadExcel:
"""读取Excel"""
def __init__(self, file_path, sheet_name):
self.file_path = file_path
self.sheet_name = sheet_name def open(self):
"""获取wb对象"""
self.wb = openpyxl.load_workbook(self.file_path) def get_sheet(self):
"""
获取sheet
"""
self.open()
sheet = self.wb[self.sheet_name]
self.wb.close()
return sheet def get_cell(self, row, col):
"""
获取单元格对象
"""
object = self.get_sheet().cell(row, col)
self.wb.close()
return object def get_cell_value(self, row, col):
"""
获取某一个单元格的值
"""
data = self.get_cell(row, col).value
self.wb.close()
return data def read(self):
"""读取所有数据"""
# 运用列表推导式获取title
headers = [i.value for i in self.get_sheet()[1]]
row_data = []
for row in range(2, self.get_sheet().max_row+1):
data = []
for col in range(1, self.get_sheet().max_column+1):
data.append(self.get_cell_value(row, col))
# 用zip函数将两个列表组合成字典
data_info = dict(zip(headers, data))
row_data.append(data_info)
self.wb.close()
return row_data def write(self, row, col, values):
"""
回写数据
:param row:
:param col:
:param values:
:return:
"""
self.get_cell(row, col).value = values
self.save()
return self.get_cell(row, col).value def save(self):
"""
保存
:return:
"""
self.wb.save(self.file_path)

读取所有的数据展示是这样的:

接口自动化--读取Excel操作(openpyxl)-LMLPHP

接口自动化--读取Excel操作(openpyxl)-LMLPHP

其实在做Excel的数据回写,一般是采用静态方法,我上面没有采用静态方法的原因是因为我的每一个wb对象使用完之后都是进行关闭的,所以不会有什么影响,但是如果说你的wb对象是在init方法中获取,建议还是回写操作用静态方法。
--------------------------------------------------------------------------------------------------------------------------------------学无止境,欢迎大家提意见,共同交流进步----------------------------------------------------------------------------------------------------------------------------------------------------------------------

05-11 20:50