用python實現(xiàn)接口測試(九灾梦、Unittest測試框架)

一峡钓、單元測試框架

不論對于開發(fā)還是測試,都離不開單元測試框架若河,對于開發(fā)而言使用單元測試框架能岩,可以編寫測試代碼來驗證驗證自己編寫的功能是否正確,對于測試而言萧福,使用單元測試框架拉鹃,可以編寫自動化的測試用例,在Python中單元測試框架是Pyunit鲫忍,即unittest,unittest我一直認(rèn)為是一個很優(yōu)秀的單元測試框架膏燕。

官方詳細(xì)的地址是:https://docs.python.org/2/library/unittest.html

單元測試支持測試自動化、共享的安裝程序和關(guān)閉代碼測試悟民、 聚合成集合坝辫,測試和報告框架從測試的獨立性。單元測試模塊提供可以很容易地支持這些素質(zhì)的一組測試的類射亏。

二近忙、unittest框架間各個模塊的聯(lián)系

模塊間的聯(lián)系

在一個完整的單元測試用例中竭业,是包含了測試固件(setUp()和tearDown()),在測試執(zhí)行的階段及舍,我們更加愿意使用測試套件(TestSuite())來組織每個測試用例來執(zhí)行(TestRunner)并得到測試結(jié)果(TestReport)未辆,什么 是測試固件,在unittest中锯玛,setUp()與tearDown()被成為測試固件咐柜,某些人稱為鉤子(僅僅只一個稱呼而已),它的主要目標(biāo)初始化測試用例更振,執(zhí)行測試用例后炕桨,對測試用例執(zhí)行的結(jié)果做后期的處理。

三肯腕、測試用例

以下是二個測試用例献宫,不管執(zhí)行那個測試用例,都會執(zhí)行setUp()和tearDown()实撒,也就是說姊途,在一個測試類中,如果有N個測試用例知态,在執(zhí)行該測試類中的測試用例的時候捷兰,會執(zhí)行N次setUp()和tearDown(),見代碼:

#coding:utf-8

import unittest

def div(a,b):

return a/b

class TestDiv(unittest.TestCase):

def setUp(self):

print u'開始...'

? ? def tearDown(self):

print u'結(jié)束...'

? ? def test_001(self):

self.assertEqual(div(1,1),1)

def test_002(self):

self.assertRaises(ZeroDivisionError,div,1,0)

if __name__=='__main__':

unittest.main(verbosity=2)

運行結(jié)果:

運行結(jié)果

可以看到负敏,執(zhí)行了二個測試用例贡茅,也執(zhí)行了2次setUp()和tearDown()方法,如果這樣你感覺不明顯其做,可以結(jié)合selenium的測試框架來看更加直觀顶考,見代碼:

#coding:utf-8

import unittest

from seleniumimport webdriver

def div(a,b):

return a/b

class TestDiv(unittest.TestCase):

def setUp(self):

self.driver=webdriver.Chrome()

self.driver.get('http://www.baidu.com')

def tearDown(self):

self.driver.quit()

def test_001(self):

self.assertEqual(self.driver.title,u'百度一下,你就知道')

def test_002(self):

self.assertRaises(self.driver.current_url,'http://www.baidu.com/')

if __name__=='__main__':

unittest.main(verbosity=2)

執(zhí)代碼后妖泄,會看到打開瀏覽器二次驹沿,當(dāng)然關(guān)閉瀏覽器也是二次。

四蹈胡、代碼優(yōu)化

在一個測試類中渊季,測試用例是非常多的,這樣添加或者刪除實在是浪費時間罚渐,我們可以把源碼修改下却汉,來實現(xiàn)執(zhí)行一個測試,某些用例不執(zhí)行的可以忽略荷并,使用的方法是makeSuite()

#coding:utf-8

import unittest

from seleniumimport webdriver

def div(a,b):

return a/b

class TestDiv(unittest.TestCase):

@classmethod

? ? def setUpClass(cls):

cls.driver=webdriver.Chrome()

cls.driver.get('http://www.baidu.com')

@classmethod

? ? def tearDownClass(cls):

cls.driver.quit()

def test_001(self):

self.assertEqual(self.driver.title,u'百度一下病涨,你就知道')

@unittest.skip(u'忽略該測試用例,謝謝!')

def test_002(self):

self.assertEqual(self.driver.current_url,'https://www.baidu.com/')

if __name__=='__main__':

suite=unittest.TestSuite(unittest.makeSuite(TestDiv))

unittest.TextTestRunner(verbosity=2).run(suite)

運行結(jié)果:

makeSuite()運行結(jié)果

五、添加HTML測試報告

在python中璧坟,提供了HTMLTestRunner.py來生成測試報告既穆,把該文件下載后,直接放到C:Python27的Lib的目錄下雀鹃,就可以導(dǎo)入該模塊使用了幻工,見代碼:

#coding:utf-8

import unittest

from seleniumimport webdriver

import HTMLTestRunner

def div(a,b):

return a/b

class TestDiv(unittest.TestCase):

@classmethod

? ? def setUpClass(cls):

cls.driver=webdriver.Chrome()

cls.driver.get('http://www.baidu.com')

@classmethod

? ? def tearDownClass(cls):

cls.driver.quit()

def test_001(self):

self.assertEqual(self.driver.title,u'百度一下,你就知道')

@unittest.skip(u'忽略該測試用例,謝謝!')

def test_002(self):

self.assertEqual(self.driver.current_url,'https://www.baidu.com/')

if __name__=='__main__':

suite=unittest.TestSuite(unittest.makeSuite(TestDiv))

#unittest.TextTestRunner(verbosity=2).run(suite)

? ? runner = HTMLTestRunner.HTMLTestRunner(

stream=file('testReport.html', 'wb'),

? ? ? ? title=u'TestReport',

? ? ? ? description=u'測試報告詳細(xì)信息'

? ? )

runner.run(suite)

運行代碼后黎茎,會在當(dāng)前工作目錄下生成testReport.html的測試報告囊颅,見截圖

測試報告截圖

注:

1.在打開Chrome瀏覽器中會提示如圖所示:

提示被控制

解決辦法如下:

1.在瀏覽器配置里加個參數(shù),忽略掉這個警告提示語

option = webdriver.ChromeOptions()

option.add_argument('disable-infobars')

2.代碼如下

#coding:utf-8

import unittest

from seleniumimport webdriver

import HTMLTestRunner

def div(a,b):

return a/b

# 加啟動配置

option = webdriver.ChromeOptions()

option.add_argument('disable-infobars')

class TestDiv(unittest.TestCase):

@classmethod

? ? def setUpClass(cls):

cls.driver=webdriver.Chrome(chrome_options=option)

cls.driver.get('http://www.baidu.com')

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末傅瞻,一起剝皮案震驚了整個濱河市踢代,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌嗅骄,老刑警劉巖胳挎,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異溺森,居然都是意外死亡慕爬,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門屏积,熙熙樓的掌柜王于貴愁眉苦臉地迎上來医窿,“玉大人,你說我怎么就攤上這事炊林±崖” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵渣聚,是天一觀的道長独榴。 經(jīng)常有香客問我,道長饵逐,這世上最難降的妖魔是什么括眠? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮倍权,結(jié)果婚禮上掷豺,老公的妹妹穿的比我還像新娘。我一直安慰自己薄声,他們只是感情好当船,可當(dāng)我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著默辨,像睡著了一般德频。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上缩幸,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天壹置,我揣著相機與錄音竞思,去河邊找鬼。 笑死钞护,一個胖子當(dāng)著我的面吹牛盖喷,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播难咕,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼课梳,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了余佃?” 一聲冷哼從身側(cè)響起暮刃,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎爆土,沒想到半個月后椭懊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡雾消,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年灾搏,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片立润。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡狂窑,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出桑腮,到底是詐尸還是另有隱情泉哈,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布破讨,位于F島的核電站丛晦,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏提陶。R本人自食惡果不足惜烫沙,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望隙笆。 院中可真熱鬧锌蓄,春花似錦、人聲如沸撑柔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽铅忿。三九已至剪决,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背柑潦。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工享言, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人渗鬼。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓担锤,卻偏偏與公主長得像,于是被迫代替她去往敵國和親乍钻。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,577評論 2 353

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

  • 洞見SELENIUM自動化測試 寫在最前面:目前自動化測試并不屬于新鮮的事物铭腕,或者說自動化測試的各種方法論已經(jīng)層出...
    厲鉚兄閱讀 6,728評論 3 47
  • 基于 SELENIUM 的自動化測試架構(gòu) 非常感謝各位查閱本篇文章银择,筆者在此感謝各位。 目前市面上有分門別類的自動...
    厲鉚兄閱讀 6,065評論 6 43
  • Startup 單元測試的核心價值在于兩點: 更加精確地定義某段代碼的作用累舷,從而使代碼的耦合性更低 避免程序員寫出...
    wuwenxiang閱讀 10,097評論 1 27
  • Web項目的 UI 自動化測試方案 有用的鏈接: 自動化Selenium的Python文檔http://www.j...
    厲鉚兄閱讀 10,997評論 1 42
  • 微風(fēng)輕輕地吹 細(xì)細(xì)的雨已經(jīng)打濕了你的輕衫 你是否仍然忘不了 忘了他吧 你的執(zhí)著是他向世人炫耀的資本 你愛著他浩考,他卻...
    火上冰凌亙古今閱讀 147評論 0 0