使用 HTTP 連線對 DNS 進行單元測試程式碼是否可行或明智?

使用 HTTP 連線對 DNS 進行單元測試程式碼是否可行或明智?

是否有一種明智的方法可以透過本地測試伺服器以有限的方式劫持 DNS 來模擬傳出 HTTP 連線?

這個想法是,程式碼將以與通常相同的方式執行,但請求將被重定向到某個返回模擬回應的本地測試伺服器。

我知道這可以透過一組測試配置來完成,以便請求的 URI 是 localhost,但我發現這會導致大量問題,最常見的是開發人員忘記取消註釋生產配置或對設定測試配置。

答案1

不接觸代碼來檢查是明智的。因此,您操縱環境以強制使用測試伺服器是正確的。

DNS 駭客攻擊會影響整個網絡,可能會激怒針對相同服務的其他測試。

為了最大限度地減少影響,將網路流量重新路由到測試伺服器的最簡單方法是設定hosts文件在客戶處要測試的軟體安裝在哪裡。

# Linux:
/etc/hosts

# Windows:
%SystemRoot%\System32\drivers\etc\hosts

只需將測試系統的 IP 對應到生產伺服器的 DNS 名稱:

# IP of the test server:
192.168.10.20   prod.server.com prod2.server.com
192.168.10.20   prod prod2      # if prod-servers are part of the local network.

為了解析伺服器名稱,系統將首先檢查該hosts檔案。然後,如果不成功就會跟隨DNS請求。

重新配置後清除 DNS 快取可能是個好主意:

# Linux:
resolvectl flush-caches

# Windows:
ipconfig /flushdns

對於此(或任何 DNS 解決方案),您必須確保軟體不會在任何地方對生產伺服器的 IP 位址進行編碼。 (也許將測試網絡與互聯網/生產網絡斷開?)

相關內容