測試函數python代碼的簡單介紹

如何使用python編寫測試腳本

1)doctest

創(chuàng)新互聯-專業(yè)網站定制、快速模板網站建設、高性價比金溪網站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式金溪網站制作公司更省心,省錢,快速模板網站建設找我們,業(yè)務覆蓋金溪地區(qū)。費用合理售后完善,十余年實體公司更值得信賴。

使用doctest是一種類似于命令行嘗試的方式,用法很簡單,如下

復制代碼代碼如下:

def f(n):

"""

f(1)

1

f(2)

2

"""

print(n)

if __name__ == '__main__':

import doctest

doctest.testmod()

應該來說是足夠簡單了,另外還有一種方式doctest.testfile(filename),就是把命令行的方式放在文件里進行測試。

2)unittest

unittest歷史悠久,最早可以追溯到上世紀七八十年代了,C++,Java里也都有類似的實現,Python里的實現很簡單。

unittest在python里主要的實現方式是TestCase,TestSuite。用法還是例子起步。

復制代碼代碼如下:

from widget import Widget

import unittest

# 執(zhí)行測試的類

class WidgetTestCase(unittest.TestCase):

def setUp(self):

self.widget = Widget()

def tearDown(self):

self.widget.dispose()

self.widget = None

def testSize(self):

self.assertEqual(self.widget.getSize(), (40, 40))

def testResize(self):

self.widget.resize(100, 100)

self.assertEqual(self.widget.getSize(), (100, 100))

# 測試

if __name__ == "__main__":

# 構造測試集

suite = unittest.TestSuite()

suite.addTest(WidgetTestCase("testSize"))

suite.addTest(WidgetTestCase("testResize"))

# 執(zhí)行測試

runner = unittest.TextTestRunner()

runner.run(suite)

簡單的說,1構造TestCase(測試用例),其中的setup和teardown負責預處理和善后工作。2構造測試集,添加用例3執(zhí)行測試需要說明的是測試方法,在Python中有N多測試函數,主要的有:

TestCase.assert_(expr[, msg])

TestCase.failUnless(expr[, msg])

TestCase.assertTrue(expr[, msg])

TestCase.assertEqual(first, second[, msg])

TestCase.failUnlessEqual(first, second[, msg])

TestCase.assertNotEqual(first, second[, msg])

TestCase.failIfEqual(first, second[, msg])

TestCase.assertAlmostEqual(first, second[, places[, msg]])

TestCase.failUnlessAlmostEqual(first, second[, places[, msg]])

TestCase.assertNotAlmostEqual(first, second[, places[, msg]])

TestCase.failIfAlmostEqual(first, second[, places[, msg]])

TestCase.assertRaises(exception, callable, ...)

TestCase.failUnlessRaises(exception, callable, ...)

TestCase.failIf(expr[, msg])

TestCase.assertFalse(expr[, msg])

TestCase.fail([msg])

Python 編寫并測試函數change(str1),其功能是對參數str1進行大小寫轉換?

def change(str1):

new_str = str()

for i in range(len(str1)):

if(65 = ord(str1[i]) = 90):

a = str1[i].lower()

print(a,end='')

elif(97 = ord(str1[i]) = 122):

a = str1[i].upper()

print(a,end='')

else:

a = str1[i]

print(a,end='')

return new_str

str2 = str(input("要轉換的字符串:"))

print(change(str2))

python測試函數有哪些

測試函數是用于自動化測試,使用python模塊中的unittest中的工具來測試

附上書中摘抄來的代碼:

#coding=utf-8import unittestfrom name_function import get_formatted_nameclass NamesTestCase(unittest.TestCase): def test_first_last_name(self): formatted_name=get_formatted_name('janis','joplin') self.assertEqual(formatted_name,'Janis Joplin') def test_first_last_middle_name(self): formatted_name=get_formatted_name('wolfgang','mozart','amadeus') self.assertEqual(formatted_name,'Wolfgang Amadeus Mozart')#注意下面這行代碼,不寫會報錯哦~~~書中沒有這行if __name__=="__main__": unittest.main()

用python單元測試怎么測一段代碼

單元測試是用來對一個模塊、一個函數或者一個類來進行正確性檢驗的測試工作。

比如對函數abs(),我們可以編寫出以下幾個測試用例:

輸入正數,比如1、1.2、0.99,期待返回值與輸入相同;

輸入負數,比如-1、-1.2、-0.99,期待返回值與輸入相反;

輸入0,期待返回0;

輸入非數值類型,比如None、[]、{},期待拋出TypeError。

把上面的測試用例放到一個測試模塊里,就是一個完整的單元測試。

如果單元測試通過,說明我們測試的這個函數能夠正常工作。如果單元測試不通過,要么函數有bug,要么測試條件輸入不正確,總之,需要修復使單元測試能夠通過。

單元測試通過后有什么意義呢?如果我們對abs()函數代碼做了修改,只需要再跑一遍單元測試,如果通過,說明我們的修改不會對abs()函數原有的行為造成影響,如果測試不通過,說明我們的修改與原有行為不一致,要么修改代碼,要么修改測試。

這種以測試為驅動的開發(fā)模式最大的好處就是確保一個程序模塊的行為符合我們設計的測試用例。在將來修改的時候,可以極大程度地保證該模塊行為仍然是正確的。

我們來編寫一個Dict類,這個類的行為和dict一致,但是可以通過屬性來訪問,用起來就像下面這樣:

d = Dict(a=1, b=2)

d['a']

1

d.a

1

mydict.py代碼如下:

class Dict(dict):

def __init__(self, **kw):

super(Dict, self).__init__(**kw)

def __getattr__(self, key):

try:

return self[key]

except KeyError:

raise AttributeError(r"'Dict' object has no attribute '%s'" % key)

def __setattr__(self, key, value):

self[key] = value

為了編寫單元測試,我們需要引入Python自帶的unittest模塊,編寫mydict_test.py如下:

import unittest

from mydict import Dict

class TestDict(unittest.TestCase):

def test_init(self):

d = Dict(a=1, b='test')

self.assertEquals(d.a, 1)

self.assertEquals(d.b, 'test')

self.assertTrue(isinstance(d, dict))

def test_key(self):

d = Dict()

d['key'] = 'value'

self.assertEquals(d.key, 'value')

def test_attr(self):

d = Dict()

d.key = 'value'

self.assertTrue('key' in d)

self.assertEquals(d['key'], 'value')

def test_keyerror(self):

d = Dict()

with self.assertRaises(KeyError):

value = d['empty']

def test_attrerror(self):

d = Dict()

with self.assertRaises(AttributeError):

value = d.empty

編寫單元測試時,我們需要編寫一個測試類,從unittest.TestCase繼承。

以test開頭的方法就是測試方法,不以test開頭的方法不被認為是測試方法,測試的時候不會被執(zhí)行。

對每一類測試都需要編寫一個test_xxx()方法。由于unittest.TestCase提供了很多內置的條件判斷,我們只需要調用這些方法就可以斷言輸出是否是我們所期望的。最常用的斷言就是assertEquals():

self.assertEquals(abs(-1), 1) # 斷言函數返回的結果與1相等

另一種重要的斷言就是期待拋出指定類型的Error,比如通過d['empty']訪問不存在的key時,斷言會拋出KeyError:

with self.assertRaises(KeyError):

value = d['empty']

而通過d.empty訪問不存在的key時,我們期待拋出AttributeError:

with self.assertRaises(AttributeError):

value = d.empty

運行單元測試

一旦編寫好單元測試,我們就可以運行單元測試。最簡單的運行方式是在mydict_test.py的最后加上兩行代碼:

if __name__ == '__main__':

unittest.main()

這樣就可以把mydict_test.py當做正常的python腳本運行:

$ python mydict_test.py

另一種更常見的方法是在命令行通過參數-m unittest直接運行單元測試:

$ python -m unittest mydict_test

.....

----------------------------------------------------------------------

Ran 5 tests in 0.000s

OK

這是推薦的做法,因為這樣可以一次批量運行很多單元測試,并且,有很多工具可以自動來運行這些單元測試。

setUp與tearDown

可以在單元測試中編寫兩個特殊的setUp()和tearDown()方法。這兩個方法會分別在每調用一個測試方法的前后分別被執(zhí)行。

setUp()和tearDown()方法有什么用呢?設想你的測試需要啟動一個數據庫,這時,就可以在setUp()方法中連接數據庫,在tearDown()方法中關閉數據庫,這樣,不必在每個測試方法中重復相同的代碼:

class TestDict(unittest.TestCase):

def setUp(self):

print 'setUp...'

def tearDown(self):

print 'tearDown...'

可以再次運行測試看看每個測試方法調用前后是否會打印出setUp...和tearDown...。

新聞名稱:測試函數python代碼的簡單介紹
本文鏈接:http://muchs.cn/article36/doeospg.html

成都網站建設公司_創(chuàng)新互聯,為您提供動態(tài)網站、商城網站、網站設計公司、ChatGPT、虛擬主機、網頁設計公司

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯

成都app開發(fā)公司