导语:在测试过程中,需要了解一些交易调用量、平均耗时、最大耗时、交易量分布等信息,这些信息一般会存在监控系统,如果根据交易名查询,手工操作比较多,也不好统计,怎么快速获取到一段时间内的监控数据,辅助测试呢,这里通过python快速获取多个分布式缓存key时间。
说明:
1、为方便获取数据,这里做了一些简化,没有做登录,通过chrome登录后,F12,直接获取headers和cookie;
2、为避免涉及代码纠纷,代码里面部分文本信息做了修改;
3、代码逻辑比较简单,直接看代码逻辑及注释
#!/usr/bin/env python
# -*-coding:utf-8-*-
import requests
from bs4 import BeautifulSoup
from frame.lib.util.databox import DataBox
import json
class FetchCkvTime():
def getckv(self,key=''):
self.headers = {
'Accept': 'application/json, text/javascript, */*; q=0.01',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Connection': 'keep-alive',
'Cookie': 'JSESSIONID=82F508F85DBBXX',
'Host': 'xx.com',
'Referer': 'xx.com'
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36',
'X-Requested-With': 'XMLHttpRequest'
}
ckv_key = key
self.url = 'https://xx.com/getChartData.do?ext_flat1= %s ' % (ckv_key)
cookie_str='JSESSIONID=82F508F85DBBXX'
self.headers['Cookie']=cookie_str
print self.headers
print self.url
s = requests.session ()
s.keep_alive = False # 关闭多余连接
ret=s.get(url=self.url,headers=self.headers,verify=False).text
print ckv_key+" "+ret
return ret
def get_avg_costtime(self,ret_rslt):
ret_format_to_list = json.loads (ret_rslt)
i=1
sum_costtime=0
avg_costtime=0
max_costtime=0
for data in ret_format_to_list["result_data"]["curve1"]:
sum_costtime=sum_costtime+data["avg_costtime"]
#最大耗时做排序,比较后取某段时间内的最大耗时
if max_costtime < data["avg_costtime"]:
max_costtime=data["avg_costtime"]
i=i+1
#由于返回json数据比较大,取前100条记录做平均耗时计算
if i>100:
break
avg_costtime=sum_costtime/i
#返回结果list
return [str(avg_costtime),max_costtime]
if __name__ == "__main__":
m=FetchCkvTime()
res = DataBox.pick_one ('lxt', boxlabels='ckv_key', tags='ckv_key')
i=1
out_put_data=''
with open ('d:\ckv_key.txt', 'ab+') as f:
for data in res:
out_put_data=''
#data为key列表,循环获取key值
ret_rslt=m.getckv(data)
ret_format=m.get_avg_costtime (ret_rslt)
for tt in ret_format:
out_put_data=out_put_data+"|"+ str(tt)
f.write(data+":"+out_put_data+'\n')
f.close()