使用 Robot 框架实现 Selenium 网格

Posted

技术标签:

【中文标题】使用 Robot 框架实现 Selenium 网格【英文标题】:Selenium grid Implementation with Robot framework 【发布时间】:2016-08-30 07:45:48 【问题描述】:

我想用机器人框架实现硒网格。我已经配置了 selenium 网格集线器和两个节点,但是我不知道如何在此设置之后触发并行测试用例执行,在哪里使用 python 语言和 selenium 2 lib 关键字更新机器人框架中的线程数和并行测试执行设置?另外,在哪里分配集线器 url 以触发执行?请为此提出可能的出路。 注意:我们在脚本中使用 selenium 2 lib 关键字,而不是 webdriver 关键字,因此我无法使用“webdriver.remote”关键字来创建集线器实例。 谢谢!

我的框架有:目录-> 多个测试套件-> 每个测试套件中有多个测试用例。 机器人测试用例执行通过在 teamcity 上运行的 powershell 触发 通过使用命令 Python –m robot.run –i $tag 但是,它会触发测试用例的顺序执行,大约需要 10 小时才能完成执行。所以我正在寻找通过并行运行测试用例来减少总执行时间的解决方案。

【问题讨论】:

看看github.com/mkorpela/pabot。但不确定它是否是您所需要的。 【参考方案1】:

我不知道如何触发并行测试用例执行

Robot 没有任何内置支持并行运行测试,除了您可以同时运行机器人两次。如果您想针对两个不同的浏览器运行相同的测试,您必须运行机器人两次,每次测试运行时使用一组不同的参数(即:浏览器规范)。

您也许可以使用pabot,尽管它旨在将一个测试拆分为两个或多个部分,而不是将一个测试运行两次。您也许可以根据自己的需要对其进行调整。

还有许多其他解决方案。例如,如果您使用 CI 服务器,您可以设置两个作业来运行,并创建第三个作业,当这两个作业完成时触发,这会获取两个作业的输出并将它们组合成一个报告。

如果您使用的是带有 bash shell 的系统,另一种解决方案是编写您自己的测试启动器,如下所示(尽管这完全未经测试):

# run two robot jobs in the background
robot -A firefox.args /path/to/tests.robot &
robot -A chrome.args /path/to/tests.robot &

# wait for the jobs to finish, then generate a consolidated report
wait
rebot --output ./output.xml firefox/output.xml chrome/.output.xml

在上面的例子中,.args 文件是标准机器人框架argument files。在它们中,您可以指定命令行参数,例如 selenium 网格 URL、输出文件的唯一文件夹的路径等。

例如:

# firefox.args
--variable GRID_URL: http://127.0.0.1/wd/hub
--variable CAPABILITIES:browserName:ff,version:45,platform:WINDOWS
--outputdir firefox_results

另外,在哪里分配 hub url 来触发执行?

当您使用 Open Browser 关键字打开浏览器时,您会这样做。具体来说,使用remote_url 参数。例如,一个测试用例可能如下所示,其中 $GRID_URL$CAPABILITIES 在参数文件中定义:

*** Settings ***

| Library | Selenium2Library

*** Test cases ***
| Example of connecting to selenium grid
| | [Setup] | Open Browser
| | ... | http://example.com
| | ... | remote_url=$GRID_URL
| | ... | desired_capabilities=$CAPABILITIES

所以我正在寻找通过并行运行测试用例来减少总执行时间的解决方案。

你有两个选择:

    使用pabot 自动将一个大型套件拆分为多个并行测试运行 为测试套件的不同部分手动创建多个作业(例如:pybot tests/suite1;pybot tests/suite2;pybot tests/suite3 等)

【讨论】:

感谢您的快速回复.. !!我在我的问题中添加了更多细节。 建议我使用以下两种解决方案: 1.当我使用 Pabot 0.24 时,我收到以下错误消息:用于触发执行的命令:C:[path to test suite] > pabot test suite name (txt 文件)“”[错误] 意外错误:TypeError:“模块”类型的参数不可迭代回溯(最近一次调用最后一次):无没有要执行的测试经过时间:0 分钟 0.6 秒“” 我也尝试了以下命令,但遇到了类似的问题:- C:[path to test suite] > pabot test suite name (txt file) –parallel 2 --pabotlib --pabotlibhost -- pabotlibport 8270 - --C:[path to test suite] > pabot –command –m test suite name (txt file) ---command-end –parallel 2 –pabotlib –pabotlibhost –pabotlibport 8270 2.还尝试使用 selenium 网格在具有不同节点的同一台机器上同时运行多个测试用例。我使用 open browser 关键字来传递集线器 url 并设置所需的功能。目前,我可以使用 pybot 命令并行触发两个不同套件的执行。但是,我不知道如何同时触发所有测试用例的并行执行。 @ank15:错误“[ERROR] Unexpected error: TypeError: argument of type 'module' is not iterable”很可能与您的特定测试用例有关。请将问题发布到github.com/mkorpela/pabot/issues

以上是关于使用 Robot 框架实现 Selenium 网格的主要内容,如果未能解决你的问题,请参考以下文章

如何实现Robot框架在两台不同机器上并行测试执行?

与用于 Selenium 对象模式设计的 Robot 框架的关键字管理集成

Robot Framework实现多平台自动化测试

Robot Framework实现多平台自动化测试

robot framework可以返回变量吗

Robot Framework 第一个脚本