post请求之Excel数据与代码分离

x33g5p2x  于2021-09-19 转载在 其他  
字(2.8k)|赞(0)|评价(0)|浏览(429)

写个脚本做压力测试,要求一个设备同时新增100个基站标签,一个一个加太繁琐,因此写了个脚本进行测试,也没提供接口文档,只能通过fiddler抓包找所需接口,下面进入正题

1.新增四个文件,且放在一个目录下,分别是:excel文件(用来存放post请求的正文),ReadExc.py(将excel中的内容解析后拼接成字典),smtp.py(请求报错发送邮件),请求.py(post请求)

2.我测试所发送的请求正文是json格式的,所以存储的格式第一行统一为key,其他行为value,并采用了两个sheet表来保存,格式如下:

ReadExc.py代码:

#coding=utf-8
import xlrd
class Read_Ex():
	def read_excel(self,node):
		#打开excel表
		book = xlrd.open_workbook("./data.xlsx")
		#找到sheet1页
		table1 = book.sheet_by_name("Sheet1")
		#找到sheet2页
		table2 = book.sheet_by_name("Sheet2")
		#获取sheet1总行数总列数
		row_Num1 = table1.nrows
		col_Num1 = table1.ncols

		#获取sheet2总行数列数
		row_Num2 = table2.nrows
		col_Num2 = table2.ncols

		#初始化列表,用来保存excel传入的body值
		s1= []
		s2 = []
		#第一行数据一般是表头,作为字典的key值
		key1 = table1.row_values(0)
		key2 = table2.row_values(0)
		if row_Num1 <= 1 and row_Num2 <= 1:
			print("excel未传入数据")
		else:
			j1 = 1
			j2 = 1
			#执行总行数减1次
			for i in range(row_Num1-1):
				d1={}
				values1 = table1.row_values(j1) #2行 3行....
				for x in range(col_Num1):
					if isinstance(values1[x],float) and x!=1:
						d1[key1[x]]=int(values1[x])
					elif x==1:
						d1[key1[x]]=str(int(values1[x]))
						print(type(d1[key1[x]]))
					else:
						d1[key1[x]]=values1[x] 
				j1+=1
				#s1.append(d1)
			for i in range(row_Num2-1):
				d2={}
				values2 = table2.row_values(j2)
				for x in range(col_Num2):
					if isinstance(values2[x],float):
						d2[key2[x]]=int(values2[x])
					elif x==5:
						values2[x]=None
						d2[key2[x]]=values2[x]
					else:
						d2[key2[x]]=values2[x]
					#print(type(d2[key2[x]]))
				j2+=1
				s2.append(d2)
			d1.update({node:s2})
			return d1

if __name__ == '__main__':
	r = Read_Ex()
	s = r.read_excel('vecTagFilter')
	print(s)

smtp.py代码:

#coding=utf-8
import smtplib,time,os
from email.mime.text import MIMEText
from email.utils import formataddr,parseaddr
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from datetime import datetime

#发送email
class Send_email():
	def send(self,mail_body):
		#发送方邮箱
		msg_from='***@163.com'
		#发送方邮箱的授权码
		passwd='***'
		#收件人邮箱
		msg_to='***@qq.com'

		#主题
		subject="新增温湿度设备请求"
		#发送的正文
		msg=MIMEText(mail_body)
		#主题
		msg['subject']=subject
		#发件人邮箱
		msg['From'] = msg_from
		#收件人邮箱
		msg['To']=msg_to
		#发送时间
		msg['Date'] = time.strftime('%a, %d %b %Y %H:%M:%S %z')
		#邮箱服务器及端口号
		s=smtplib.SMTP_SSL("smtp.163.com",465)
		#登录邮箱
		s.login(msg_from,passwd)
		#发送邮件
		s.sendmail(msg_from,msg_to,msg.as_string())

if __name__ == '__main__':
	pass

请求.py代码

#导包
import unittest
import requests
import json
from ReadExc import Read_Ex
from smtp import Send_email
from datetime import datetime
#断言
class Test_Add(unittest.TestCase):
	def setUp(self):
		print("开始")
	def tearDown(self):
		print("结束")

	def test01(self):
		res1=Read_Ex()
		para=res1.read_excel('vecTagFilter') #连接Sheet2的键
		print(para)
		#接口地址
		url ="接口地址"
		#发送post请求
		#res = requests.post(url,json=para)
		res = requests.post(url,data=json.dumps(para,ensure_ascii=False).encode('utf-8'))
		#获取json数据
		rs=res.json()
		rn=Send_email()
		now = datetime.now()
		if int(rs["nRet"]) != 0:
			rn.send(mail_body='请求未正常发送,时间是:%s'%now)
			print("请求发送失败")
		else:
			print('请求发送成功')

if __name__=='__main__':
	unittest.main()

运行结果:

请求发送失败时邮箱会收到信息,但信息会存在垃圾信箱中

相关文章