unittest

1.一個(gè)測(cè)試類來完成對(duì)整個(gè)軟件模塊的,測(cè)試;

Test fixture=setup+TestCase+tearDown

寫在前面:

setup()---數(shù)據(jù)初始化,用于測(cè)試前數(shù)據(jù)準(zhǔn)備,測(cè)試程序會(huì)在執(zhí)行每條測(cè)試項(xiàng)前先調(diào)用此方法:

處理方式:1.添加測(cè)試前需要設(shè)置參數(shù) 2.寫pass 3.刪除

teardown()-釋放數(shù)據(jù),清理數(shù)據(jù),在全部測(cè)試項(xiàng)執(zhí)行完畢后,例如關(guān)閉數(shù)據(jù)庫,關(guān)閉瀏覽器;

處理方式:1.測(cè)試后清除數(shù)據(jù) 2.寫pass 3.刪除

setUpclass()--必須使用@classmethod 裝飾器,所有test運(yùn)行前運(yùn)行一次

tearDownclass()-必須使用@classmethod 裝飾器,所有test運(yùn)行完后運(yùn)行一次






1.unittest.Testcase 建立需要測(cè)試的若干單元測(cè)試用例,即若干個(gè)執(zhí)行函數(shù);class BaiduTest(unittest,TestCase)

2.unittest.Testsuite--Testsuite類用來創(chuàng)建測(cè)試套件,用最多的函數(shù)是addTest(),

addTest(self,test)將測(cè)試用例添加到測(cè)試套件;



運(yùn)行方式說明:

一.直接運(yùn)行測(cè)試用例

運(yùn)行方式:if? _name_=="_main_":

? ? ? ? ? ? ? ? ? ?unittest.main()

==unittest.main()方法會(huì)搜索該模塊下所有以test開頭的測(cè)試用例方法,并自動(dòng)執(zhí)行它;

==執(zhí)行順序是命名順序:先執(zhí)行test_case1,在執(zhí)行test_case2

二.將測(cè)試用例聚合成測(cè)試套件運(yùn)行

? ? ? 1.執(zhí)行順序是按照加載順序:先執(zhí)行test_case2,再執(zhí)行test_case1

  suite.addTest(Test('test_case2'))

  suite.addTest(Test('test_case1'))

  2.執(zhí)行測(cè)試用例

? ? ? 3.實(shí)例化TextTestRunner類

  runner=unittest.TextTestRunner()

  4.使用run()方法運(yùn)行測(cè)試套件(即運(yùn)行測(cè)試套件中的所有用例)

  runner.run(suite)

三.構(gòu)造測(cè)試集(簡(jiǎn)化了第二種中要先創(chuàng)建測(cè)試套件然后在依次加載測(cè)試用例)

 #執(zhí)行順序同方案一:執(zhí)行順序是命名順序:先執(zhí)行test_case1,再執(zhí)行test_case2

  test_dir = './'

  discover = unittest.defaultTestLoader.discover(test_dir, pattern='test_*.py')

  #8.3.2執(zhí)行測(cè)試用例

  #8.3.2.1實(shí)例化TextTestRunner類

  runner=unittest.TextTestRunner()

  #8.3.2.2使用run()方法運(yùn)行測(cè)試套件(即運(yùn)行測(cè)試套件中的所有用例)

  runner.run(discover)

四.嵌套測(cè)試套件

運(yùn)行方式:testsuite1=unittest.makeSuite()

testsuite.addTest(test_smoke_test,"Time")

testsuite.addTest(test_smoke_test,"PIN")

testsuite=unittest.TestSuite(testsuite1,testsuite2)

==執(zhí)行順序:按unittest.TestSuite(testsuite1,testsuite2)中添加順序

使unittest框架編寫測(cè)試用例實(shí)例

# coding=utf-8

import unittest

import HTMLTestRunner

class Test(unittest.TestCase):

def setUp(self):

#self.number = raw_input('Enter a number:')

#self.number = int(self.number)

? ? ? ? self.number =20

? ? # 6.定義測(cè)試用例,以“test_”開頭命名的方法

# 注意,方法的入?yún)閟elf

# 可使用unittest.TestCase類下面的各種斷言方法用于對(duì)測(cè)試結(jié)果的判斷

# 可定義多個(gè)測(cè)試用例

? ? def test_case1(self):

print self.number

self.assertEqual(self.number,10,msg='Your input is not 10')

def test_case2(self):

print self.number

self.assertEqual(self.number,20,msg='Your input is not 20')

@unittest.skip('暫時(shí)跳過用例3的測(cè)試')

def test_case3(self):

print self.number

self.assertEqual(self.number,30,msg='Your input is not 30')

def tearDown(self):

print ('2')

print ('Test over')

if __name__ =='__main__':

suite=unittest.TestSuite()

suite.addTest(Test('test_case2'))

suite.addTest(Test('test_case1'))

filename='E:\\testresult.html'

? ? with open(filename,'wb')as fp:

runner =HTMLTestRunner.HTMLTestRunner(stream=fp,title=u'測(cè)試報(bào)告',description=u'用例執(zhí)行詳情:')

runner.run(suite)

六.生成測(cè)試報(bào)告

要用HTMLTestRunner要先下載安裝

下載地址:http://www.51testing.com/html/12/n-3715212.html

下載完放在C:\Python27\Lib該目錄。重命名為HTMLTestRunner.py文件

接下來需要找到python的ide,敲入“import HTMLTestRunner”,沒報(bào)錯(cuò)就代表我們導(dǎo)入HTMLTestRunner模塊成功。如下圖

filename='E:\\testresult.html'

? ? with open(filename,'wb')as fp:

runner =HTMLTestRunner.HTMLTestRunner(stream=fp,title=u'測(cè)試報(bào)告',description=u'用例執(zhí)行詳情:')

runner.run(suite)

小白避坑:

1.代碼寫的沒問題,執(zhí)行也成功了,但就是無法生成HTMLTestRunner的報(bào)告

原因:


圖一:執(zhí)行的只是用例或者套件,而不是整個(gè)文件,寫在main里的代碼是不會(huì)被執(zhí)行的!!自然無法生成測(cè)試報(bào)告。

圖二:中的菜單是正常情況下編輯器的右鍵菜單,這種情況下編輯器是執(zhí)行這個(gè)文件,文件中所有的代碼都會(huì)被執(zhí)行到。

一般情況下在用例的部分點(diǎn)擊右鍵會(huì)出來圖一菜單,在其他部分如main里點(diǎn)擊右鍵會(huì)出來圖二,不過也不一定,自己點(diǎn)點(diǎn)看吧。

現(xiàn)在很清晰了,我們?cè)谌绻胍蓽y(cè)試報(bào)告,那么一定要注意右鍵執(zhí)行時(shí)選擇的右鍵菜單,一定要當(dāng)做文件執(zhí)行,不要讓編輯器當(dāng)做用例執(zhí)行。

然而:我點(diǎn)用例中的任何地方都只出現(xiàn)圖一,并沒有出現(xiàn)圖二的情況,百度解決辦法:


生成的測(cè)試報(bào)告若有其他問題可以參考:

https://www.cnblogs.com/8013-cmf/p/6644366.html

https://blog.csdn.net/xie_0723/article/details/50825310

==暫時(shí)沒有遇到其他問題;


報(bào)告詳情

參考文檔:http://www.51testing.com/html/31/n-3723931.html

待解決問題:

已解決,需要輸入一個(gè)數(shù)字

代碼死循環(huán),無法執(zhí)行下去


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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