2014-05-21 3 views
0

나머지 모든 API를 테스트해야하는 단위 테스트 스크립트가 있습니다. 동시에 메시지를 생성하는 xmpp 서버도 있습니다.파이썬의 백그라운드 스레드에서 블로킹 프로세스를 실행하는 방법

이러한 메시지를 수신하려면 내 단위 테스트 내에서 xmpp 인스턴스를 실행해야합니다. 그러나 문제는 xmpp가 차단 프로세스라는 것입니다.

---> self.process (블록 = TRUE)

이 단위 테스트 스톨 초래한다.

이 xmpp를 백그라운드 스레드에서 실행할 수 있고 msgs를 계속 수신하고 주 스레드에서 단위 테스트를 실행할 수 있습니까? 그렇다면 구현할 수있는 코드 스 니펫을 만들 수 있습니까?

미리 감사드립니다.

답변

1
  1. 하나의 솔루션이에서 백그라운드에서 서버를 시작 당신의 setUp() 루틴 - 테스트가 끝날 때 서버를 직접 제어하려는 경우 즉 os.system('myserver &'), 다음 tearDown()

  2. 에, 그것을 죽이고, 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 땡 땡 .test 서버, PID 없음

------------------------------------------------- --------------------- 란 1 개 2.003s

OK

+0

에서 테스트하지만 테스트 전에 실행되는 시작하면 경쟁 조건이있다 서버가 설정됩니다. – Conchylicultor

관련 문제