55

我们有一个分布式测试环境,robotremoteserver 启动了一堆其他应用程序,并将它们作为测试的一部分。我尝试运行的测试要求我在一个套件中运行超过一百万个测试用例。这里的问题是,当pybot 开始运行时,它会阻塞 8 GB 的 RAM 并导致性能下降。过一会就结冰了。

为了克服这个问题,我计划创建单独的套件,每个套件少于 100 个。但在这种情况下,我无法使用从其他套件启动的其他远程服务器的关键字。我可以使用它的唯一方法是断开与远程服务器的连接并在每个套件中重新连接它 - 这会破坏测试的目的。

我不确定是否有人遇到过这种情况。如果有人能想到这个问题的解决方案,我将不胜感激。

附加信息

有助于解决此问题的另一件事:是否可以从另一个套件启动的库(带有状态)中调用关键字?

使用 RIDE 时可以使用获取库实例吗?我在一个套件中导入库,然后尝试在其他套件中获取库实例。这可能吗?

我不断收到以下错误:

AttributeError:远程实例没有属性“替换”

在 Suite 1 中,这就是我正在做的事情:

Import Library    Remote    ${verifix_xmlrpc_url}    WITH NAME    Verifix
${lib}=    BuiltIn.Get Library Instance    Verifix
Set Global Variable    ${lib}

在套件 2 中:

${lib}.remove messages    ${VenueNSDQ}
4

2 回答 2

3

我不知道有关 Python 的任何细节,但您可能想尝试将每个测试用例作为一个单独的过程进行旋转。这将允许您在每个进程完成时从每个进程中恢复内存,并可能允许您在一台机器上安全地运行数百万个测试用例。

通常,当程序需要操作系统提供更多内存时,它会占用它,但在退出之前无法将其归还。这可能是您的流程失败的原因。

您可以启动然后终止的快速进程将缓解此内存问题......然后从那里通过 rsh 在另一台机器上完全运行这些测试用例中的每一个是一个相当短的步骤。

我希望这会有所帮助。

于 2015-10-16T18:57:17.840 回答
0

好的。首先,我不使用 Python 编程,而且我也不知道您使用的是哪种计算机,或者计算机有多少内存,也不知道您使用计算机的情况。所以这只是从编写系统程序和跨多台计算机工作收集的一般信息。

话虽如此:如果您要运行庞大的数据集或大量程序,则必须对要执行的操作进行分区,以便它适合您正在使用的系统。这是第一部分。

第二部分是,如果您想跨程序与其他程序或系统对话,那么您需要设置某种类型的公共内存使用。我知道 PHP 内置了这样的东西,所以我不得不假设 Python 也有这样的东西。您设置公共内存区域,然后在各个程序之间来回发送信息。通常使用某种形式的令牌来识别每个程序和/或系统。通过这种方式,您可以进行设置,以便在一组测试完成后,它可以通知下一组测试开始,从而不会接管或阻塞您的系统。

如果你真的很好 - 你也可以创建某种控制器程序来启动测试,观察它直到测试结束/退出,然后开始下一个测试。(因此,您可以使用主/从方式来执行此操作,而不是菊花链方式,就像客户端/服务器关系一样。)

如果您使用的是 Windows 机器/操作系统,我建议您查看 AutoIt。AutoIt 可以轻松处理观看程序运行并在旧任务完成后启动新任务。它还允许您完全控制您的系统以及远程系统,并且旨在帮助自动化任务,例如您正在尝试执行的任务。我发现(通过实验)AutoIt 也可以用于 Unix/Linux 机器,例如 Mac 和其他机器。尽管您只有这样才能获得发送的命令,而不是访问 Windows 功能。

如果您更精通 Python,您可以使用它完成上述操作 - 那么您将获得更多的权力。即使您问这个问题已经两年了 - 我希望这对您的努力有所帮助。:-)

于 2015-10-13T21:28:18.627 回答