`

Robot Framework 中的“坑” - Start Process

阅读更多

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 的脚本有所不妥,导致被测系统被影响。

(毕竟手动执行没问题)

于是:

  1. 研究了被测系统卡死时 Robot Framework 正在执行的那个 keyword。无果。该 keyword(我自己实现的):在固定时间内不断检测被测系统是否有弹出消息框,直到消息框弹出或超时。我也考虑过是不是 UIAutomation 底层实现导致:Robot Framework 不断检测 SUT 的 UI;SUT 又要不断更新 UI(刷新各种界面特效)。想了想感觉可能性不大,接着考虑其它原因。
  2. Review 整条 Case 执行线。无果。
  3. 然后用排除法(半自动化):手动启动 SUT自动执行后续步骤。SUT 顺利执行完毕。

于是猜测是脚本中,启动 SUT 的方式导致的。

把启动方式从
Process.Start Process    ${SUT.exe}

Start Process    ${SUT.exe}
改为

Evaluate    subprocess.Popen(['${SUT.exe}'])    subprocess

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 的参数有所不同。

 

  1. Start Process 在内部会对参数赋予一些特定的默认值;
  2. 其中,子进程的输出被重定向为 subprocess.PIPE;
  3. 输出被重定向到一个流,而且这个没有任何读者(除非用户主动发起相关操作);
  4. 如果子进程不断往这个输出流写数据,会导致流中数据越来越多(没有被读出去),并达到限制的最大值;
  5. 然后子进程就被卡死在下一次写操作上 (流已满,无法写入)。

MSDN 上的一些示例也有对这类死锁的一些说明:Process.StandardOutput Property

  • 大小: 3.9 KB
  • 大小: 5.5 KB
0
1
分享到:
评论

相关推荐

    robotframework-ride-1.5a1.win-amd64

    robotframework-ride-1.5a1.win-amd64 exe

    robotframework-excellibrary-0.0.2.zip

    标题 "robotframework-excellibrary-0.0.2.zip" 提供的是一个名为 ExcelLibrary 的 Robot Framework 模块的特定版本(0.0.2)。Robot Framework 是一个通用的自动化测试框架,它允许用户使用关键词驱动的方法进行...

    robotframework-ride-1.5.win-amd64.exe

    robort framework RIDE win64,用于64位机。安装64bit的robot framework 需要wxPython2.8的,不然打不开RIDE的快捷方式

    robotframework-ride-1.5.2.1

    **Robot Framework RIDE 1.5.2.1 深度解析** Robot Framework RIDE (Robot Framework Integrated Development Environment) 是一个基于 Python 的开源测试自动化框架的图形化用户界面工具。RIDE 支持 Robot ...

    robotframework-excellibrary-0.0.2-python3.x.zip

    robotframework-excellibrary适配python 3版本,在python3.7.9上安装正常。 下载好压缩包 ->解压 -> 在解压目录的当前文件夹下,打开终端,输入 : python setup.py install 即可,安装成功后,pip list查看

    robotframework-seleniumlibrary-2.9

    要让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

    标题中的"franz-see-Robotframework-Database-Library-0.7-3-gc2d7412.tar"表明这是一个与Robot Framework相关的数据库库的压缩包,具体版本为0.7-3,其中的"gc2d7412"可能是Git提交的哈希值,通常用于追踪代码仓库...

    robotframework-appiumlibrary-1.4.2.tar.gz

    在"robotframework-appiumlibrary-1.4.2.tar.gz"这个压缩包中,我们找到了版本号为1.4.2的Robotframework-AppiumLibrary源代码或安装包。这个版本可能包含了修复的错误、新功能的添加以及性能的优化。通常,.tar.gz...

    robotframework-ride-1.4.win-amd64.exe

    robotframework-ride-1.4.win-amd64.exe

    robotframework-Datebase-library-0.7

    Robotframework-Database-Library 是一个基于 Robot Framework 的扩展库,专为自动化测试设计,用于与各种数据库进行交互。这个库提供了丰富的关键字,使得测试人员能够方便地执行查询、插入、更新和删除等数据库...

    robotframework-ride-1.3.win-amd64.exe

    robotframework-ride-1.3.win-amd64.exe

    robotframework-ride-1.4.1.win-amd64.exe

    robotframework-ride-1.4.1.win-amd64.exe,可视化的自动化开发工具。

    Python库 | robotframework-sshlibrary-3.5.0rc1.tar.gz

    在集成测试中,SSHLibrary与其他Robot Framework库如`robotframework-seleniumlibrary`(用于Web自动化)和`robotframework-dblibrary`(用于数据库操作)一起,构建出强大的自动化测试流程。通过编写清晰易读的测试...

    robotframework-3.1.1-py2.py3-none-any.whl

    robotframework-3.1.1-py2.py3-none-any.whl 支持python3

    已经修复安装报错:robotframework-excellibrary-0.0.2.zip

    标题中的“已经修复安装报错:robotframework-excellibrary-0.0.2.zip”表明这是一个关于Robot Framework的扩展库——ExcelLibrary的修复版本,版本号为0.0.2,且该库在之前的安装过程中遇到了错误,但现在已经被...

    robotframework-archetype-quickstart-1.0.1.zip

    在本文中,我们将探讨“robotframework-archetype-quickstart-1.0.1.zip”这个压缩包,这是一个专门为创建基于Robot Framework的测试套件而设计的快速启动原型。 首先,我们要了解什么是“archetype”。在Maven或者...

    robotframework-ride-0.46.win32.exe

    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"表明这是一个名为"robotframework-excellibrary"的库的特定版本,版本号为0.0.2,且以RAR压缩格式提供。Robot Framework是一个通用的自动化测试框架,而Excellibrary是...

    robotframework-seleniumlibrary-demo-20100428.zip

    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 ...

Global site tag (gtag.js) - Google Analytics