寫在最前:
我是skytraveler,微博@skytraveler,是一名測試工程師。總在從事API相關的測試工作,也跟好多同行在做交流。API測試其實是非常重要的一項測試活動,但是,我發現很多公司竟然是非常忽略它的,而且,這么多年,竟然沒有一些系列的文章好好的說道一下它。因此我想在這里寫一些關于API測試的文字,希望能夠和同行們一起討論提高。也希望沒有重視起API測試的團隊重視起它來,因為這真的很重要。
為什么API很重要?
API是構筑現在軟件系統的基石,我們使用到的各種類庫、各種本地、遠程調用都是以API的形式暴露給我們。隨著整個信息產業的發展,API越來越復雜,被調用的頻率也一直在爆發性增長。并且隨著internet的不斷深化發展,越來越多的API提供了各類能力卓絕的原子服務,被整合到無數的系統中去。著名的IT資訊和咨詢公司Gartner在一篇預言2020年IT發展的文章中預言:未來應用中有70%的API是調用自公共的API,而不是由自己完成。
這是一個很驚人的猜想,但是這種猜想正在慢慢變為現實,從BAT這樣的巨頭提供的公共API的驚人使用率就能初見端倪。最常見的例子是:如果你要開發一個GIS相關的系統,你不會去寫一份地圖,而是會去調用Baidu的地圖API;如果你想實現一個類似QQ一樣的私有及時通訊系統,你也許會想到環信這樣的企業提供的云服務,而不是從頭去實現。
API測試現狀
既然API很重要,那它的質量一定要過硬才行,但是目前行業普遍的一個現象是:API測試做得并不是那么充分。分析原因,大概有這么幾條:
- 傳統的軟件測試將測試人員同開發人員割裂了起來,測試工作偏向系統測試和功能測試,而API多半的時候是半成品,系統測試往往不會把API的測試納入其中。
- API測試很多時候需要寫程序去調用,這對于很多離代碼較遠的測試人員構成了工作障礙,也構成了心理障礙。因此很多測試人員不樂意接收接口測試的工作。就算有輔助程序可以適當隔離技術層,也不樂意接手。
- 其實開發人員做API測試是效率最高的。但是目前業界才慢慢的把單元測試這份“測試工作”放到了開發人員頭上(還不是所有人認同這一點)。單元測試的內容和API測試是一回事兒么?顯然他們概念上并不完全重合,單元測試側重于函數的內部邏輯實現,但是API側重于暴露出來的功能是否能夠很好的滿足下游需要。另外一個考慮是,單元測試只關注自身邏輯。而接口測試需要關注外部依賴。對于很多分前后臺開發的團隊,后端團隊開發的最終產出物就是可用的API,它們顯然不是單元測試能cover的。
以上幾點讓API的測試處于一個灰色的地帶。在很多團隊中,API甚至沒有經過一絲一毫的測試,就被組合起來大用特用了。其后果可想而知。
小系統還好,復雜度不高。但是對于一個公司,如果你的產品復雜度一直在提高,用戶也越來越多。如果對API沒有一個良好的測試策略,并加以實施。最后公司為了維護系統付出的代價會越來越高,也許有一天會不堪重負,不得不承受災難性的后果。這樣的例子我經歷過,也直接聽說過了太多。
接上段文字,如果70%以上的開發工作是調用接口,那么,顯然接口測試是非常重要的。所有IT從業者都應該把印象中對它的重視程度多提升幾個級別。
如需轉載,請注明出處和作者@skytraveler (新浪微博)