python學習筆記 十四 unittest

2022-08-14 23:42:15 字數 3770 閱讀 7029

python中有乙個自帶的單元測試框架是unittest模組,用它來做單元測試,它裡面封裝好了一些校驗返回的結果方法和一些用例執行前的初始化操作。

在說unittest之前,先說幾個概念:

testcase 也就是測試用例

testsuite 多個測試用例集合在一起,就是testsuite

testloader是用來載入testcase到testsuite中的

testrunner是來執行測試用例的,測試的結果會儲存到testresult例項中,包括執行了多少測試用例,成功了多少,失敗了多少等資訊

下面寫乙個簡單的單元測試用例

import

unittest

class mytest(unittest.testcase):#

繼承unittest.testcase

defteardown(self):

#每個測試用例執行之後做操作

print('

111'

)

defsetup(self):

#每個測試用例執行之前做操作

print(22222)

deftest_run(self):

self.assertequal(1,1)

#測試用例

if__name__ == '

__main__':

unittest.main()

#執行所有的測試用例

下面是一些常用的斷言,也就是校驗結果

assertequal(a, b)     a ==b      

assertnotequal(a, b) a !=b

asserttrue(x) bool(x)

istrue

assertfalse(x) bool(x)

isfalse

assertisnone(x) x

isnone

assertisnotnone(x) x

isnot

none

assertin(a, b) a

inb

assertnotin(a, b) a

notin b

那如何生成乙個測試報告呢,需要加入另外乙個模組了,htmltestrunner,這個模組需要自己安裝,使用執行測試用例就會生成乙個html的測試報告,裡面會有每個測試用例的執行結果,**如下:

import

htmltestrunner

import

unittest

class mytest(unittest.testcase):#

繼承unittest.testcase

defteardown(self):

#每個測試用例執行之後做操作

print('

111'

)

defsetup(self):

#每個測試用例執行之前做操作

print(22222)

deftest_run(self):

#self.assertequal(1,1)

self.assertis(1,1)

#測試用例

deftest_run2(self):

#self.assertequal(1,1)

self.assertis(1,1)

#測試用例

deftest_run3(self):

#self.assertequal(1,1)

self.assertis(1,1)

#測試用例

deftest_run1(self):

#self.assertequal(1,1)

self.assertis(1,1)

#測試用例

if__name__ == '

__main__':

test_suite = unittest.testsuite()#

建立乙個測試集合

test_suite.addtest(mytest('

test_run1

'))#

測試套件中新增測試用例

#test_suite.addtest(unittest.makesuite(mytest))#使用makesuite方法新增所有的測試方法

fp = open('

res.html

','wb

')#開啟乙個儲存結果的html檔案

runner = htmltestrunner.htmltestrunner(stream=fp,title='

api測試報告

',description='

測試情況')

#生成執行用例的物件

runner.run(test_suite)

#執行測試套件

如果我們有很多個模組,每個模組下面都寫了很多python檔案,每個python檔案裡面都有測試用例,那怎麼把這個目錄下的用例都執行了呢,就要先找到這個目錄下的所有python檔案,然後找到裡面的測試用例,逐個執行,**如下:

import

unittest,htmltestrunner

suite = unittest.testsuite()#

建立測試套件

all_cases = unittest.defaulttestloader.discover('

.','

test_*.py')

#找到某個目錄下所有的以test開頭的python檔案裡面的測試用例

for case in

all_cases:

suite.addtests(case)

#把所有的測試用例新增進來

fp = open('

res.html

','wb')

runner = htmltestrunner.htmltestrunner(stream=fp,title='

all_tests

',description='

所有測試情況')

runner.run(suite)

#執行測試

我們在後續進行持續整合的時候,要讓**自動執行,就會用到jenkins了,但是上面產生的測試報告都是html格式的,jenkins不認識,就在jenkins裡面顯示不出來。那咱們就要產生一些jenkins認識的測試報告,jenkins認識xml格式的報告,那咱們就產生xml格式的唄,就需要用乙個新的模組,xmlrunner,安裝直接 pip install xmlrunner即可,**如下:

import

unittest

import

xmlrunner

#匯入這個模組

class

my(unittest.testcase):

deftest1(self,a,b,c):

self.assertequal(a+b,c) if

__name__=='

__main__':

test_suite =unittest.testsuite()

test_suite.addtest(unittest.makesuite(my))

runner = xmlrunner.xmltestrunner(output='

report

')#指定報告放的目錄

runner.run(test_suite)

python 學習筆記(十四)

coding utf8 author liwei 定製類的練習 class student object def init self,name self.name name a student liwei print a str 對以上例子的使用 print str 對以上例子的使用 class s...

Python學習筆記(十四)

十六章 json 過長的位址名不能使用分行 filename d pycharmprograms codes 導致 syntaxerror eol while scanning string literal python非字串 現中文字元 data pd.dataframe data zip lon...

Python 深度學習 學習筆記(十四)

用一維卷積神經網路處理序列 今天,我們將學習到用一維卷積理解序列資料。一維卷積的卷積核是 n,1 的形狀。這裡需要注意的一點是,我們在二維卷積是大部分時間用到的卷積核為 3,3 3x3 9 在一維卷積層,卷積視窗的大小可以提公升到 7,或 9,一維卷積處理的思路與二維的大致相同,這裡直接貼上 例項 ...