在一些复杂的测试中,需要将测试执行推迟一段时间。可能我们需要等待几小时或几天。不阻塞 Actor 的资源将有机会在服务器级别暂停执行。这是计划好的还是已经可以以某种方式实现?
1 回答
一旦测试会话开始,获取(保留)执行会话中所有测试所需的所有测试参与者。只有在会话完成(成功与否)时才会释放参与者,因此它们可以被其他测试会话重用。一个特定的测试参与者可以被“延迟”一段时间,调用$sleep测试中的 JavaScript API,你可能已经知道了。但是,我无法就暂停 OpenTest 服务器的工作方式提出合理的逻辑。我知道您希望能够重用那些被阻止的测试参与者,但我认为这不是一个好主意,因为他们可能(并且很可能)为暂停时正在运行的测试存储一些状态. 更好的方法是在您的 CI 服务器(或启动测试会话的任何进程)中添加一些逻辑,并在开始会话之前执行任何验证以查看您是否拥有所需的资源(如果可能)。如果您描述了一个特定的用例,我可以尝试提供更多帮助。
编辑:解决您描述的用例的正确方法是找到一种方法来确定正在执行订单处理以触发按需执行的上游系统,而不必等待一天执行测试(也许问开发人员来实现一个您可以调用的简单 API)。如果这不是一个选项,并且您绝对必须等待,那么解决此问题的正确方法是拥有足够的测试参与者来处理您想要并行执行的测试数量。测试 actor 消耗大约 150 到 200MB 的内存,所以这将是限制您可以在单台机器上同时运行的 actor 数量的唯一因素。未来,OpenTest 将有能力在同一进程中分拆多个参与者,因此这将成为非问题。
一旦测试参与者开始执行测试的工作,让它做任何其他工作是不安全的,因为测试通常必须存储一些状态(例如,您创建一个变量来存储您刚刚下的订单的订单号) . 如果同一个参与者同时执行两个测试,测试可能会覆盖彼此的状态,并且您会遇到很难解决的问题。