轉(zhuǎn)載自 :?騰訊移動(dòng)品質(zhì)中心TMQ? ?
1真椿、背景
隨著H5在各行業(yè)領(lǐng)域的運(yùn)用,無論是在APP內(nèi)嵌入H5頁面的hybrid應(yīng)用還是直接在微信公眾號或者輕應(yīng)用中使用H5頁面都是非常的常見(比如前端頁面通過HTTP 接口調(diào)用拉取數(shù)據(jù)進(jìn)行交互,實(shí)現(xiàn)前后臺分離)蚂会。而隨著此類技術(shù)的應(yīng)用和發(fā)展,作為一個(gè)測試人員,跟上時(shí)代的變化各吨,除了保證前端頁面UI的正確性,也要保證HTTP接口的正確性袁铐,從而保證了整個(gè)業(yè)務(wù)功能邏輯的正確性揭蜒,而接口如果手工測試,不僅工作量很大剔桨,而且效率比較地下屉更,而它的特點(diǎn)更適合通過搭建自動(dòng)化框架來測試,既能提升效率洒缀,又能保證質(zhì)量瑰谜。
HTTP?接口一般有兩種請求方式,一種是POST树绩,一種是GET, 需要關(guān)注發(fā)起請求headers(POST請求還要關(guān)注post 數(shù)據(jù))和響應(yīng)的headers和body萨脑,一般情況下返回的數(shù)據(jù)都是json格式。從Chrome的Network去分析一個(gè)網(wǎng)頁的請求加載順序大概就能看出饺饭,目前很多網(wǎng)頁的請求順序都是先去請求html渤早,從html里得到css和js的地址,去請求css和js瘫俊,從js里的http接口去請求相關(guān)的數(shù)據(jù)鹊杖,如果拉取回來的數(shù)據(jù)還有很多圖片或其他地址悴灵,在繼續(xù)請求圖片,回填內(nèi)容到html網(wǎng)頁里仅淑,網(wǎng)頁內(nèi)容不斷更新變化称勋,其實(shí)也就是接口拉取出來數(shù)據(jù)的變化,頁面的樣式基本都是一樣的:
1.1手工測試hold不住的問題
1)如上圖涯竟,視頻分類很多赡鲜,電影、電視劇庐船、綜藝银酬、動(dòng)漫等,每次都把各個(gè)頻道測試一遍筐钟,比較耗時(shí)揩瞪;
2)在進(jìn)行視頻組合查詢時(shí),各種條件組合能拉取回不同的數(shù)據(jù)篓冲,而組合的方式有上千種李破,如何都保證查詢過濾的正確性;
3)前端頁面都是正常的壹将,可用戶總反饋有時(shí)候拉取不到數(shù)據(jù)嗤攻,到底哪里出了問題;
4)寫了用例诽俯,但是發(fā)現(xiàn)覆蓋不全妇菱,因?yàn)榻M合場景太多,每個(gè)組合場景都測試暴区,工作量又太大闯团;
5)線上出現(xiàn)問題了我們卻不是第一個(gè)知道出問題了,沒法對頁面的內(nèi)容進(jìn)行很好的監(jiān)控仙粱,因?yàn)橛脩魣鼍白兓喽恕?/p>
1.2怎么來通過HTTP接口測試很好的解決上面問題呢
1)抽取接口(chrome爬确拷弧? http工具分析缰盏?手工提扔坑)
2)拿到接口后,怎么獲取接口參數(shù)所有的值(通過線上數(shù)據(jù)去挨個(gè)查找口猜?從運(yùn)營平臺獲取數(shù)據(jù)负溪?)
3)怎么把所有線上接口都全部抓取并監(jiān)控起來
4)發(fā)現(xiàn)問題的反饋處理
5)接口修改維護(hù)
帶著這些問題,進(jìn)行了下面整個(gè)自動(dòng)化接口測試平臺的搭建济炎。
2川抡、接口自動(dòng)化測試思路
2.1整個(gè)測試流程的梳理
根據(jù)上面1.2所描述將會(huì)遇到的問題,整理測試設(shè)計(jì)思路,每個(gè)大項(xiàng)劃分出要完成的子項(xiàng)崖堤,流程圖如下:
2.2運(yùn)行時(shí)機(jī)
設(shè)計(jì)這個(gè)測試侍咱,是為了更好的更快的發(fā)現(xiàn)問題,能盡早的完成測試閉環(huán)密幔,找出產(chǎn)品缺陷楔脯,反饋開發(fā)同學(xué),加快整個(gè)迭代的速度胯甩。具體有以下場景:
1)開發(fā)自測:開發(fā)同學(xué)開發(fā)完新的接口后昧廷,不知道對其他接口有沒有影響,可以跑一遍接口測試來確定偎箫;
2)冒煙測試:開發(fā)提測后木柬,可以把所有接口和參數(shù)都運(yùn)行一遍,所需要修改域名為測試環(huán)境域名和新增接口淹办;
3)線上監(jiān)控:對已上線業(yè)務(wù)進(jìn)行監(jiān)控眉枕,當(dāng)某些組合條件查詢不到數(shù)據(jù)或者某些接口拉取不到數(shù)據(jù)時(shí),能夠及時(shí)提醒相關(guān)測試和開發(fā)人員怜森。
3速挑、HTTP接口自動(dòng)化測試平臺搭建
3.1技術(shù)選型
1)前端和后臺邏輯:根據(jù)目前所熟悉的框架和語言,選擇Python+Django+Bootstrap
2)存儲:使用Mysql存儲所有接口數(shù)據(jù)副硅,分為3塊數(shù)據(jù)(抓取回來所有接口數(shù)據(jù)梗摇、唯一接口數(shù)據(jù)、參數(shù)化接口數(shù)據(jù))
3)接口監(jiān)控任務(wù)調(diào)起管理:Jenkins
3.2接口數(shù)據(jù)抓取
1)手工抓取 (模塊想许、標(biāo)簽是為了方便從業(yè)務(wù)角度管理http接口腳本)
2)自動(dòng)批量抓取:
測試人員在手機(jī)上訪問業(yè)務(wù)断序,手機(jī)通過筆記本商的Fiddler來代理上網(wǎng)流纹,這樣Fiddler可以抓取到所有數(shù)據(jù),相關(guān)設(shè)置可以參考Fiddler手機(jī)抓包教程http://jingyan.baidu.com/article/03b2f78c7b6bb05ea237aed2.html违诗,抓包并分析出HTTP 接口數(shù)據(jù)的流程如下:
? a漱凝、設(shè)置Fiddler的Customize Rules…
? b、修改Script內(nèi)容诸迟,具體代碼和相關(guān)描述如下圖茸炒,注意你需要過濾的主要域名,因?yàn)槭謾C(jī)上有很多其他的請求也會(huì)被抓出來阵苇,通過域名過濾可以過濾出來當(dāng)前域名的請求壁公;
? c、在這個(gè)腳本中绅项,還可以定義請求中以html紊册、gif、css快耿、js囊陡、jpg等等其他和接口無關(guān)的請求芳绩;
3)把所有有效的接口請求頭,請求body撞反,返回頭妥色,返回body全部存儲到文件里,等待下一步分析遏片;
抓取到的文件數(shù)據(jù)如下:
3.3分析接口
1)接口清洗:
作用:接口回放嘹害,回歸測試;
過濾掉提取的http session中的js丁稀、css吼拥、圖片等雜質(zhì);
Post請求:過濾掉經(jīng)過加密請求(暫不考慮)线衫,其他session保留凿可;
Get請求:api返回?cái)?shù)據(jù)都是json類型,根據(jù)response中的”Content-Type”字段是否為json判定是否為有效接口授账;
保留返回碼為301/302跳轉(zhuǎn)的http session枯跑;
2)唯一接口過濾:
作用:接口回放,回歸測試白热;
過濾掉提取的http session中的js敛助、css、圖片等雜質(zhì)屋确;
Post請求:過濾掉經(jīng)過加密請求(暫不考慮)纳击,其他session保留;
Get請求:api返回?cái)?shù)據(jù)都是json類型攻臀,根據(jù)response中的”Content-Type”字段是否為json判定是否為有效接口焕数;
保留返回碼為301/302跳轉(zhuǎn)的http session;
3)接口清洗流程
3.4接口測試
1)對清洗的接口進(jìn)行測試刨啸,測試通過后堡赔,接口再做入庫處理;
2)接口調(diào)用的處理流程:
3.5腳本管理
1)可以對測試任務(wù)進(jìn)行管理设联,設(shè)置在批量運(yùn)行時(shí)是否要進(jìn)行運(yùn)行善已,運(yùn)行的狀態(tài)展示,運(yùn)行詳情設(shè)置以及刪除操作离例,因?yàn)榻涌跀?shù)量眾多换团,可以選擇刪除選中或是全部刪除:
2)右側(cè)可以看到所有請求的原始數(shù)據(jù)(請求時(shí)間、接口更新時(shí)間粘招、請求數(shù)據(jù)啥寇、請求頭部、響應(yīng)頭部、響應(yīng)內(nèi)容數(shù)據(jù))辑甜,左側(cè)可以對響應(yīng)進(jìn)行校驗(yàn)衰絮,分為基礎(chǔ)校驗(yàn)和自定義斷言,基礎(chǔ)校驗(yàn)可以校驗(yàn)返回頭代碼磷醋、返回內(nèi)容類型猫牡、內(nèi)容長度,自定義斷言可以自己添加任何返回?cái)?shù)據(jù)的字段并設(shè)置對比方式和值進(jìn)行對比邓线,可設(shè)置多個(gè)字段:
自定義斷言:
3)接口參數(shù)化淌友,在獲取到接口后,可以通過接口參數(shù)的key骇陈,加上從開發(fā)或者運(yùn)維那里獲取到的參數(shù)值列表震庭,進(jìn)行快速參數(shù)化,所有參數(shù)進(jìn)行排列組合你雌,生成該接口全集器联,進(jìn)行回放測試;
3.6更新接口
在使用過程中婿崭,會(huì)遇根據(jù)由于業(yè)務(wù)變動(dòng)來新增拨拓、修改、刪除HTTP API的情況氓栈,所以在接口自動(dòng)化測試時(shí)渣磷,我們可以通過下面兩種情況來處理接口的變動(dòng);
1)從開發(fā)那里得知有更改變化的接口授瘦,手動(dòng)通過接口管理頁面進(jìn)行參數(shù)的刪減或者直接手工新建接口醋界,添加到隊(duì)列里;
2)如果是不知道接口是否有變動(dòng)提完,目前采用半自動(dòng)去分析接口(和初始錄制接口一樣物独,測試人員在手機(jī)上操作一遍業(yè)務(wù),F(xiàn)iddler錄制所有接口氯葬,再自動(dòng)識別接口的變更,來更數(shù)據(jù)庫中的接口)婉陷;
3)具體實(shí)現(xiàn)流程圖:
3.7?日常監(jiān)控和結(jié)果輸出
日常監(jiān)控可以使用Jenkins來做后臺管理帚称,通過前端頁面提交任務(wù)表單后,自動(dòng)根據(jù)提交數(shù)據(jù)在Jenkins里建立新的job秽澳,可以手動(dòng)觸發(fā)執(zhí)行任務(wù)或者自動(dòng)定時(shí)觸發(fā)任務(wù):
1)在前端頁面填寫form表單(包括任務(wù)名稱闯睹、業(yè)務(wù)分類、運(yùn)行計(jì)劃担神、結(jié)果郵件推送列表等)楼吃,提交后,自動(dòng)在后臺添加任務(wù)到Jenkins里,如下圖孩锡;
2)根據(jù)運(yùn)行計(jì)劃執(zhí)行后生成監(jiān)控郵件結(jié)果酷宵,通知項(xiàng)目相關(guān)人員,此處可以配置為當(dāng)失敗時(shí)在進(jìn)行通知躬窜,線上的監(jiān)控一般都是每半小時(shí)執(zhí)行一次浇垦,這樣能夠盡快的獲得線上接口運(yùn)行情況;
3)發(fā)現(xiàn)問題的閉環(huán):打通缺陷管理系統(tǒng),如果發(fā)現(xiàn)監(jiān)控失敗的接口荣挨,可以點(diǎn)擊詳情頁查看具體失敗詳情男韧,確認(rèn)是缺陷,可以一鍵提交缺陷到缺陷管理系統(tǒng)默垄,方便后面對該問題的跟蹤處理此虑。