我有一个单元测试脚本,需要测试所有其余的api。与此同时,我还有一个生成消息的xmpp服务器。
我需要在单元测试中运行xmpp的一个实例来接收这些消息。但问题是xmpp是一个阻塞过程。
---> self.process(块= TRUE)
这导致单元测试失速。
有什么办法可以在后台线程上运行这个xmpp并继续接收msgs并在主线程上运行单元测试。如果是,我可以拥有一个我可以实现的代码片段。
提前致谢。
答案 0 :(得分:1)
一种解决方案是在setUp()
例程的后台启动服务器 - 即os.system('myserver &')
,然后在测试结束时将其杀死,在tearDown()
如果您想直接控制服务器,请使用fork()
并按照与#1大致相同的模式。
示例:
import os, sys, subprocess, time, unittest
def server():
try:
for _ in xrange(5, 0, -1):
print 'ding'
time.sleep(1)
except KeyboardInterrupt:
pass
class TestClient(unittest.TestCase):
def setUp(self):
self.server_pid = None
pid = os.fork()
if not pid: # child
return server()
# parent
self.server_pid = pid
def test1(self):
print 'test server, PID',self.server_pid
time.sleep(2)
def tearDown(self):
if not self.server_pid:
return
import signal
os.kill(self.server_pid, signal.SIGINT)
使用以下命令运行:
python -m unittest ptest
输出:
测试服务器,PID 16490 ding ding .test服务器,PID无
----------------------------------------------- -----------------------在2.003s中进行1次测试
行