2009-07-23 4 views
2

파이썬으로 작성된 네트워크 소프트웨어 세트에 대한 단위 테스트를 작성해야합니다. 메시지 빌더 및 기타 정적 메서드 작성 도구는 매우 간단하지만 네트워크 루프 스레드에 대한 테스트를 작성하는 측면에서 난감한 점이 있습니다.네트워크 스레드에서 pyunit 사용

예를 들면 : 연결하는 서버는 모든 포트에있을 수 있으며 실제로 수많은 서버를 실행하지 않고도 여러 포트 (병렬이 아니라 순차적으로)에 연결하는 기능을 테스트 할 수 있기를 원합니다. 이것에 접근하는 좋은 방법은 무엇입니까? 아마도 서버 구성 및 파괴가 테스트의 일부가 될 수 있습니까? 뭔가 저를 회피하는 간단한 대답이 있어야한다는 것을 알려줍니다.

네트워크 스레드를 단위 테스트하는 방법이 있다고 상상해보십시오. 그러나 찾을 수없는 것 같습니다.

답변

1

내가 소켓 객체를 생성하는 취지 기존 코드에 공장을 소개하려고합니다. 그런 다음 모의 소켓에서 모의 ​​소켓을 생성하여 서버에 연결 한 것처럼 보이는 모의 소켓을 만듭니다 (또는 테스트하려는 오류 케이스가 아닌 경우)? 그리고 메시지 트래픽을 기록하여 로그에 남깁니다. 귀하의 코드가 적합한 포트를 사용하여 올바른 유형의 서버에 연결했는지 확인하십시오.

테스트를 단순화하기 위해 스레드를 아직 사용하지 마십시오.

0

네트워크 소프트웨어가 계층화되어 있고 테스트가 얼마나 자세하게되어 있는지에 따라 다르지만 일부 시나리오에서는 서버 설정 및 테스트의 일부분을 확실히 테스트 할 수 있습니다. 예를 들어, Python 로깅 패키지를 작업 할 때 (파이썬의 일부가되기 전에) 나는 테스트를했다. (나는 pyunit/unittest을 사용하지 않았다. 이것은 특별한 스크립트 일 뿐이었다. 테스트) 네 개의 서버가 TCP, UDP, HTTP 및 HTTP/SOAP 포트에서 수신 대기 한 다음 네트워크 트래픽을 보낸다. 관심이 있다면 배포본은 here이고 볼 아카이브의 관련 테스트 스크립트는 log_test.py입니다. 파이썬 로깅 패키지는 당연히 그 이후로 나왔지만, 구 패키지는 여전히 Python < 2.3 및> = 1.5.2 버전과 함께 사용됩니다.

0

setUp에서 서버를 실행하고 tearDown에서 닫는 몇 가지 테스트 사례가 있습니다. 그것이 그것을하는 매우 우아한 방법인지 나는 모른다. 그러나 그것은 나를 위해 작용한다.

나는 그것을 가지고있어서 기쁘게 생각하고 나를 많이 돕는다.

서버 초기화가 매우 길면 ant를 사용하여 자동화 할 수 있습니다. ant는 테스트를 실행하기 전후에 서버를 실행/중지합니다.

매우 흥미 개미에 대한 튜토리얼과 파이썬에 대한 here를 참조

0

모의 소켓을 만들어야합니다. 정확한 방법은 소켓을 생성하고 소켓 생성기를 만드는 방법에 달려있다. pymox과 같은 조롱 라이브러리를 사용하여 더 쉽게 사용할 수도 있습니다. 또한 테스트 목적으로 소켓 생성기를 만들지 않아도됩니다.

pymox를 사용하여, 당신은 같은 것을 할 것입니다 :

def test_connect(self): 
    m = mox.Mox() 
    m.StubOutWithMock(socket, 'socket') 
    socket_mock = m.MockAnything() 
    m.socket.socket(socket.AF_INET, socket.SOCK_STREAM).AndReturn(socket_mock) 
    socket_mock.connect(('test_server1', 80)) 
    socket_mock.connect(('test_server2', 81)) 
    socket_mock.connect(('test_server3', 82)) 

    m.ReplayAll() 
    code_to_be_tested() 
    m.VerifyAll() 
    m.UnsetStubs()