django 在线程隔离中运行pytest测试用例

bvuwiixz  于 2023-11-20  发布在  Go
关注(0)|答案(1)|浏览(129)

我想测试一个使用thread_local变量的函数,即threading.local().setattr()threading.local().getattr()当我运行我的单个测试用例时,它通过了,因为它只是使用线程进行测试,但是当我在项目中运行pytest时,它运行项目中的所有测试,看起来其他测试用例正在重用同一个线程,我的thread_local变量被覆盖了。
有没有一种简单的方法可以让我的测试用例独立于其他测试,或者在一个单独的线程中运行,或者在这个测试运行的时候锁定线程(不太好的解决方案,在这种情况下,我宁愿删除这个测试用例)

polhcujo

polhcujo1#

最简单的方法可以是创建新的进程来测试线程(或其他)隔离的东西。
就像这样:

def test_something():
    from multiprocessing import Process
    
    def process_main():
        # ... test threading things here

    p = Process(target=process_main)
    p.start()
    p.join()
    assert p.exitcode == 0

字符串
不要将线程和创建进程混合在一起。当启动(分叉)一个新进程时,应该只有一个线程(主线程)。

相关问题