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í)沒有遇到其他問題;
參考文檔:http://www.51testing.com/html/31/n-3723931.html
待解決問題:
已解決,需要輸入一個(gè)數(shù)字
代碼死循環(huán),無法執(zhí)行下去