문제

Python으로 작성된 네트워크 소프트웨어 제품군에 대한 단위 테스트를 작성해야합니다. 메시지 빌더 및 기타 정적 방법을위한 단위를 쓰는 것은 매우 간단하지만 네트워크 루프 스레드에 대한 테스트를 작성할 때 벽에 부딪칩니다.

예를 들어 : 연결하는 서버는 모든 포트에있을 수 있으며 실제로 수많은 서버를 실행하지 않고도 수많은 포트 (병렬이 아닌 순서대로)에 연결하는 기능을 테스트 할 수 있기를 원합니다. 이것에 접근하는 좋은 방법은 무엇입니까? 아마도 서버 구성 및 파괴가 테스트의 일부로 만들까요? 무언가가 나를 피하는 더 간단한 대답이 있어야한다고 말해줍니다.

장치 테스트 네트워크 스레드를위한 방법이 있다고 상상해야하지만 아무 것도 찾을 수없는 것 같습니다.

도움이 되었습니까?

해결책

소켓 객체를 만들기 위해 기존 코드에 공장을 소개하려고합니다. 그런 다음 모의 공장의 테스트 패스에서 서버에 연결된 척하는 모의 소켓 (또는 테스트하고 싶은 오류 케이스가 아닌 경우, 그렇지 않습니까?)을 작성하여 메시지 트래픽을 기록하여 증명하는 모의 소켓을 만듭니다. 코드가 올바른 포트를 사용하여 올바른 유형의 서버에 연결했습니다.

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

다른 팁

네트워크 소프트웨어가 어떻게 계층화되는지와 테스트가 얼마나 상세한 지에 따라 다르지만, 일부 시나리오에서는 서버 설정 및 테스트의 일부를 분리 할 수있는 시나리오에서는 확실히 가능합니다. 예를 들어, 파이썬 로깅 패키지 (Python의 일부가되기 전에) 작업을 할 때 테스트를 받았습니다 (사용하지 않았습니다. pyunit/unittest -TCP, UDP, HTTP 및 HTTP/SOAP 포트에서 4 개의 서버를 실행 한 후 네트워크 트래픽을 보냈습니다. 관심이 있으시면 분포가 있습니다 여기 그리고 아카이브의 관련 테스트 스크립트는 log_test.py. 파이썬 로깅 패키지는 물론 그 이후로 어떤 방식으로도 제공되지만 이전 패키지는 여전히 Python <2.3 및> = 1.5.2 버전과 함께 사용됩니다.

설정에서 서버를 실행하고 분해에 닫는 테스트 케이스가 있습니다. 나는 그것이 매우 우아한 방법인지 모르겠지만 그것은 나를 위해 효과가 있습니다.

나는 그것을 갖게되어 기쁩니다. 그리고 그것은 많은 도움이됩니다.

서버 init가 매우 길다면 대안은 개미로 자동화하는 것입니다. ANT는 테스트를 실행하기 전/후 서버를 실행/중지합니다.

보다 여기 개미와 파이썬에 대한 매우 흥미로운 튜토리얼

모의 소켓을 만들어야합니다. 이를 수행하는 정확한 방법은 소켓을 만들고 소켓 생성기를 만드는 방법에 따라 다릅니다. 조롱 라이브러리와 같은 도서관을 사용할 수도 있습니다 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()
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top