專項(xiàng)測試之HTTP接口測試還可以這么玩

轉(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)默垄,方便后面對該問題的跟蹤處理此虑。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市口锭,隨后出現(xiàn)的幾起案子朦前,更是在濱河造成了極大的恐慌,老刑警劉巖讹弯,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件况既,死亡現(xiàn)場離奇詭異,居然都是意外死亡组民,警方通過查閱死者的電腦和手機(jī)棒仍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來臭胜,“玉大人莫其,你說我怎么就攤上這事∷嗜” “怎么了乱陡?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長仪壮。 經(jīng)常有香客問我憨颠,道長,這世上最難降的妖魔是什么积锅? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任爽彤,我火速辦了婚禮,結(jié)果婚禮上缚陷,老公的妹妹穿的比我還像新娘适篙。我一直安慰自己,他們只是感情好箫爷,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布嚷节。 她就那樣靜靜地躺著聂儒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪硫痰。 梳的紋絲不亂的頭發(fā)上衩婚,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天,我揣著相機(jī)與錄音碍论,去河邊找鬼谅猾。 笑死,一個(gè)胖子當(dāng)著我的面吹牛鳍悠,可吹牛的內(nèi)容都是我干的税娜。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼藏研,長吁一口氣:“原來是場噩夢啊……” “哼敬矩!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蠢挡,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤弧岳,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后业踏,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體禽炬,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年勤家,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了腹尖。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,137評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡伐脖,死狀恐怖热幔,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情讼庇,我是刑警寧澤绎巨,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站蠕啄,受9級特大地震影響场勤,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜歼跟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一却嗡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧嘹承,春花似錦、人聲如沸如庭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至骤竹,卻和暖如春帝牡,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蒙揣。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工靶溜, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人懒震。 一個(gè)月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓罩息,卻偏偏與公主長得像,于是被迫代替她去往敵國和親个扰。 傳聞我的和親對象是個(gè)殘疾皇子瓷炮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評論 2 345