簡體   English   中英

如何使用自定義協議測試驅動網絡應用程序?

[英]How to test drive a networking application with custom protocol?

我目前正在為學校項目開發兩個Java網絡應用程序。 一個通過TCP,另一個通過UDP。 在這兩種方法中,我都必須實現簡單的自定義協議。

即使我在努力工作, 也無法找到一種方法來正確測試此類應用程序,或者無法通過測試優先開發更好地進行開發

如果我有一個客戶並且想要進行真正的測試而又不花錢,那么我必須以模擬的行為來實現服務器,在像這樣的簡單應用程序的情況下,這幾乎就是整個項目 我了解,當事情很大時,比編寫幾行Perl腳本進行測試可能確實有幫助。

現在,我正在同時開發服務器和客戶端,以便至少可以手動進行測試,但這似乎並不是一種干凈的開發方式。 唯一有幫助的是通過記錄器建立連接隧道,以便我可以查看通過的所有數據(使用IDEA的TunneliJ插件 )。

用自定義協議TDD網絡應用程序的最佳方法是什么? 我是否應該對所有內容都進行存根處理並妥善處理?

將協議與網絡層分開。 一旦您可以自己輸入數據,而無需通過網絡堆棧,測試協議的邏輯將變得更加容易。 即使您沒有使用Python,我還是建議您看一下Twisted框架的結構。 這是如何對網絡應用程序進行單元測試的一個很好的示例。

我們不久前遇到了同樣的問題。 我們認為,讓兩名開發人員來完成任務更簡單:一個負責編寫服務器,另一個負責編寫客戶端。 我們開始在同一辦公室工作,以便我們可以更輕松地進行編碼,測試,修改和重復。

總而言之,我認為這是對我們最好的解決方案。 它使我們能夠在不理想的條件下實際測試程序。 例如,我們的互聯網出現了幾次故障,程序崩潰了,因此我們進行了修復。 它對我們來說效果很好,但是如果您是唯一的開發人員,那么它可能不是您的解決方案。

無論您做什么,在編寫自定義協議時,我都會簽出Wireshark來監視您的網絡流量,以確保所有數據包都是正確的。

在我的應用中,我有這樣的代碼

    m_socket.receive(packet);

    doSomething(packet);

我模擬了接收操作,因此可以執行doSomething()需要做的所有事情。

這在哪里分解為您? 在這里,您可以進行真正的單元測試,以確保代碼行為正確,還可以模擬套接字發送,並根據協議期望發送期望的內容。

當然,我們實際上並沒有測試協議另一端是否滿意。 那就是集成測試。 我總是渴望盡快接觸IT。 當您與“另一端”互動時,您會發現有趣的東西。

您處於控制兩端的好運位置,在那個位置,我可能會花一些時間來創建合適的,可控制的測試工具。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM