author: jwensh
date: 20231130
pycharm 中 pytest 用例执行中 print 日志 standout 实时命令行输出
使用场景
在进行 websocket 接口进行测试的时候,希望有一个 case 是一直执行并接受接口返回的数据
def on_message(ws, message):message = json.loads(message)if message is not None and message['total'] > 0:print(datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f"), message)class TestWss(unittest.TestCase):def test_bttc_todos(self):websocket.enableTrace(False)address = "*****"url = "{}/test/todos/{}".format(BASE_ENV_URL, address)ws = websocket.WebSocketApp(url,on_open=on_open,on_message=on_message,on_error=on_error,on_close=on_close)ws.run_forever(dispatcher=rel) # 这里回一直卡住不然程序停止rel.signal(2, rel.abort) # Keyboard Interruptrel.dispatch()
直接点击 pycharm 上测试方法左侧的执行按钮
是没有任何 on_message
的日志输出
想要 on_message
中的日志能够实时打印,可以修改 pytest 的执行参数
修改参数来达到实时输出日志的效果
- 设置 pycharm 执行测试使用的工具
- 第三步设置成 pytest (pytest 也是兼容 nose 和 unittest, 所以推荐 )
- 第三步设置成 pytest (pytest 也是兼容 nose 和 unittest, 所以推荐 )
- 在用例
用例/调试配置
里设置命令的其他参数--capture=no
或者-s
(pytest -h 就能看到参数)
再次执行用例就能有实时日志了
- 最后: 构建自动化测试用例时,添加简洁且饱含核心信息的日志是非常有必要的。除了添加 pytest 参数形式来展示实时日志,还可以使用 logging 模块来实现运行测试用例的实时输出。
- 可以按自己的需求来,如果只是调试什么的,可以直接用参数
- 如果是想要保留测试过程的重要数据,建议使用 logging