本文章轉(zhuǎn)載于搜狗測試
背景
最近上線了一個新的服務(wù)窝撵,這個服務(wù)有一個特點就是接入了n個第三方的數(shù)據(jù)服務(wù)蝶缀,前端通過不同參數(shù)請求被測服務(wù)端丹喻,服務(wù)端根據(jù)參數(shù)不同proxy_pass到不同的后端服務(wù)器獲取數(shù)據(jù),處理后吐給前端展示翁都;
問題
被測服務(wù)和后端服務(wù)都上線后碍论,發(fā)現(xiàn)了一些問題
1、第三方服務(wù)器可能會宕機柄慰,導(dǎo)致線上的被測服務(wù)功能不正常鳍悠;
2、現(xiàn)有的報警機制是基于對服務(wù)存活的檢查坐搔,無法檢查功能邏輯是否正常藏研;
問題分析
現(xiàn)有的監(jiān)控程序是對線上服務(wù)器進行服務(wù)進程存活檢查,當進程掛掉才會報警概行,但是有一些情況cover不到蠢挡,比如后端服務(wù)掛了,那么被測服務(wù)進程還在凳忙,但是當客戶端請求時业踏,無數(shù)據(jù)返回;
解決方案
使用腳本模擬客戶端不同參數(shù)的請求涧卵,驗證接口返回碼200的同時勤家,驗證數(shù)據(jù)內(nèi)容的正確性;
例:http://abc.sogou.com?type=music艺演,會請求后端music服務(wù)器却紧,正常情況下有內(nèi)容{“name”:”abc”}
使用python的requests庫請求服務(wù)端獲得返回碼&返回body,驗證jsonobj中 含有key = name & value = abc
當有檢查點失敗時胎撤,向指定郵箱發(fā)報警郵件晓殊;
ps:之前偷聽到一個小技巧,報警郵件可以指定到QQ郵箱伤提,這樣有報警郵件就能及時收到巫俺,因為微信有QQ郵箱的收件提醒,是不是想說一聲肿男,臥槽~這都可以~
衍生問題
1介汹、case維護麻煩,因為使用python unittest框架舶沛,需要將檢查點和請求參數(shù)維護到代碼里嘹承,這樣新增case比較麻煩
2、由于case維護在代碼中如庭,查看已有case也比較麻煩叹卷;
解決方案
1、將case和檢查點存在db中,修改python腳本骤竹,從db中獲取case和檢查點帝牡,并執(zhí)行
整體流程圖
添加case
自定義參數(shù)組合、預(yù)置一些通用檢查點蒙揣,根據(jù)實際參數(shù)組合的預(yù)期返回值靶溜,勾選檢查點
執(zhí)行腳本根據(jù)db中這條case寫入的檢查點選擇執(zhí)行assert
后端提供一個查詢db的接口,供前臺頁面展示case列表(如下)
存在問題
1懒震、目前這套系統(tǒng)最大的問題是擴展性不好罩息,耦合度較大,后面可以通過完善配置的方法解耦个扰,并增加可擴展性扣汪;