用Python获取log并解析,RPC接口请求

接到这样的一个需求就是,通过抓取接口的操作日志,然后解析出来相应的参数,然后通过rpc接口回放这些日志。

获取log

这里有一点特殊的是,我的log并不是来自于控制台,而是来自于Chrome浏览器的开发者工具,因为后台是用node.js写的。页面相当于一个触发器。打开一个页面,这个页面会触发一些单元测试用例,然后会产生一系列的log。

所以问题的关键就是如何获取Chrome开发者工具控制台的信息?答案就是:利用selenium,selenium会有一个接口,get_log(),通过这个接口,就可以获得相应的日志。示例代码如下:

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
import time
# enable browser logging
d = DesiredCapabilities.CHROME
d['loggingPrefs'] = { 'browser':'ALL' }
chromedriver="/Users/mac/Desktop/chromedriver"
driver = webdriver.Chrome(chromedriver,desired_capabilities=d)
# load some site
driver.get('http://localhost:5000/test.html')
# print messages
time.sleep(10)
with open('red.txt','w') as f:

    for entry in driver.get_log('browser'):
        print (entry)
        f.write(str(entry))
        f.write('\n')

但是这样打印出来的日志,并不能打印出json数组,也不能打印出对象。所以需要在log打印源头上改。

解析log

上一步的log都放在了txt文件中,所以先读取文件。findall是匹配到所有的。先筛选出含有的部分,在用[A-Za-z0-9-_]{1,50}提取出来

with open('red.txt','r') as f:
        a=f.readlines()
        all_obj={}
        s=0
        for i in a:
            temp_dict={}

            #获取入参
            in_p=re.compile(r'\\"(.*)\"')
            in_matchObj=in_p.findall(i)
            in_p_last=re.compile(r'[A-Za-z0-9-_]{1,50}')
            in_lastObj=in_p_last.findall(str(in_matchObj))

RPC接口

这里不同的RPC框架使用不同的方式吧,但结构大致都类似,我当时的后端,他们用的是zbus这个rpc方式,官方文档上有Python的请求方式,

from zbus import ClientBootstrap
b = ClientBootstrap() #重对象,里面有连接池,建议应用层面共享,!切记不能每次方法调用实例化一次!
#b.ha(True) #默认直连,不启用HA
b.service_address('localhost:15555')
b.service_token('')
b.service_name('hiposNewAge') #设置默认的服务标识,可动态改变
b.module('OrderService') #设置默认的模块, 可动态改变
b.timeout(10)

rpc = b.invoker()    
r=rpc.OpenOrder(ticketId)#调用相应的RPC服务
       

参考链接:
zbus官方文档

    原文作者:Manuone
    原文地址: https://www.jianshu.com/p/5380a2ae2df8
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞