從0.1開始接口自動化的一點(diǎn)實(shí)踐

從小老師會跟我們說:好腦子不如爛筆頭唱较,能記住學(xué)會并寫得出來才是自己的東西,心血來潮擼了三個多月前端代碼召川,最后單位組織的一場培訓(xùn)讓我又對自動化測試重新感了次冒南缓,那就簡單寫下接口自動化的一點(diǎn)實(shí)踐,希望能給想學(xué)自動化卻無從下手的同學(xué)一點(diǎn)幫助荧呐,少踩一些坑汉形,我會從很淺顯易懂的例子和代碼來說,不用擔(dān)心看不懂倍阐,因?yàn)樘y太復(fù)雜的我也不會啊概疆。開始正題之前呢,先啰嗦幾句(敲黑板)峰搪,說到自動化岔冀,很多人腦子里浮現(xiàn)出來的或者聽人說過的都是各種錄制工具輔助測試,像selemium啊概耻,Appnium啊這些使套,雖說這些也是自動化的一種,但我一直很不推崇使用這些工具鞠柄,因?yàn)橹婚L手不用腦子也可以使用這些工具侦高,代碼需要自己寫而不是工具自動生成,就像你一直發(fā)懶每天訂外賣厌杜,時(shí)間長了刀都不會使了矫膨,反正半月前我忙活了兩個多小時(shí)做的飯自己都下不去嘴。


前續(xù)工作

好啦,開始正題吧侧馅,現(xiàn)在接口測試的框架較多危尿,大部分公司用到的有Postman、JMeter馁痴、RobotFramework等谊娇,不過本文意在指導(dǎo)新手同學(xué)理解接口測試原理,所以還是從0開始手寫罗晕,加深理解济欢。人家都是從0開始,我這寫個從0.1開始小渊,其實(shí)不是裝X啦法褥,這0.1是要求你會一點(diǎn)腳本語言,Python酬屉、Ruby半等、JAVA啥都可以,這里就用對新手友好的Python為例編寫(Ruby我也不會)呐萨。安裝Python可以去官網(wǎng)https://www.python.org/downloads/下載杀饵,我自己安裝的版本是3.5.2(現(xiàn)在Py2.X已不更新了,熟練2.7的朋友還是早日換成Py3吧)谬擦,安裝非常簡單切距,一直下一步就成,記得最后一步勾選上Add Python 3.5 to PATH再install惨远,否則可能會出現(xiàn)報(bào)錯‘python’ 不是內(nèi)部或外部命令谜悟,也不是可運(yùn)行的程序或批處理文件,這是因?yàn)樯衔奶岬降臎]有勾選北秽,那就要手動把python.exe所在的路徑添加到Path中葡幸,不會的可以參考jdk安裝。安裝成功后命令行敲python羡儿,如果提示信息如下礼患,說明安裝成功:

關(guān)于IDE沒啥說的,直接下個Pycharm吧掠归,http://www.jetbrains.com/pycharm/download/#section=windows這樣你就可以盡情的設(shè)置斷點(diǎn)缅叠、單步執(zhí)行。英文不太好的同學(xué)可以下個漢化包虏冻。

這時(shí)候沒有代碼基礎(chǔ)的同學(xué)要去找一本書開始學(xué)學(xué)基礎(chǔ)肤粱,過一遍基礎(chǔ)并熟悉下單元測試、序列化和網(wǎng)絡(luò)請求等一些知識就可以進(jìn)行下面的內(nèi)容了厨相。


模擬網(wǎng)絡(luò)請求

接口測試一般是基于HTTP和HTTPS的網(wǎng)絡(luò)請求领曼,了解了HTTP協(xié)議和HTML文檔鸥鹉,我們其實(shí)就明白了一個Web應(yīng)用的本質(zhì)就是:

a.瀏覽器發(fā)送一個HTTP請求;

b.服務(wù)器收到請求庶骄,生成一個HTML文檔毁渗;

c.服務(wù)器把HTML文檔作為HTTP響應(yīng)的Body發(fā)送給瀏覽器;

d.瀏覽器收到HTTP響應(yīng)单刁,從HTTP Body取出HTML文檔并顯示灸异。

底層代碼由專門的服務(wù)器軟件實(shí)現(xiàn),我們用Python專注于生成HTML文檔羔飞。因?yàn)槲覀儾幌M佑|到TCP連接肺樟、HTTP原始請求和響應(yīng)格式,所以逻淌,需要一個統(tǒng)一的接口么伯,讓我們專心用Python編寫Web業(yè)務(wù)。WSGI接口滿足了我們的需求卡儒,定義非常簡單田柔,它只要求Web開發(fā)者實(shí)現(xiàn)一個函數(shù),就可以響應(yīng)HTTP請求朋贬。但WSGI接口還是太底層了凯楔,WEB開發(fā)講求效率窜骄,有沒有更抽象一點(diǎn)的減少開發(fā)人員的工作呢锦募?答案當(dāng)然是肯定的,不然怎么說”人生苦短我用Python“呢×诙簦現(xiàn)在用的比較多的是httplib模塊和requests模塊糠亩,我還是用更加簡潔明了一點(diǎn)的requests庫來舉例。

導(dǎo)入requests

使用pip來擴(kuò)展第三方庫准验,打開CMD輸入pip install requests赎线,提示如下圖表示導(dǎo)入成功:

導(dǎo)入成功后就可以開始模擬網(wǎng)絡(luò)請求之旅了。不多廢話糊饱,代碼見:

模擬GET請求方式:

模擬POST請求方式:

requests庫的文檔給大家:

http://docs.python-requests.org/en/master/user/quickstart/#more-complicated-post-requests


一個簡單的接口自動化測試用例

上面說的兩種模擬請求方式只是個基礎(chǔ)知識垂寥,下面才開始真正的接口自動化驗(yàn)證,這里需要一點(diǎn)斷言知識另锋,忘了的同學(xué)先補(bǔ)一下咯滞项。

開始前的準(zhǔn)備工作就是需要大家理解下你要測試的業(yè)務(wù)需求,跟你的產(chǎn)品經(jīng)理要項(xiàng)目原型夭坪,可惜我們公司沒有產(chǎn)品經(jīng)理文判,那就找項(xiàng)目經(jīng)理要一份需求文檔吧,起碼要把里面重要的邏輯吃透室梅。其次你要了解代碼邏輯戏仓,業(yè)務(wù)邏輯不等于代碼邏輯疚宇,看看別人寫的代碼,做個單元測試也挺有趣赏殃。聽說阿里的測開review開發(fā)的代碼敷待,不知道真的假的^-^。然后就是規(guī)范的接口文檔仁热,規(guī)范的接口文檔可以讓接口測試事半功倍讼撒。下面是我用excel手寫的一份簡易版接口文檔(工作電腦連不上,文檔截圖沒法傳股耽,好氣案小)

估計(jì)大家也等急了,終于到開始接口測試了物蝙,對照接口文檔炎滞,看返回結(jié)果是不是跟預(yù)期的相同,這里就需要unittest模塊比較熟練诬乞,通過斷言來測試返回結(jié)果册赛,下面看下我自己寫的測試模板:

執(zhí)行單個用例可以使用測試入口代碼的形式執(zhí)行,用例多了推薦使用另一種方法:在命令行通過參數(shù)-m unittest myapi_test直接運(yùn)行震嫉,對自動化更友好森瘪。



開始接口自動化測試

上面為啥用了兩行分割線呢,因?yàn)橐陨系倪€是基礎(chǔ)票堵,寫了這么多只是為了讓大家方面學(xué)習(xí)扼睬,循序漸進(jìn),理解的透徹點(diǎn)悴势,下面才開始接口自動化窗宇。

想想自己手頭的這幾個項(xiàng)目,對比了下選擇一個最簡單的業(yè)務(wù)邏輯來編寫一個接口自動化的例子特纤。剛搞完的預(yù)飛系統(tǒng)臨時(shí)航路模塊中有航空公司增加航路這么個邏輯军俊,提煉出一個簡單明了的業(yè)務(wù)需求如下

根據(jù)里出的業(yè)務(wù)需求,定義需要處理的函數(shù)如下:

開始做自動化之前捧存,還需要大家了解下數(shù)據(jù)庫知識粪躬,最起碼表關(guān)系還是要了解下的。

我下面寫的代碼可能比上面測試模板的代碼多了一點(diǎn)昔穴,但是總體思想是一致的镰官,對照注釋應(yīng)該看得懂。需要說明的是實(shí)際工作中是手輸航路內(nèi)容傻咖,這里我寫成了file-like的導(dǎo)入形式朋魔,記得上面我讓大家要先學(xué)習(xí)下JSON的序列化知識,這里就用上了卿操,傳輸要用到JSON的反序列化

以上只是一個接口的設(shè)計(jì)實(shí)現(xiàn)警检,但實(shí)際工作中一次測試可不止跑一個接口孙援,幾百上千的case還是有的。所以要寫一個自動跑接口的的用例扇雕,這樣才能體現(xiàn)出自動化嘛

以上代碼可以讓自動化用例自動跑并輸出測試報(bào)告拓售。with語句不太了解的同學(xué)可以自行查找學(xué)習(xí)下,主要是為了保證文件讀寫可以在報(bào)錯的情況下正確關(guān)閉镶奉。

以上只是接口自動化的實(shí)現(xiàn)础淤,總體來說還是比較糙,實(shí)際工作中這些case還需要優(yōu)化哨苛。例如增加配置文件(配置數(shù)據(jù)庫鸽凶、url、用戶信息建峭、狀態(tài)碼等)玻侥、增加初始化配置文件的case、增加配置數(shù)據(jù)庫連接和獲取用戶cookie的文件等亿蒸。一次說太多不好消化凑兰,優(yōu)化case周末有空再寫寫。


如果代碼讓你頭疼边锁,那也請讀完姑食。刨除代碼茅坛,接口自動化框架無非如下結(jié)構(gòu)音半,并沒有多繁瑣,是不是感覺比你用自動化工具生成那種沒價(jià)值的代碼爽多了灰蛙。覺得吃力可能因?yàn)槟愕拇a基礎(chǔ)不太牢固祟剔,先去鞏固基礎(chǔ)隔躲,然后再看一次我寫的結(jié)構(gòu)摩梧,你就會覺得so easy。(打碼的不需要宣旱,至于碼不太專業(yè)仅父,就不要在意細(xì)節(jié)啦)


下周有時(shí)間會再聊聊基于Jenkins持續(xù)集成自動化的實(shí)踐,這些都是自己一個人搗鼓的浑吟,沒人指導(dǎo)笙纤,有大神就請拍磚,有同事學(xué)習(xí)可以共同進(jìn)步组力。文筆一般省容,排版較渣,誰還沒個當(dāng)作家的理想燎字。

PS:單位今天斷網(wǎng)腥椒,打包圖沒帶阿宅,遠(yuǎn)程不到工作電腦,回家全部重新手?jǐn)]的代碼截圖笼蛛,接口文檔自己用excel手寫的洒放,湊合看吧(默默無語兩眼淚,此處應(yīng)該有掌聲~)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末滨砍,一起剝皮案震驚了整個濱河市往湿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌惋戏,老刑警劉巖领追,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異响逢,居然都是意外死亡蔓腐,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進(jìn)店門龄句,熙熙樓的掌柜王于貴愁眉苦臉地迎上來回论,“玉大人,你說我怎么就攤上這事分歇】兀” “怎么了?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵职抡,是天一觀的道長葬燎。 經(jīng)常有香客問我,道長缚甩,這世上最難降的妖魔是什么谱净? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮擅威,結(jié)果婚禮上壕探,老公的妹妹穿的比我還像新娘。我一直安慰自己郊丛,他們只是感情好李请,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著厉熟,像睡著了一般导盅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上揍瑟,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天白翻,我揣著相機(jī)與錄音,去河邊找鬼绢片。 笑死滤馍,一個胖子當(dāng)著我的面吹牛恩急,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播纪蜒,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼衷恭,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了纯续?” 一聲冷哼從身側(cè)響起随珠,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎猬错,沒想到半個月后窗看,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡倦炒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年显沈,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逢唤。...
    茶點(diǎn)故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡拉讯,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出鳖藕,到底是詐尸還是另有隱情魔慷,我是刑警寧澤,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布著恩,位于F島的核電站院尔,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏喉誊。R本人自食惡果不足惜邀摆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望伍茄。 院中可真熱鬧栋盹,春花似錦、人聲如沸幻林。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽沪饺。三九已至,卻和暖如春闷愤,著一層夾襖步出監(jiān)牢的瞬間整葡,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工讥脐, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留遭居,地道東北人啼器。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像俱萍,于是被迫代替她去往敵國和親端壳。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評論 2 354

推薦閱讀更多精彩內(nèi)容