接口測(cè)試系列文章4——10分鐘帶你利用測(cè)試框架優(yōu)化接口測(cè)試

在實(shí)際工作中栖博,我們利用單元測(cè)試框架就可以完全搞定接口測(cè)試。單元測(cè)試(unittesting),是指對(duì)軟件中的最小可測(cè)試單元進(jìn)行檢查和驗(yàn)證穷躁,這里的最小可測(cè)試單元通常是指函數(shù)或者類(lèi)。單元測(cè)試是即所謂的白盒測(cè)試因妇,一般由開(kāi)發(fā)人員負(fù)責(zé)測(cè)試问潭,因?yàn)殚_(kāi)發(fā)人員知道被測(cè)試的軟件如何完成功能和完成什么樣的功能。在python中unittest婚被、pytest模塊就是單元測(cè)試的一種具體表現(xiàn)形式狡忙。

單元測(cè)試的范圍

???????接口功能測(cè)試

???????邊界條件測(cè)試

???????所有獨(dú)立執(zhí)行通路測(cè)試

???????各條錯(cuò)誤處理通路測(cè)試

???????靜態(tài)代碼分析

其中,前兩項(xiàng)接口功能測(cè)試和邊界條件測(cè)試就是我們熟知的接口測(cè)試址芯!而對(duì)于后三項(xiàng)通常都是開(kāi)發(fā)人員通過(guò)工具輔助自測(cè)完成的灾茁,常用的工具括:Sonar、PMD谷炸、FindBugs北专、Checkstyle、Jacoco等等(好多工具都集成到IDE中淑廊,開(kāi)發(fā)人員使用非常方便)逗余。

單元測(cè)試引入的原因

單元測(cè)試提供快速反饋,把bug消滅在開(kāi)發(fā)階段季惩,減少問(wèn)題流到集成測(cè)試录粱、驗(yàn)收測(cè)試和用戶(hù)腻格,降低了軟件質(zhì)量控制的成本。

不同的開(kāi)發(fā)語(yǔ)言都有對(duì)應(yīng)的單元測(cè)試框架

Java?????????Junit3\Junit4\Junit5\TestNG

Python????????unittest\pytest

C++??????????CppUnit

.net??????? ? Nunit

JavaScript?? ??? Qunit

接口測(cè)試在單元測(cè)試中的應(yīng)用

我們以u(píng)nittest為例講解啥繁,unittest是Python單元測(cè)試框架菜职,類(lèi)似于JUnit框架∑烀觯基本用法如下:

1)import unittest

2)定義一個(gè)繼承自u(píng)nittest.TestCase的測(cè)試用例類(lèi)

3)定義setUp和tearDown酬核,在每個(gè)測(cè)試用例前后做一些輔助工作。

4)定義測(cè)試用例适室,名字以test開(kāi)頭

5)一個(gè)測(cè)試用例應(yīng)該只測(cè)試一個(gè)方面嫡意,測(cè)試目的和測(cè)試內(nèi)容應(yīng)很明確。主要是調(diào)用assertEqual捣辆、assertRaises等斷言方法判斷程序執(zhí)行結(jié)果和預(yù)期值是否相符蔬螟。

6)調(diào)用unittest.main()啟動(dòng)測(cè)試

下面舉個(gè)實(shí)例,來(lái)看看unittest如何測(cè)試一個(gè)簡(jiǎn)單的函數(shù)

測(cè)一個(gè)簡(jiǎn)單的加法接口

def add(a, b):

?????? return a + b

import unittest

class TestAddFunc (unittest.TestCase):

?????? def test_add1(self):

????????????? self.assertEqual (3, add (1, 2))

?????? def test_add2(self):

?????????????? self.assertEqual (4, add (1, 1))

if __name__ == '__main__':

??? unittest.main ()

在pycharm中運(yùn)行汽畴,結(jié)果如下:

把校驗(yàn)get請(qǐng)求的接口測(cè)試代碼移植到unittest

源碼:

import requests

import json

req="http://rap2api.taobao.org/app/mock/85630/getinfo"

response=requests.get(req)

print(response.text)

code=json.loads(response.text).get('code')

print(code)

if code <=10:

????? print ("reponse ok")

else:

????? print("reponse fail")

移植后的代碼

import requests

import json

import unittest

class TestGetFunc (unittest.TestCase):

???? def test_1(self):

??????? req ="http://rap2api.taobao.org/app/mock/85630/getinfo"

??????? response = requests.get(req)

???????? print(response.text)

??????? code = json.loads(response.text).get('code')

??????? self.assertLessEqual(code, 10)

if __name__ == '__main__':

??? unittest.main()

通過(guò)代碼實(shí)現(xiàn)接口測(cè)試非常的簡(jiǎn)單旧巾,他幫我們定義了用例的規(guī)則(test開(kāi)頭的方法就是測(cè)試用例),給我們提供了斷言assertLessEqual(用來(lái)判斷用例的通過(guò)與否)忍些,代碼執(zhí)行后提供了測(cè)試執(zhí)行的結(jié)果鲁猩!

斷言

在測(cè)試框架中都是通過(guò)斷言來(lái)判定用例通過(guò)與否的(比if...else..方便很多),unittest中提供很多方法進(jìn)行斷言相關(guān)操作罢坝,具體如下:

基礎(chǔ)斷言

exceptions, warnings, 日志信息斷言

特殊斷言

集合斷言

當(dāng)然這只是最簡(jiǎn)單的demo實(shí)例廓握,目的是教大家入門(mén)!unittest中還有很多強(qiáng)大的功能來(lái)支持我們做單元測(cè)試工作炸客,由于本文是針對(duì)小白疾棵,所以這里就不再詳細(xì)介紹了戈钢!如果你想了解更多關(guān)于python單元測(cè)試的知識(shí)可以閱讀下面兩篇文章:

上手unittest讀這篇文章就夠了

從0到1上手Pytest

原創(chuàng)不易痹仙,如果文章幫到了你,歡迎轉(zhuǎn)發(fā)殉了,讓更多的朋友受益开仰!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市薪铜,隨后出現(xiàn)的幾起案子众弓,更是在濱河造成了極大的恐慌,老刑警劉巖隔箍,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谓娃,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡蜒滩,警方通過(guò)查閱死者的電腦和手機(jī)滨达,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)奶稠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人捡遍,你說(shuō)我怎么就攤上這事锌订。” “怎么了画株?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵辆飘,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我谓传,道長(zhǎng)蜈项,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任续挟,我火速辦了婚禮战得,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘庸推。我一直安慰自己常侦,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布贬媒。 她就那樣靜靜地躺著聋亡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪际乘。 梳的紋絲不亂的頭發(fā)上坡倔,一...
    開(kāi)封第一講書(shū)人閱讀 51,182評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音脖含,去河邊找鬼罪塔。 笑死,一個(gè)胖子當(dāng)著我的面吹牛养葵,可吹牛的內(nèi)容都是我干的征堪。 我是一名探鬼主播,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼关拒,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼佃蚜!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起着绊,我...
    開(kāi)封第一講書(shū)人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤谐算,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后归露,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體洲脂,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年剧包,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了恐锦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片雇毫。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖踩蔚,靈堂內(nèi)的尸體忽然破棺而出棚放,到底是詐尸還是另有隱情,我是刑警寧澤馅闽,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布飘蚯,位于F島的核電站,受9級(jí)特大地震影響福也,放射性物質(zhì)發(fā)生泄漏局骤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一暴凑、第九天 我趴在偏房一處隱蔽的房頂上張望峦甩。 院中可真熱鬧,春花似錦现喳、人聲如沸凯傲。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)冰单。三九已至,卻和暖如春灸促,著一層夾襖步出監(jiān)牢的瞬間诫欠,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工浴栽, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留荒叼,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓典鸡,卻偏偏與公主長(zhǎng)得像被廓,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子椿每,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

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