Selenium [求解] 测试平台点击测试的时候,调用执行 selenium 方法的时候,平台页面会卡死。

陈林 · 2019年08月02日 · 最后由 陈林 回复于 2019年08月06日 · 408 次阅读


当我平台上点击测试按钮的时候,启动浏览器访问百度,启动的页面没有卡,但是我平台的页面卡死了。
请问一下这是什么原因?是不是我平台一直在等待请求的结果导致卡死?

共收到 31 条回复 时间 点赞

你的平台和执行不是分开的吗?感觉是不是单线程,执行的时候就响应不了页面了?

Jerry li 回复

是分开的,因为我点击完测试是通过 POST 将数据传过去的。
不知道是不是因为我是在 POST 接口里面操作的所以导致这样,还没搞明白。
我从另外一台机子访问平台,然后去执行操作的时候一样卡死了。

3楼 已删除
Jerry li 回复

我明白了,是因为 ajax 请求的问题,同步的话就会导致浏览器卡死,但是同步的时候出现了一个问题。

ajax 异步请求的多啊,尽量别用异步

老中医 回复

但同步的时候,我调用的方法还没执行完,页面就卡死了。

建议详细说下你这个 “点击测试” 按钮点击背后,到底平台做了啥事?

信息太少,只有个截图,也没有齐全的日志(浏览器的、平台服务端的)、大致功能实现逻辑,大伙也不好给你出主意,只能靠猜。实现逻辑猜错了,给的意见也很难有参考意义。

陈恒捷 回复

谢谢回答
点击完之后会向后台提交这些步骤,然后会去调用我判断这些元素并执行相应的方法去找到对应的关键字驱动。

F12 看一眼就应该知道接口一直在请求吧

陈林 #10 · 2019年08月05日 Author
stevenxu 回复

是的,一直在等待请求响应。

你这个写的, 跟 Autotestplat,差别还蛮大啊

陈林 #12 · 2019年08月05日 Author
finer 回复

Autotestplat 我看过,也买了他的书,但没怎么看。
其实现在还没有很好的思路,不知道怎么样写会更好,单元测试不知道怎么写。

陈林 #13 · 2019年08月05日 Author
Jerry li 回复

大佬,请教一个问题。
我现在是这样设计的:
WebDoc.py:接口处理的文件
test_task.py:执行测试的文件
keywords.py:关键字驱动文件
我不知道我这样做对不对,就是当我前端提交测试数据的时候,WebDoc 会去调用 test_task 的 run_main 方法并将数据传进这个方法,然后这个方法将拿到的数据做判断,例如判断到我的操作方法是打开浏览器,就去调用打开浏览器的关键字执行操作。
我现在不知道如果我要加入单元测试的话得写在哪,还有断言。

实现如果是同步,请求肯定要等后台反馈,后台处理延迟性应该作为一个独立异步任务处理,直接返回正在处理,处理完毕后将结果写入某个地方 或者实现实时通知 或者等待前台查询任务执行结果。

陈林 #15 · 2019年08月05日 Author
TestDevWay 回复

谢谢回答,我参考一下。

陈林 回复

不太清楚你说的单元测试是指什么😂

陈林 回复

这个太粗了吧。。。

会向后台提交这些步骤 ,具体是怎么提交,同步还是异步,一次交互还是多次交互?
去调用我判断这些元素并执行相应的方法去找到对应的关键字驱动 ,这个是纯服务端还是服务端 + 客户端的操作?

建议画个 uml 时序图(可以用 plantuml 或者找些支持时序图的 markdown 编辑器),说明下网页点击这个 测试 按钮后,浏览器端和服务端的交互。比你写文字清晰多了。或者直接把你这方面的代码贴出来,也便于了解具体实现细节。

另外,从你的说明上,大致猜到你是用了同步请求,但正常来说同步请求浏览器或者服务端会有个默认超时时间,达到时间只会返回 504 或者 timeout 错误,不应该页面卡住。这里面应该还有其他的问题。需要你提供上面提到的实现细节才好定位解决。

陈林 #18 · 2019年08月06日 Author
Jerry li 回复

就是测试用例有没有执行成功,成功了多少条这样。

陈林 #19 · 2019年08月06日 Author
陈恒捷 回复

刚入门,很多东西不太了解,表达的不够清楚,抱歉。
是异步请求,现在是情况是这样的,当我异步请求完成之后,没有返回结果,就像下图一样。

但是当我改成同步请求的时候就有结果了。

所以,我现在不知道问题出现在前端还是后端接口上。

陈林 回复

你说的是报表吧? 可以了解一下 allure

陈林 #21 · 2019年08月06日 Author
Jerry li 回复

是的,就是最终想生成一个报表,把需求结果返回到报表,总要有点东西给人家看的嘛~
好的,谢谢,我去了解一下。

陈林 #22 · 2019年08月06日 Author
Jerry li 回复

那我可以在成功的时候返回数据,然后返回给前端,前端再绘制图表可以吧?

陈林 回复

你的异步请求代码是怎么写的?这个请求很奇怪,连 http method 都没看到用的是哪个。

陈林 #24 · 2019年08月06日 Author
陈恒捷 回复

谢谢,用 JQ 写的,刚刚找到问题了,原因是因为我加了一个 timeout,删了就没问题了。

我所了解的两种思路:

  1. 用例以 pytest 等模式管理,执行完成后生成对应的 allure 报告。
  2. 自己做一个报表统计功能,实时统计当前执行的状态和进度。
陈林 回复

那就好。不好还是比较好奇,为啥一个 timeout 会导致 http method 都消失了。方便把你之前存在问题的代码附上来不?

另外,建议下次提问,可以把关键代码加上足够的注释,直接贴出来。这样沟通成本低很多。

陈林 #27 · 2019年08月06日 Author
陈恒捷 回复

好的,谢谢,我也觉得挺奇怪的

ajax:

start_test 接口的:

这里面调用的方法执行没问题我就不截了,调了好几个文件。

陈林 #28 · 2019年08月06日 Author
Jerry li 回复

有想过类似的做法,但是没有思路,之前用 unittest,但是那参数我不知道得怎么传,(不知道怎么表达)就是步骤是根据我填进去的数据执行相应的关键字驱动的,所以不知道得怎么设计。

陈林 回复

建议你还是先参考一下其他的平台方案,然后想想自己如何设计吧
感觉你还不清楚要什么效果就在折腾具体代码的问题,很难绕出来。

先把架构设计清楚,再谈实施。

陈林 #30 · 2019年08月06日 Author
Jerry li 回复

行吧,我好好思考思考。谢谢了

陈林 回复

你这段是你当时说会卡死的代码么?好像没看到你提到的 timeout 配置?

陈林 #32 · 2019年08月06日 Author
陈恒捷 回复

只是在 success 上面那个位置而已,那行我删除了,没删之前是这样的。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册