RobotFramework二次开发——Socket推送实时日志
来源:互联网 发布:nginx静态资源缓存 编辑:程序博客网 时间:2024/06/08 06:05
背景
上一章说道RobotFramework
的执行监听,是通过Socket
服务来实现的,那么现在就来实现一下简单的Socket
服务
思路
Socket
服务有一个client
端和一个server
端,Listener.py
我们可以当成一个Client
,因为在执行的时候,我们需要Listener
来发送实时数据,因此,我们还要另写一段服务端的代码。
改造Listener.py
首先,要开启要一个Socket
服务
def __init__(self): self.sock = socket.socket() self.conn = self.sock.connect(("127.0.0.1", 50007))
在类的初始化构造中起一个连接,端口可以先暂时指定,如果有需求,再改造成参数化传入。
之前我们获取的实时数据都是用print
的方式打印出来,现在我们要把每个print
的内容变成send_socket
。
那么就要构造一个发送消息的方法。
def _send_socket(self, msg): self.sock.sendall(msg)
类似这样的,往连接的端口发送数据。
再把所有的print
内容用_send_socket
方法发送出去。
def log_message(self, message): # print message['timestamp'] + " : " + message['level'] + " : " + message['message'] self._send_socket(message['timestamp'] + " : " + message['level'] + " : " + message['message'])
这样,我们的Listerner
就改造完成了。
Server端
Server
端就比较简单了,直接网上找一个代码改改就好。
import socketHOST = '' # Symbolic name meaning all available interfacesPORT = 50007 # Arbitrary non-privileged ports = socket.socket(socket.AF_INET, socket.SOCK_STREAM)s.bind((HOST, PORT))s.listen(1)conn, addr = s.accept()print 'Connected by', addrwhile 1: data = conn.recv(1024) print data if not data: breakconn.close()
说明一下,上面代码中拿到了数据,也是用print
方法打印出来,这里是可以构造很多后续操作的,比如写文件,或者集成到web环境时,可以用yield
返回stream
数据,在web端实时展示数据。
最后没有数据返回的时候,就关闭连接。
完整代码
Listener.py# ecoding=utf-8# Author: Sven_Weng# Email : sven_weng@wengyb.com# Web : http://wybblog.applinzi.comimport socketclass RobotListener(object): ROBOT_LISTENER_API_VERSION = 2 def __init__(self): self.sock = socket.socket() self.conn = self.sock.connect(("127.0.0.1", 50007)) def start_suite(self, name, args): self._send_socket("Starting Suite : " + name + " " + args['source']) def start_test(self, name, args): self._send_socket("Starting test : " + name) if args['template']: print 'Template is : ' + args['template'] def end_test(self, name, args): self._send_socket("Ending test: " + args['longname']) self._send_socket("Test Result is : " + args['status']) self._send_socket("Test Time is: " + str(args['elapsedtime'])) def log_message(self, message): self._send_socket(message['timestamp'] + " : " + message['level'] + " : " + message['message']) def _send_socket(self, msg): self.sock.sendall(msg)
Server.pyimport socketHOST = '' # Symbolic name meaning all available interfacesPORT = 50007 # Arbitrary non-privileged ports = socket.socket(socket.AF_INET, socket.SOCK_STREAM)s.bind((HOST, PORT))s.listen(1)conn, addr = s.accept()print 'Connected by', addrwhile 1: data = conn.recv(1024) print data if not data: breakconn.close()
阅读全文
0 0
- RobotFramework二次开发——Socket推送实时日志
- RobotFramework二次开发——实时日志
- RobotFramework二次开发——文件解析
- socket系列(三)——Spring-socket实时通信、推送
- html5 websocket 实时日志推送
- 利用 socket.io 实现消息实时推送
- socket系列(一)——socket实现推送
- 用node.js(socket.io)实现数据实时推送
- 用node.js(socket.io)实现数据实时推送
- RobotFramework日志不显示
- 测试自动化——robotframework
- robotframework中文日志显示乱码
- robotframework看不到html日志怎么办
- socket推送
- socket系列(二)——Javaee实现实时通信
- robotFramework——FOR循环语句
- java socket编程(1)——利用socket实现聊天之消息推送
- Android 基于Socket的长连接实现一个实时推送的功能
- 聊聊内存泄露和内存溢出
- linux mysql 报错 ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
- java 手机号后台验证是否合法
- 剑指offer—平衡二叉树
- 【Scikit-Learn 中文文档】五十:处理文本数据
- RobotFramework二次开发——Socket推送实时日志
- 使用python matplotlib绘制简单图形
- java FTP图片服务器创建
- 高德地图注意事项
- JN项目-app首页订票功能实现
- Deeplearning4j学习践行记汇总
- Android全面屏适配
- JS 获取两个时间相差多少个小时
- ajax调用一般处理程序的多个方法