小伙伴们在做UI自动化的工具或框架的时候,一定都有截屏功能,当通过截屏来定位问题的时候往往还要去看日志文件,才可以定位问题,那何不将日志也输出到屏幕上,在截屏的时候就截到图片文件上呢?
所以我用flask和win32api写了服务,flask接收测试程序发来的请求,win32api负责输出到屏幕,当需要输出日志的时候,程序给
http://127.0.0.1:5000/log
发个post请求即可。
{ "text":"日志xxxxxxx"}
下面是用postman发请求的效果,显示最后5条日志。
代码不多,整合到测试框架中就可以了。
代码不多,整合到测试框架中就可以了。
代码不多,整合到测试框架中就可以了。
主要需要安装的包 flask,win32api
#encoding=utf-8from flask import Flaskfrom flask import jsonifyfrom flask import requestimport jsonimport _threadfrom threading import Threadimport win32apiimport win32guiimport win32uiimport win32confrom win32con import *import timeimport datetimefrom datetime import timedeltaclass LogShow: def __init__(self): Thread.__init__(self) self.texts = [] def addText(self,text): self.texts.append(text) if len(self.texts)>5: del self.texts[0] def printLog(self): hwnd = win32gui.GetDesktopWindow() # hPen = win32gui.CreatePen(win32con.PS_SOLID, 3, win32api.RGB(255, 255, 255)) # 定义框颜色 hwndDC = win32gui.GetDC(hwnd) # 根据窗口句柄获取窗口的设备上下文DC(Divice Context) dpiScale = win32ui.GetDeviceCaps(hwndDC, win32con.LOGPIXELSX) / 60.0 fontSize = 16 lf = win32gui.LOGFONT() lf.lfFaceName = "Times New Roman" lf.lfHeight = int(round(dpiScale * fontSize)) hf = win32gui.CreateFontIndirect(lf) # win32gui.SelectObject(hwndDC, hPen) win32gui.SelectObject(hwndDC, hf) rect = win32gui.GetClientRect(hwnd) win32gui.Rectangle(hwndDC, 0, 0, 800, 140) # 左上到右下的坐标 i = 0 for text in self.texts: win32gui.DrawText(hwndDC, text, len(text), (0, i * 28, 1024, (i + 1) * 28), DT_SINGLELINE) i += 1 win32gui.ReleaseDC(hwnd, hwndDC)app = Flask(__name__)logShow = LogShow()@app.route('/log',methods=['POST'])def start(): data =json.loads(request.get_data(as_text=True)) text = data['text'] timeStr = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') logShow.addText( timeStr + ' '+ text) logShow.printLog() return jsonify({'returnCode':200})if __name__ == '__main__': app.run()