python中有乙個自帶的單元測試框架是unittest模組,用它來做單元測試,它裡面封裝好了一些校驗返回的結果方法和一些用例執行前的初始化操作。
在說unittest之前,先說幾個概念:
testcase 也就是測試用例
testsuite 多個測試用例集合在一起,就是testsuite
testloader是用來載入testcase到testsuite中的
testrunner是來執行測試用例的,測試的結果會儲存到testresult例項中,包括執行了多少測試用例,成功了多少,失敗了多少等資訊
下面寫乙個簡單的單元測試用例
import unittest
class mytest(unittest.testcase): # 繼承unittest.testcase
def teardown(self):
# 每個測試用例執行之後做操作
print('111')
def setup(self):
# 每個測試用例執行之前做操作
print('22222')
@classmethod
def teardownclass(self):
# 必須使用 @ classmethod裝飾器, 所有test執行完後執行一次
print('4444444')
@classmethod
def setupclass(self):
# 必須使用@classmethod 裝飾器,所有test執行前執行一次
print('33333')
def test_a_run(self):
self.assertequal(1, 1) # 測試用例
def test_b_run(self):
self.assertequal(2, 2) # 測試用例
if __name__ == '__main__':
unittest.main()#執行所有的測試用例
下面是一些常用的斷言,也就是校驗結果
assertequal(a, b) a == b
assertnotequal(a, b) a != b
asserttrue(x) bool(x) is true
assertfalse(x) bool(x) is false
assertisnone(x) x is none
assertisnotnone(x) x is not none
assertin(a, b) a in b
assertnotin(a, b) a not in b
那如何生成乙個測試報告呢,需要加入另外乙個模組了,htmltestrunner,這個模組需要自己安裝,使用執行測試用例就會生成乙個html的測試報告,裡面會有每個測試用例的執行結果,**如下:
import htmltestrunner
import unittest
class mytest(unittest.testcase):#繼承unittest.testcase
def teardown(self):
#每個測試用例執行之後做操作
print('111')
def setup(self):
#每個測試用例執行之前做操作
print(22222)
def test_run(self):
# self.assertequal(1,1)
self.assertis(1,1)
#測試用例
def test_run2(self):
# self.assertequal(1,1)
self.assertis(1,1)
#測試用例
def test_run3(self):
# self.assertequal(1,1)
self.assertis(1,1)
#測試用例
def test_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):
def test1(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)
然後咱們執行,可以看到在report目錄下已經產生了xml格式的報告了,而且還自動把日期加上了
Python 單元測試
一 假設我們編寫了一段程式,主要功能是完成阿拉伯數字和羅馬數字之間的轉換 在羅馬數字中,利用7個字母進行重複或者組合來表達各式各樣的數字 i 1 v 5 x 10 l 50 c 100 d 500 m 1000 還有一些關於構造羅馬數字的規則。此程式的框架如下 其中,class romanerror...
python 單元測試
assertequal a,b assertnotequal a,b 斷言值是否相等 assertis a,b assertisnot a,b 斷言是否同一物件 記憶體位址一樣 assertlistequal list1,list2 assertitemnotequal list1,list2 斷言...
Python單元測試
本文章整理自 使用python3.6編寫乙個單元測試demo,例如 對學生student類編寫乙個簡單的單元測試。1 編寫student類 usr bin env python3 coding utf 8 class student object def init self,name,score s...