多线程中的Python单元测试
我想对几个主要进行文件输入和输出的类的功能进行单元测试。此外,我希望在多个内核上执行此操作(--jobs=4) 问题是,由类创建的文件通常具有相同的名称,并且它们在多个线程中混淆。我目前所做的是,我在一个单独的目录中运行每个单元测试,如:多线程中的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"
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")
不利因素非常明显:
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好主意,我将在周一早上首先尝试一下。