python实现从excel读取数据进行批量get请求
会了用python操作excel,就想把参数放到excel中取,然后进行请求,由于for循环用的不是很溜,就想把每一列除列头以外都取出来放在了一个数组中,通过数组下标获取,结果传递时老是报错,又换成直接取单元格数据取出来一样报错:
以上思路代码:
import os
import xlrd
import requests
class readExcel():
def get_caseName(self,xls_name):
case_name=[]
xlsPath="D:/Programs/Python/resource/testCase.xlsx"
#打开用例excel
file = xlrd.open_workbook(xlsPath)
#sheet = file.sheet_by_name(sheet_name) # 获得打开Excel的sheet
sheet = file.sheet_by_index(0) # 根据索引获取第一个sheet
# 获取这个sheet内容行数
rows = sheet.nrows
for i in range(rows): # 根据行数数做循环
if sheet.row_values(i)[0] != 'case_name': # 如果这个Excel的这个sheet的第i行的第一列不等于case_name那么我们把这行的数据添加到case_name[]
case_name.append(sheet.row_values(i)[0])
return case_name
def get_urlName(self, xls_name):
url_name = []
xlsPath = "D:/Programs/Python/resource/testCase.xlsx"
# 打开用例excel
file = xlrd.open_workbook(xlsPath)
sheet = file.sheet_by_index(0) # 根据索引获取第一个sheet
# 获取这个sheet内容行数
rows = sheet.nrows
for i in range(rows): # 根据行数数做循环
if sheet.row_values(i)[1]!='url':# 如果这个Excel的这个sheet的第i行的第一列不等于url那么我们把这行的数据添加到url_name[]
url_name.append(sheet.row_values(i)[1])
return url_name
def get_paraName(self, xls_name):
para_name=[]
xlsPath = "D:/Programs/Python/resource/testCase.xlsx"
# 打开用例excel
file = xlrd.open_workbook(xlsPath)
sheet = file.sheet_by_index(0) # 根据索引获取第一个sheet
# 获取这个sheet内容行数
rows = sheet.nrows
for i in range(rows): # 根据行数数做循环
if sheet.row_values(i)[2]!='para':# 如果这个Excel的这个sheet的第i行的第3列不等于para那么我们把这行的数据添加到para_name[]
para_name.append(sheet.row_values(i)[2])
return para_name
def get_header(self, xls_name):
header_name=[]
xlsPath = "D:/Programs/Python/resource/testCase.xlsx"
# 打开用例excel
file = xlrd.open_workbook(xlsPath)
sheet = file.sheet_by_index(0) # 根据索引获取第一个sheet
# 获取这个sheet内容行数
rows = sheet.nrows
for i in range(rows): # 根据行数数做循环
if sheet.row_values(i)[3]!='header':# 如果这个Excel的这个sheet的第i行的第3列不等于para那么我们把这行的数据添加到para_name[]
header_name.append(sheet.row_values(i)[3])
return header_name
class HttpTest():
def get(url, para, header):
try:
r = requests.get(url,para, header)
# 响应的json数据转换为可被python识别的数据类型
json_r = r.json()
if r.status_code == 200:
print(“请求成功,结果代码为:”, json_r[“code”])
else:
print(“请求失败!”)
except BaseException as e:
print(“请求异常!”, str(e))
if name == ‘main’: # 我们执行该文件测试一下是否可以正确获取Excel中的值
xlsPath = “D:/Programs/Python/resource/testCase.xlsx”
# 打开用例excel
file = xlrd.open_workbook(xlsPath)
sheet = file.sheet_by_index(0) # 根据索引获取第一个sheet
# 获取这个sheet内容行数
rows = sheet.nrows
for i in range(rows): # 根据行数数做循环
if (sheet.row_values(i)[2]!=‘para’)& (sheet.row_values(i)[1] !=‘url’)&(sheet.row_values(i)[3]!=‘header’):
HttpTest().get(sheet.row_values(i)[1],sheet.row_values(i)[2],sheet.row_values(i)[3])#这个位置被我换成了直接取excel,反正按照数组下标取一样
明明就只传了3个,非说给了4个,python的requets.get方法的参数是字典类型,也知道从excel获取的是str字符串类型,然后就卡住了不知道咋办。只好换了个思路,直接整个完整的贴在excel一列,直接取出来用就解决了。但是多个参数,post请求等还是得分离,放一整个也不智能,跟postman全部建立一遍放集合跑一样道理,还是比较傻瓜。
放完整路径可以成功代码如下:
import os
import xlrd
import requests
if name == ‘main’:
xlsPath = “D:/Programs/Python/resource/gettest.xlsx”
# 打开用例excel
file = xlrd.open_workbook(xlsPath)
# sheet = file.sheet_by_name(sheet_name) # 获得打开Excel的sheet
sheet = file.sheet_by_index(0) # 根据索引获取第一个sheet
# 获取这个sheet内容行数
rows = sheet.nrows
for i in range(rows): # 根据行数数做循环
if sheet.row_values(i)[1] != ‘url’ :#循环判断excel第i行第2列的值
r=requests.get(sheet.row_values(i)[1])#循环取excel第i行第2列的值
# 响应的json数据转换为可被python识别的数据类型
json_r = r.json()
if r.status_code == 200:
print(“请求成功,http状态码为:结果代码为:”,r.status_code, json_r[“code”])
elif r.status_code == 400:
print(“请求参数错误,http状态码为:结果代码为:”, r.status_code)
else:
print(“请求失败!”)
失败原因:
python从excel中解析出来的数据类型不是字典!!,所以无法传递给requests当做请求参数
解决办法:
利用json库的loads方法将数据反序列化
由于我i自己完全小白,python有些什么函数,什么作用都不太清楚,学了一下菜鸟教程,可是没有实际项目写一些东西用,那种基础的根本就理解不深,没大用。只有写了真实的东西来用到了,回头再看基础的定义,理解才会深刻。所以即便我最开始知道传递的是str不是字典也没解决。这个找到的方法我直接贴还是出错,再研究吧。先这样记录一下。
改造了一下可以把响应结果判断存在EXCEL中了,当然写的有点不够简洁,以后熟悉了再优化吧,下一步实现动态取参数,动态断言。
import os
import xlrd
import requests
import xlwt
from xlutils.copy import copy
if name == ‘main’:
# 处理要写入的excel工作簿的信息:
workbook = xlrd.open_workbook('D:/Programs/Python/resource/result.xlsx') # 打开工作簿
new_workbook = copy(workbook) # 将xlrd对象拷贝转化为xlwt对象
new_worksheet = new_workbook.get_sheet(0) # 获取转化后工作簿中的第一个工作表对象
xlsPath = "D:/Programs/Python/resource/gettest.xlsx"
# 打开用例excel
file = xlrd.open_workbook(xlsPath)
# sheet = file.sheet_by_name(sheet_name) # 获得打开Excel的sheet
sheet = file.sheet_by_index(0) # 根据索引获取第一个sheet
# 获取这个sheet内容行数
rows = sheet.nrows
for i in range(rows): # 根据行数数做循环
if sheet.row_values(i)[1] != 'url' :#循环判断excel第i行第2列的值
r=requests.get(sheet.row_values(i)[1])#循环取excel第i行第2列的值
# 响应的json数据转换为可被python识别的数据类型
json_r = r.json()
if r.status_code == 200:
print("请求成功,http状态码为:结果代码为:",r.status_code, json_r["code"])
new_worksheet.write(i, 4, r.status_code)
new_worksheet.write(i, 5, r.text)
new_worksheet.write(i, 6, "pass")
elif r.status_code == 400:
print("请求参数错误,http状态码为:结果代码为:", r.status_code)
new_worksheet.write(i, 4, r.status_code)
new_worksheet.write(i, 5, r.text)
new_worksheet.write(i, 6, "fail")
else:
print("请求失败!")
new_worksheet.write(i, 5, r.text)
new_worksheet.write(i, 6, "fail")
new_workbook.save('D:/Programs/Python/resource/result.xlsx')
上一篇: 虚拟机内下载速度慢解决方法汇总