2009-07-23 9 views
2

私は、Pythonで書かれたネットワーク化されたソフトウェアスイートの単体テストを書くことが任されています。メッセージビルダーやその他の静的メソッドのためのユニットの作成は非常に簡単ですが、私はネットワークループスレッドのテストを書くことになると壁を打ちました。ネットワークスレッド上でpyunitを使用する

例:実際に多数のサーバーを稼動させることなく、多数のポートに接続する機能をテストすることができます。これにアプローチする良い方法は何ですか?おそらく、サーバーの構築と破壊をテストの一部にしていますか?何かが、私を回避するより単純な答えが必要であると私に言います。

私は、ネットワークに接続されたスレッドを単体テストする方法があるとは思いますが、見つからないようです。

答えて

1

について非常に興味深いチュートリアルのhereを参照してください。次に、モック・ファクトリーのテスト・パスで、サーバーに接続した模擬ソケットを作成します(エラー・ケースはテストしません)。そして、メッセージ・トラフィックをログに記録しますあなたのコードが適切な種類のサーバーに接続するのに適切なポートを使用していることを確認します。

テストを簡単にするために、まだスレッドを使用しないようにしてください。

0

これは、ネットワークソフトウェアの階層化方法とテストの細かさによって異なりますが、サーバーのセットアップとテストの中止を行うシナリオでは確かに実現可能です。たとえば、Pythonロギングパッケージ(Pythonの一部になる前)で作業していたとき、私はテストをしました(pyunit/unittest - それはちょっとしたスクリプトでした) TCP、UDP、HTTP、およびHTTP/SOAPポートで待機する4台のサーバーをテストし、それらにネットワークトラフィックを送信しました。あなたが興味があれば、配布はhereであり、見るべきアーカイブ内の関連テストスクリプトはlog_test.pyです。 Pythonロギングパッケージは当時から何らかの形で登場してきましたが、古いパッケージはまだPython < 2.3および> = 1.5.2のバージョンで使用されています。

0

setUpでサーバーを実行し、tearDownでサーバーを実行するテストケースがいくつかあります。私はそれが非常にエレガントな方法であるかどうかわからないが、それは私のために働く。

私はそれを持ってうれしく、それは私を多く助けます。

サーバのinitが非常に長い場合は、antで自動化する方法もあります。 antはテストを実行する前後にサーバーを実行/停止します。

は、私はソケットオブジェクトを作成することを目的としている既存のコードに工場を導入しようとアリとのpython

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() 
関連する問題