目录
背景:
(每周进步一点点)
我是一名小测试,目前主要在负责一个工厂项目的测试工作,包括工厂使用的出货和货物管理的系统,客户使用的一个小程序。
同时还包括给我们的客户解决一些问题(我们叫他生产问题),巡检APM。
由于我们的系统主要布在阿里云上,利用kibana记录一些报错日志,工作要求我们每周去检查这些日志,尤其是报错的日志,以及未出现的报错。
需求:
以往都是人工去查看,时间会出现问题,比如这周是周五早上9点看的,下周是下午2点看的,那么就会有一段时间没有照顾到,以及服务比较多每次查看下来都要半个小时起步,再就是报错的发生次数比较多,一周的报错上千上万都是正常的,对报错内容进行抽检,查看参数,进行分析。如此以来工作重复。
那么利用能不能利用现有的工具去简化呢?想到的最贴近的解决方式就是爬虫,爬取数据+处理数据+持久化储存。
准备工作:
爬虫的主要工作方式就是利用接口来获取信息。
准确的抓到接口请求是我们要做的第一步,通过f12进行筛选和抓取
这是我们抓取到的接口详情。
我们一共有ASC,PSSO,Device,Admin,DC等服务
按照同样的操作,获取其接口地址
我们将后面参数的位置去掉,可以明显发现这个位置就是服务的地方,往后看,明显的参数还包括了时间,start和end的位置。(等会需要作为参数代入进去)
我们看下这个接口返回的是什么?
用游览器访问网址可以拿到一个json
错误的名称,发生次数,还有id 是我们所需要的。
代码:
转到我们代码的层面上来,第一步,获取对应的参数,对应的服务以及时间,时间有两个参数,star和end, 在上面的地址中,我们还发现这个日期是补位的,所以需要进行一个补位操作,设定了一个add0()的方法去调用
import datetime
def add0(xx):
if xx < 10:
xx = f'0{xx}'
else:
pass
return xx
now = datetime.datetime.now()
nowdate = f"{now.year}-{add0(now.month)}-{add0(now.day)}"
now_7 = now + datetime.timedelta(days=-7)
now_7date = f"{now_7.year}-{add0(now_7.month)}-{add0(now_7.day)}"
首要的参数服务名以及把上面的时间参数混入进来:
url = ['Service-Filter-Prd', 'Device-Prd', 'UI-Admin-Prd',
'Service-OTA-Prd', 'DC_Web_Host', 'ASC_Web_Host', 'PSSO_Web_Host']
for i in range(0, len(url)):
ASC_url = f"http://kiban.cn:12560/s/apm/internal/apm/services/{url[i]}/errors?environment=ENVIRONMENT_ALL&kuery=&start={now_7date}T01%3A00%3A00.000Z&end={nowdate}T01%3A00%3A00.000Z&sortDirection=desc"
print(f'{ASC_url}')
利用爬虫的方式,拿到这个json,(这里需要导入json包)
如果是正常爬虫的话,需要加入head,token等参数,从上面f12那里往下找是可以复制过来的,(token其实也是从接口获取的,可以从接口获取返回作为参数传递给下一个接口,与接口测试相通)
result = requests.get(ASC_url).text
errorgroup = json.loads(result)
拿到json之后,就是解析数据,在爬虫里也有这步
errorgroup_result = errorgroup['errorGroups']
for j in range(0, len(errorgroup_result), 1):
message = errorgroup_result[j]
# print(message)
messages = json.dumps(message)
# print(messages)
error = json.loads(messages)
errname = error['message']
errtime = error['occurrenceCount']
errid = error['groupId']
这边只要能拿出来这个错误信息,发生次数,id这三个参数就行,由于有的服务没有错,所以需要提前做判断,在后面的持久化储存中进行操作
爬虫的最后一步就是持久化储存,原本是用来储存比如页面,图片等信息的,我们这边会把数据放入表格中。
使用的是openpyxl这个库,打开表格,存入数据,保存,相关请查询openpyxl库,是一个比较适合自动化办公的库
wb = Workbook()
wb.active
# 如果没有上面为新建,使用一次后转为下面指令
# wb = load_workbook('jilu.xlsx')
# 打开表和加入我们的第一行作为筛选条件
ws1 = wb.create_sheet(title=f'{nowdate}', index=0)
ws1.append(['报错服务','与错误信息', '发生次数', 'kibana地址','备注:\n1. 是否需要重点关注\n2. 导致错误原因\n3. 是否是我们的系统在调用?其他平台调用?\n4. 是否需要处理, 处理状态'])
#把服务名,错误信息,次数 地址加入
ws1.append([f'{url[i]}', f'{errname}', f'{errtime}', f'{errurl}'])
wb.save(f'{nowdate}.xlsx')
最后跑出来是个表格。这是表格的内容最后一栏需要人工判断,并且提供地址(也是使用上面的方法拼接出来的地址,此处需要的参数为上面的id)
至此,每周的巡检只需要半个小时左右即可完成,同时可以对比出新增的问题,以及错误报错趋势的变化。