Perl测试脚本可以检测它是否从并行线束运行?

Lum*_*umi 5 testing parallel-processing perl

问题是:

在测试文件中操作外部状态可以降低测试套件的可能并行性.

我正在测试的是精确操纵外部状态(然后重置它).

我仍然希望大部分时间并行运行.然后,我想跳过操纵外部状态的测试,这可能会使其他人失败.

因此,我将通过检测并行性条件来解决此问题,然后跳过将操纵外部状态的测试,从而导致其他人失败.那可行吗?怎么样?

请注意,仅从HARNESS_OPTIONS脚本解析环境变量不足以检测条件:prove -j3例如,不会设置它.

更新

虽然有很多方法可以让你的测试脚本知道它是在并行线束中运行的(参见下面的Brian的答案),但是没有一种标准方法可以做到这一点,我认为可能存在这种方式(但没有说明这一点)正确地进入我的问题).

我想的是,嗯,好吧,我在你的(伟大的!)有效的Perl编程书中看到它,brian,类似于维护者测试,现在不确定这个术语,你通常只有在你运行时才能运行模块的维护者,而不是在用户计算机上安装时.似乎记得有一个使用一些environement变量的惯例.

bri*_*foy 4

prove命令本身创建测试工具对象,因此它将参数直接传递给测试工具类的构造函数(通常是TAP::Harness)。你不会看到这些争论。

您可以通过多种方式前往此处:

  • 如果您使用 ,请编写一个包装器来prove设置环境变量-j3
  • Test::Harness如果它获取jobs参数并在 的配置中指定子类,则使您自己的 子类执行相同的操作prove
  • 不要使用prove(我最喜欢的)。
  • 使用测试程序中的信号量来注意到另一个测试程序具有控制权
  • 将外部交互部分移至公共库,该库可以告诉调用者是否有人已经拥有控制权
  • 许多其他的事情