在python中,我们搭建接口自动化框架里面离不开数据的遍历和调用,这时候我们要用到python强大的库,来获取和调用我们存放在Excel中的数据
首先第一种库:openpyxl 的调用,注意:openpyxl 库只能读取.xlsx文件格式的数据
方法一:
from openpyxl import load_workbook
class Http_Excel_Tow:
def __init__(self, file_name, sheet_name):
self.file_name = file_name
self.sheet_name = sheet_name
self.sheet_obj = load_workbook(self.file_name)[self.sheet_name] # 获取文件对象
self.max_row = self.sheet_obj.max_row # 获取最大行
def do_real(self, i, j):
return self.sheet_obj.cell(i, j).value # 获取文件(行,列)的参数化
if __name__ == '__main__':
res = Http_Excel_Tow('test_api.xlsx', 'python').do_real(1, 4) #打开test_api.xlsx文件,获取其中第一行第四列的数据
print(res)
#方法一的调用 在另外执行我们测试用例的py文件中
from class_demo_login_topup.http_excel_2 import Http_Excel_Tow
res = Http_Excel_Tow('test_api.xlsx', 'python') # 引用实例
suite = unittest.TestSuite()
for i in range(1, res.max_row+1):# 遍历我们最大行+1 遍历 1 2 3 4行的数据
suite.addTest(Login_Http('test_api', res.do_real(i, 1), eval(res.do_real(i, 2)), res.do_real(i, 3),str(res.do_real(i, 4))))
# 执行我们自己写的测试Login_Http类中test_api方法,数据调用do_real方法,实现四行四列数据的遍历,其中:eval()是在EXCEL读取的是字符串,所以要还原之前的字典类型,str()这列在EXCEL读取中是数字,要改成字符串,前面加str()转化一下
方法二:
from openpyxl import load_workbook
class HttpExcel:
def __init__(self, excel_name, sheet_name):
self.excel_name = excel_name
self.sheet_name = sheet_name
def real_excel(self): # real_excel(self, mode='all'):
mode = FileConfig().config('do_config', 'MODE', 'mode') # 遍历 1 3 登录和充值两条用例
wb = load_workbook(self.excel_name)
sheet = wb[self.sheet_name]
test_data = []
for i in range(1, sheet.max_row + 1): # 遍历 1 2 3 4 sheet.max_row EXCEL中的最大行
sub_test = {
}
sub_test['mode'] = sheet.cell(i, 1).value
sub_test['url'] = sheet.cell(i, 2).value
sub_test['data'] = sheet.cell(i, 3).value
sub_test['method'] = sheet.cell(i, 4).value
sub_test['expected'] = sheet.cell(i, 5).value
test_data.append(sub_test)
if mode == 'all':
final_data = test_data
else:
final_data = []
for item in test_data:
if item['mode'] in eval(mode):
final_data.append(item)
return final_data
def write_back(self, i, value): # 把测试结果写入到EXCEL文件中 I 行数 V 结果值保存
wb = openpyxl.load_workbook(self.file_name)
sheet = wb[self.sheet_name]
sheet.cell(i, 7).value = value
wb.save(self.file_name)
if __name__ == '__main__':
res = HttpExcel('test_api.xlsx', 'python').real_excel()
print(res)
#方法二的调用 在另外执行我们测试用例的py文件中
test_data = HttpExcel('test_api.xlsx', 'python').real_excel()
for item in test_data:
suite.addTest(Login_Http('test_api', item['url'], eval(item['data']), item['method'], str(item['expected'])))
其实我们最后实现的 test_data 数据就是这样的:
[{
'url':'xx','data':{
'xx'},'method':'xx','expected':'xx'},
{
'url':'xx','data':{
'xx'},'method':'xx','expected':'xx'},
{
'url':'xx','data':{
'xx'},'method':'xx','expected':'xx'},
{
'url':'xx','data':{
'xx'},'method':'xx','expected':'xx'}]
openpyxl 库提取的位置(1,1),对应的是蓝色框的一列:openpyxl没有定位(0,0)
openpyxl 库提取的位置(1,2),对应的是蓝色框的一列:
openpyxl 库提取的位置(2,1),对应的是蓝色框的一列:
openpyxl 库提取的位置(2,2),对应的是蓝色框的一列:
第二种库:xlrd 这种库 就只支持.xls文件,写成类 参考第一种情况
import xlrd
table = xlrd.open_workbook('test.xls')
Sheet = table.sheet_by_name('python')
print(Sheet.cell(1, 1).value)
print(Sheet.row_values(1)) # 获取第一行的全部数据
一、
下面是示例:excel内容在文章中register内容一致: 但是配置文件读取的mode很有区别:
ReadExcel类的配置文件config的内容是:
[MODE]
test_1=[1,3]
import xlrd
from config.class_config import ReadFile
class ReadExcel():
def __init__(self, excel_name, sheet_name):
self.excel_name = excel_name
self.sheet_name = sheet_name
def read_excel_value(self, i, j):
table = xlrd.open_workbook(self.excel_name) # 获取文件对象
# nrows = table.sheet_by_name(self.sheet_name).nrows # 获取最大行数
sheet = table.sheet_by_name(self.sheet_name) # 定位表单
return sheet.cell(i, j).value # 获取文件(行,列)的参数化
def read_excel(self):
mode = ReadFile().read('../data/data.config', 'MODE', 'test_1') # 遍历充值 1 3 两条用例
table = xlrd.open_workbook(self.excel_name)
sheet = tabl