Python3.6和单例 - 用例和并行执行

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python3.6和单例 - 用例和并行执行相关的知识,希望对你有一定的参考价值。

我有几个单元测试(只有python3.6和更高版本),它们在开始测试之前导入一个辅助类来设置系统上的一些东西(例如,拉动一些Docker镜像)。

该类在实例化时正在做所有事情。它需要保持活着,因为它包含一些在运行时评估并且需要进行不同测试的信息。

辅助类的调用是非常昂贵的,我想加速我的测试助手类只有一次。我在这里的方法是使用单身人士,但我被告知在大多数情况下不需要单身人士。对我来说还有其他选择,或者这里的单身实际上是一个很好的解决方案吗?该选项应允许自己执行所有测试和每个测试。

我也会有一些理论问题。如果我在这里使用单例,python如何并行执行? python是等待第一个实例完成还是有竞争条件?如果是,我该如何避免它们?

答案

我只能回答“我还有其他选择”这个问题的一部分......

使用这种复杂的设置进行单元测试(拉动码头图像等)让我怀疑:

这可能意味着您的测试实际上是集成测试而不是单元测试。如果您的目标是找到所涉及组件之间的交互中的错误或代码与其系统环境之间的交互,那么这可能是完全正常的。 (您的设置涉及Docker图像的事实给人的印象是您打算测试您的系统测试系统环境。)如果是这种情况,我希望您好运,让您的问题的其他方面得到解答(并行化测试,单身人士和线程安全)。也许为了吸引合适的专家来标记你的问题“集成测试”而不是“单元测试”是有道理的。

另一方面,您的复杂设置可能表明您的单元测试设计不正确和/或被测系统尚未设计为可通过单元测试轻松测试:单元测试侧重于系统测试 - 隔离测试 - 与依赖组件隔离,但也与系统环境的细节隔离。对于正确隔离的系统的测试,不需要使用Docker的复杂设置。

如果后者是真的,你可以通过熟悉“模拟”,“依赖注入”或“控制反转”等主题来获益,这将有助于您设计被测系统和单元测试用例,使它们成为可能。独立于系统环境。然后,您的复杂设置将不再是必要的,您的问题的其他方面(单例,并行化等)可能不再相关。

以上是关于Python3.6和单例 - 用例和并行执行的主要内容,如果未能解决你的问题,请参考以下文章

简单多线程和单例学习例一

iOS 委托和单例模式

利用 TestNG 并行执行用例

Python线程库:代码线性执行而不是并行执行

多线程并行与分布式执行

Process Pool实现Python的并行执行