![使用 HTTP 連線對 DNS 進行單元測試程式碼是否可行或明智?](https://rvso.com/image/1692554/%E4%BD%BF%E7%94%A8%20HTTP%20%E9%80%A3%E7%B7%9A%E5%B0%8D%20DNS%20%E9%80%B2%E8%A1%8C%E5%96%AE%E5%85%83%E6%B8%AC%E8%A9%A6%E7%A8%8B%E5%BC%8F%E7%A2%BC%E6%98%AF%E5%90%A6%E5%8F%AF%E8%A1%8C%E6%88%96%E6%98%8E%E6%99%BA%EF%BC%9F.png)
是否有一種明智的方法可以透過本地測試伺服器以有限的方式劫持 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 位址進行編碼。 (也許將測試網絡與互聯網/生產網絡斷開?)