单元测试有点问题;在设置中我检查进程是否正在运行,如果没有,我使用Popen来运行它。
在teardown()
我致电myprocess.kill()
,所以每次测试都会得到一个干净的状态。
这只是第一次工作正常;因为当我在该过程中调用kill命令时;它最终处于僵尸状态(Z +);这意味着要摆脱它,我还需要杀死单元测试类,因为Popen起源于测试用例的设置阶段。
有办法解决这个问题吗?我使用pytest调用测试,将单元测试python脚本作为参数传递。
class Mytest(unittest.TestCase)
running_process = ""
def setUp(self):
command = "~/myprocess"
self.running_process = Popen(command, shell=True, stdout=PIPE, stderr=STDOUT)
def test_tryprocess(self):
#do something
def test_tryprocess_again(self):
# do something else
def tearDown(self):
self.running_process.kill()
答案 0 :(得分:2)
找到了罪魁祸首:当我打电话给Popen时我也叫shell = True。这将与进程建立联系,因此它将一直挂起,直到shell被杀死。
要解决此问题,请从通话中删除shell=True
,它可以正常工作。