Library 'Process' 中有个 keyword 'Start Process'。
(Starts a new process on background)
注:Library 'OperatingSystem' 中也有个 keyword 'Start Process'。但是已被废弃,建议用 Process.Start Process。
=== 这部分是我发现这个“坑”的经过。不感兴趣的,可直接跳到文末 ===
最近遇到个问题。
> 现象:
注:被测系统 (SUT) 是一个 WinForm 程序,用 C# .Net 编写
- 在执行某个 Case 时,手动执行一切正常;
- 但是用 Robot Framework 执行时,总是执行到某个固定步骤时 SUT 卡死;
- (接上一步)此时,如果停掉 Robot Framework,SUT 又能继续执行,正常结束;
- 同一个 Case 在测试以前的版本时没有这个问题。
> 经过:
刚接到这个任务时,我首先怀疑是 Case 的脚本有所不妥,导致被测系统被影响。
(毕竟手动执行没问题)
于是:
- 研究了被测系统卡死时 Robot Framework 正在执行的那个 keyword。无果。该 keyword(我自己实现的):在固定时间内不断检测被测系统是否有弹出消息框,直到消息框弹出或超时。我也考虑过是不是 UIAutomation 底层实现导致:Robot Framework 不断检测 SUT 的 UI;SUT 又要不断更新 UI(刷新各种界面特效)。想了想感觉可能性不大,接着考虑其它原因。
- Review 整条 Case 执行线。无果。
- 然后用排除法(半自动化):手动启动 SUT,自动执行后续步骤。SUT 顺利执行完毕。
于是猜测是脚本中,启动 SUT 的方式导致的。
把启动方式从
Process.Start Process ${SUT.exe}
改为
Evaluate subprocess.Popen(['${SUT.exe}']) subprocess
经测试,SUT 顺利执行完毕。
为了不 delay 测试业务太多时间,先用上这个新方案,具体问题原因自己再慢慢研究。
拿到 SUT 源码,开始调试。
发现如果用 Start Process 启动 SUT,SUT 在某处调用 Console.WriteLine 时会卡死。
这个语句在一个循环中,而且每次都是执行循环固定次数后卡死。
此时隐约感觉是输出被重定向后遇到最大输出数据的限制了。
然后就是后续的一些对比实验验证了该想法。
=== 发现过程结束 ===
Process.Start Process ${SUT.exe}
vs
Evaluate subprocess.Popen(['${SUT.exe}']) subprocess
其实这两者底层都调用了 subprocess.Popen,但是传给 Popen 的参数有所不同。
- Start Process 在内部会对参数赋予一些特定的默认值;
- 其中,子进程的输出被重定向为 subprocess.PIPE;
- 输出被重定向到一个流,而且这个没有任何读者(除非用户主动发起相关操作);
- 如果子进程不断往这个输出流写数据,会导致流中数据越来越多(没有被读出去),并达到限制的最大值;
- 然后子进程就被卡死在下一次写操作上 (流已满,无法写入)。
MSDN 上的一些示例也有对这类死锁的一些说明:Process.StandardOutput Property
相关推荐
robotframework-ride-1.5a1.win-amd64 exe
标题 "robotframework-excellibrary-0.0.2.zip" 提供的是一个名为 ExcelLibrary 的 Robot Framework 模块的特定版本(0.0.2)。Robot Framework 是一个通用的自动化测试框架,它允许用户使用关键词驱动的方法进行...
robort framework RIDE win64,用于64位机。安装64bit的robot framework 需要wxPython2.8的,不然打不开RIDE的快捷方式
**Robot Framework RIDE 1.5.2.1 深度解析** Robot Framework RIDE (Robot Framework Integrated Development Environment) 是一个基于 Python 的开源测试自动化框架的图形化用户界面工具。RIDE 支持 Robot ...
robotframework-excellibrary适配python 3版本,在python3.7.9上安装正常。 下载好压缩包 ->解压 -> 在解压目录的当前文件夹下,打开终端,输入 : python setup.py install 即可,安装成功后,pip list查看
要让robotframework-ide能正常运行,需要wxpython安装到python2.7目录下(注:我的装是python2.7版本) $cd /usr/tools/wxwidgets2.8.7/wxPython $python setup.py install WX_CONFIG=/opt/wx/2.8/bin/wx-config ...
标题中的"franz-see-Robotframework-Database-Library-0.7-3-gc2d7412.tar"表明这是一个与Robot Framework相关的数据库库的压缩包,具体版本为0.7-3,其中的"gc2d7412"可能是Git提交的哈希值,通常用于追踪代码仓库...
在"robotframework-appiumlibrary-1.4.2.tar.gz"这个压缩包中,我们找到了版本号为1.4.2的Robotframework-AppiumLibrary源代码或安装包。这个版本可能包含了修复的错误、新功能的添加以及性能的优化。通常,.tar.gz...
robotframework-ride-1.4.win-amd64.exe
Robotframework-Database-Library 是一个基于 Robot Framework 的扩展库,专为自动化测试设计,用于与各种数据库进行交互。这个库提供了丰富的关键字,使得测试人员能够方便地执行查询、插入、更新和删除等数据库...
robotframework-ride-1.3.win-amd64.exe
robotframework-ride-1.4.1.win-amd64.exe,可视化的自动化开发工具。
在集成测试中,SSHLibrary与其他Robot Framework库如`robotframework-seleniumlibrary`(用于Web自动化)和`robotframework-dblibrary`(用于数据库操作)一起,构建出强大的自动化测试流程。通过编写清晰易读的测试...
robotframework-3.1.1-py2.py3-none-any.whl 支持python3
标题中的“已经修复安装报错:robotframework-excellibrary-0.0.2.zip”表明这是一个关于Robot Framework的扩展库——ExcelLibrary的修复版本,版本号为0.0.2,且该库在之前的安装过程中遇到了错误,但现在已经被...
在本文中,我们将探讨“robotframework-archetype-quickstart-1.0.1.zip”这个压缩包,这是一个专门为创建基于Robot Framework的测试套件而设计的快速启动原型。 首先,我们要了解什么是“archetype”。在Maven或者...
robotframework-2.6.0.win32.exe(然后装robot的Framework) robotframework-ride-0.38.1.win32.exe(robotFramework的IDE,很不错) robotframework-seleniumlibrary-2.8.win32.exe(seleniumLibrary)
标题"robotframework-excellibrary-0.0.2.rar"表明这是一个名为"robotframework-excellibrary"的库的特定版本,版本号为0.0.2,且以RAR压缩格式提供。Robot Framework是一个通用的自动化测试框架,而Excellibrary是...
Robot Framework 安装指南 http://blog.sina.com.cn/s/blog_654c6ec70100tkxn.html 使用Robot Framework 测试 Ajax http://blog.sina.com.cn/s/blog_654c6ec70100u456.html 使用Robot framework 测试web ...