https://github.com/apache/kafka/pull/17240
背景故事
今天我們來聊聊工程師最討厭的事情之一,測試。
Kafka
作為一個流行超過14年的分散式系統,測試扮演著功不可沒的角色,足夠的測試確保了Kafka
的穩定性,也確保大部分的使用者都可以安心無慮的服用Kafka
作為解決方案。不過大家知道Kafka
總共有哪些測試嘛?Kafka
的測試分成三個體系:
unit test
integration test
,整合測試在Kafka
的定義裡面是指有啟動完整的Kafka
服務的測試system test
,這類型的測試會透過Docker
or VM
來架設Kafka
叢集並且透過公開的函式庫來驗證行為Kafka
在開發流程中會透過 unit test
and integration test
來確保每個 PR 的品質,同時在每次版本發布的時候,會確保所有的系統測試都能順利通過。講到這裏,大家會不會好奇系統測試究竟是如何運行?這篇文章就帶大家走過一次流程:
確定你的環境有安裝Docker
,然後切到Kafka
原始碼的位置並輸入以下指令
/bin/bash tests/docker/run_tests.sh
然後大家就會看到螢幕開始噴出一大堆東西,別怕別慌,這個指令其實主要做了兩件事情,首先正如前面提到會用Docker
啟動好幾個容器來運行一個完整的Kafka
服務,因此該腳本會先建立容器映像檔。映像檔建立完成後,就會使用該映像檔預先啟動14個容器,該些容器內會預先安裝各個版本的Kafka
,以便後續系統測試使用。再來該腳本會編譯建制原始碼,產生系統測試時需要的各種jar
輸出,這些jar
檔也都已經透過指令綁定到容器內了,所以等同於現在容器內有著舊版以及基於原始碼建制的Kafka
最新運行版
當上述前置作業都完成後,該腳本接下來就會開始掃描Kafka
目錄下的tests
,裡面有許多使用python
撰寫的系統測試,有許多不同的種類,從基本的producer
到consumer
,也有connect
和streams
等測試。同時kafka
引以為傲的升級測試也都包含在系統測試的範圍,例如我們會測試從3.0
版本一路升級到3.9
然後看看讀寫是否有發生問題。
講到這裏,大家會不會好奇這跟標題的ducktape
有什麼關係?那就要說回系統測試的過程中,我們常常會需要跟系統互動,例如透過ssh
送一些命令並且收集回應,這些很"基礎設施"的功能就是由ducktape
來完成,ducktape
是由Confluent
所開發用來作為系統測試基礎設施的專案,提供了許多方便的指令來加速我們的開發。但只要是軟體自然都會有版本的問題,ducktape
也不例外,還記得我們前面提過系統測試不只可以用Docker
來開發,為了確保版本在不同測試環境上的一致,Kafka
也基於Python
的習慣添加了install_requires
來指定ducktype
的版本,不過這就形成一個問題,ducktype
的版本變成在兩個地方都需要指定,一個是dockerfile
一個是setup
裡面 ...
解決辦法
身為一個好習慣的工程師,如果無法用帥氣的手法讓兩邊自動保持同步,那我們自然只能自己手工手工讓他們一樣,故事就這樣,沒了,感謝收聽
廣告
歡迎訂閱全臺最鬆散的開源社群源來適你,上面不定期會有各種開源的廢文。也歡迎參加全臺最鬆散的開源討論頻道,上面有一群網友一起在刷開源技術