【问题标题】:Running a test suite with over a million test cases运行包含超过一百万个测试用例的测试套件
【发布时间】:2013-05-11 19:31:07
【问题描述】:

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

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

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

附加信息

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

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

我不断收到以下错误:

AttributeError: 远程实例没有属性'replace'

在套件 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}

【问题讨论】:

  • 嗨,Amol,到目前为止,您有什么成功吗?老实说,在一个测试套件下链接这么多测试用例听起来很愚蠢,我无法想象将套件作为一个单元来理解是可能的。我想我会建议像您在逻辑单元中所做的那样拆分测试套件,以避免出现问题。您是否尝试过对标签做同样的事情?一个额外的建议是在你拆分出一些测试套件后使用 pabot。如果您需要一些共享资源来进行任何测试运行,请小心
  • @shicky 没有理由称任何人愚蠢......
  • @Monkey 我并没有说他愚蠢,事实上我竭尽全力帮助 Amol。我说在一个测试套件下拥有一百万个测试用例是愚蠢的,它完全无法管理并且自找麻烦,因此 Amol 发现自己处于有问题的情况。我怀疑 Amol 完全负责将一百万个测试用例放在一个套件中,因为这是 Amol 试图解决的问题,很可能是他继承的。你为什么不尝试和帮助,而不是试图在不存在的地方制造冲突?鉴于我的评论获得了赞成票,显然其他人也同意这种观点。
  • @shicky:拥有一百万个测试用例可能不会那么愚蠢,如果它们是自动生成的。也许他们有一个大的产品矩阵,需要针对一个大的输入和预期输出矩阵进行测试,他们会自动生成测试用例。排列很容易达到数百万。在不知道这些测试用例是如何创建和管理的情况下,称其为“愚蠢”有点不敏感。
  • 很公平@BryanOakley,我向你的高超知识低头,并向 Amol 和其他任何被我的话冒犯的人道歉。如前所述,我无意冒犯,因为我指的是测试用例情况,绝不是针对 Amol。我仍然认为在一个套件中拥有接近一百万个测试用例是一个非常非常糟糕的主意,正如 Amol 在他的问题中强调的那样。我悬赏了这个问题,进行了自己的研究,并提出了我会采取的一些步骤,但我能做的不多。

标签: python automated-tests robotframework


【解决方案1】:

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

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

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

希望对你有所帮助。

【讨论】:

    【解决方案2】:

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2018-08-01
      • 2020-09-05
      • 2011-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-24
      • 2019-10-09
      • 2018-11-23
      相关资源
      最近更新 更多