gpt4 book ai didi

Python:如何测试使用 fork 的程序?

转载 作者:行者123 更新时间:2023-11-28 20:51:31 24 4
gpt4 key购买 nike

我正在编写一个程序,在生产环境中使用相同代码的多个实例。然后实例通过网络进行通信,但这与此处无关。

在开发过程中,我多次fork初始流程以获得完整的实例设置,这非常方便。

但是,尝试对此编写集成测试给我带来了问题:测试框架 (unittest/nosetests/py.test) 当然也是 fork 的,所以我最终得到了多个副本测试框架,输出结果是乱码每个 child 的单元测试重叠。

一个简化的例子:

  • 程序是聊天客户端,通过某种网络连接(例如,redis pubsub)连接到另一个客户端
  • 程序公开一个 API 来发布和阅读消息
  • 我想 fork 出两个相互连接的程序实例
  • 测试应该使用 API 来确保客户端通过相互发送/接收消息来工作
  • 主进程监督子进程的错误并运行测试套件

为此,我需要从子进程中“卸载”或停止测试框架。我该怎么做?

我可以通过仅在 fork 子项后调用测试套件来解决此问题,但我需要为每个测试重新启动所有子项。

最佳答案

在这种情况下 fork 进程很麻烦,因为子进程会继承父进程的完整堆栈,包括测试框架的运行实例。

基本上有两种选择可以解决这个问题:

第一是在初始化测试框架之前进行 fork ,然后从测试中访问子进程。如果子进程长期存在,这很有效,但如果每次测试都启动子进程,甚至可能使用不同的测试装置/场景,这被证明是一件麻烦事。

第二个是通过简单地使用 subprocess/Popen 启动进程来放弃所有分支。我找到了一个名为 xprocess 的 pytest 插件这可以帮助您完成此任务。它没有提供我所需要的,但它为我指明了正确的方向。

关于Python:如何测试使用 fork 的程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44974461/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com