被上班势力吓哭~来点提神的吧!

来源:互联网 发布:阿里云主机多少钱 编辑:程序博客网 时间:2024/05/17 18:04

1、问题描述

在我们使用Appium+RobotFramework自动化的时候,报告中经常会出现BadStatusLine问题,而且该问题会导致用例失败。




与对框架熟悉些的前辈讨论,都说其原因是连接不稳定导致http请求无返回。这种http请求、连接不稳定的问题好像很难解决。

2、分析

虽然前辈们都说是连接不稳定性导致,我们还是需要例行分析下,出现BadStatusLine相关的堆栈信息如下,其中可以看到相关调用过程,




相关代码如下所示,而且增加了日志,BadStatusLine基本上都是这一种问题,逻辑不难分析,在解析http请求的响应状态时没有数据(1行都没有)时没法继续了,就抛出BadStatusLine问题,确实看起来和前辈们所述完全一致。




问题大概原因知道了,既然是连接不稳定,解决思路是在http请求的上层捕获该异常,捕获到后就重试,最大重试3次,实在不行再抛出异常。

3、解决方案

笔者是使用selenium3.4.3版本;查看版本方法:通过查看Lib\site-packages\selenium中的__init__.py信息即可知道;如果版本相同,可直接做相关修改;如果版本不同,作相应类似修改即可。


主要修改代码Lib\site-packages\selenium\webdriver\remote中的webdriver.py如下图所示,




当然,前面也需要import一些包,如下图




我们在解决过程中也遇到了不少坑,介绍下最重要的一个坑,在关键代码中,我们看到有time.sleep(0.5),这个比较关键,如果没有这个休眠立即重试,效果不是很好,如果这个休眠时间太长,比如5s,会导致很多关键字超时(大部分关键字默认超时时间是5s,通常大家设置的是10~20s),也就失去了我们失败重试的初衷(初衷是想我们关键字执行成功)了。

4、验证分析

4.1 验证分析方法

因为BadStatusLine问题不是必现问题,所以验证起来不是很方便,大家修改完webdriver.py后(修改前记得备份哦)可以把自动化测试跑起来,然后分析自动化测试的日志看有没有出现该问题,出现该问题后有没有重试,重试后有没有效果。


这里简单介绍windows中的分析方法,这时候我们可以通过命令来匹配具体出该问题的时间,再来分析html中的报告来观察,命令:findstr /s /C:"BadStatusLine" ${path}\*.xml ,${path}代表报告路径。

4.2 分析结果

经过验证,这种方案已经解决大部分(80%以上)的BadStatusLine问题,这里提供常见几种关键字出现BadStatusLine问题的分析

Tap关键字,retry后成功了




Capture Page Screenshot关键字,retry后能够看到截图




Close All Applications关键字,retry后没有看到问题




Log Source关键字遇到BadStatusLine再也没出现None了,也不会失败了