多线程中的Python单元测试

多线程中的Python单元测试,python,multithreading,unit-testing,Python,Multithreading,Unit Testing,我想对几个主要进行文件输入和输出的类的功能进行单元测试。此外,我希望在多个内核上执行此操作(--jobs=4) 问题是,由类创建的文件通常具有相同的名称,并且它们在多个线程中混淆。我目前所做的是,我在一个单独的目录中运行每个单元测试,如: def test(self): if os.path.exists("UniqueDir"): os.system("rm -rf UniqueDir") os.mkdir("UniqueDir") os.chdir("UniqueDir"

我想对几个主要进行文件输入和输出的类的功能进行单元测试。此外,我希望在多个内核上执行此操作(--jobs=4)

问题是,由类创建的文件通常具有相同的名称,并且它们在多个线程中混淆。我目前所做的是,我在一个单独的目录中运行每个单元测试,如:

def test(self):
  if os.path.exists("UniqueDir"):
    os.system("rm -rf UniqueDir")
  os.mkdir("UniqueDir")
  os.chdir("UniqueDir")
  #Do the actual testing
  os.chdir("..")
  os.rmdir("UniqueDir")
不利因素非常明显:

  • 每个测试必须接收唯一的目录名
  • 每个测试都有这样的源代码开销,这真的一点都不令人愉快
  • 我可以用什么方法来解决1。将我的测试与其他测试分开,但不包括2个。用更优雅的方式做

    感谢您的帮助、建议等


    Cherio Woltan

    我建议使用unittest模块并构建如下类:

    import unittest
    from tempfile import mkdtemp
    
    class Test(unittest.TestCase):
    
        def setUp(self):
            self.tempdir = mkdtemp()
            os.chdir(self.tempdir)
    
        def tearDown(self):
            os.rmdir(self.tempdir)
    
        def testName(self):
            #Do the actual testing
            pass
    
    if __name__ == "__main__":
        unittest.main()
    
    此外,还可以添加多处理以创建4个线程


    编辑:删除了os.mkdir,因为mkdtemp创建了一个临时目录,所以它是假的。Thx Sebastian。

    我建议使用unittest模块并构建如下类:

    import unittest
    from tempfile import mkdtemp
    
    class Test(unittest.TestCase):
    
        def setUp(self):
            self.tempdir = mkdtemp()
            os.chdir(self.tempdir)
    
        def tearDown(self):
            os.rmdir(self.tempdir)
    
        def testName(self):
            #Do the actual testing
            pass
    
    if __name__ == "__main__":
        unittest.main()
    
    此外,还可以添加多处理以创建4个线程


    编辑:删除了os.mkdir,因为mkdtemp创建了一个临时目录,所以它是假的。Thx Sebastian。

    您知道Python中的线程不会利用多核处理器,对吗?为此,您需要多处理(接口方便地类似于线程),我不知道当我设置“-jobs=4”时单元测试框架会做什么。但它类似于多线程。至少每个测试都在不同的内核上运行,这可能被称为多核处理。。。?无论如何,这不是问题所在;)您可以使用诸如
    nose
    py.test
    之类的测试运行程序来并行运行测试,而无需修改它们。您知道Python中的线程不会利用多核处理器,对吗?为此,您需要多处理(接口方便地类似于线程),我不知道当我设置“-jobs=4”时单元测试框架会做什么。但它类似于多线程。至少每个测试都在不同的内核上运行,这可能被称为多核处理。。。?无论如何,这不是问题所在;)您可以使用测试运行程序,例如
    nose
    py.test
    来并行运行测试,而无需修改它们。
    tempfile.mkdtemp()
    创建了一个目录,因此您不应该对其结果调用
    os.mkdir()
    。+1好主意,我将在周一早上首先尝试一下。
    tempfile.mkdtemp()
    创建了一个目录,因此您不应该在其结果上调用
    os.mkdir()
    。+1好主意,我将在周一早上首先尝试一下。