當前位置:首頁 » 編程語言 » pythonunittest教程

pythonunittest教程

發布時間: 2022-07-09 10:12:12

python+unittest介面自動化執行多條測試用例怎麼實現

我的理解是,如果都在一個class裡面,確實是需要 def test_xxx 20個的,也可以直接把所有的用例寫到一個def test_xx裡面的,如果前面的操作步驟一樣的話,這兩個的差距不大的

❷ python中的unittest有什麼作用

python中unittest模塊是用來做單元測試的。

unittest是一個python版本的junit,junit是java中的單元測試框架,對java的單元測試,有一句話很貼切:Keep thebar green,相信使用eclipse寫過java單元測試的都心領神會。unittest實現了很多junit中的概念,比如我們非常熟悉的test case, test suite等,總之,原理都是相通的,只是用不同的語言表達出來。

下面是一個例子

importrandom
importunittest

classTestSequenceFunctions(unittest.TestCase):

defsetUp(self):
self.seq=range(10)

deftest_shuffle(self):
#
random.shuffle(self.seq)
self.seq.sort()
self.assertEqual(self.seq,range(10))

#
self.assertRaises(TypeError,random.shuffle,(1,2,3))

deftest_choice(self):
element=random.choice(self.seq)
self.assertTrue(elementinself.seq)

deftest_sample(self):
withself.assertRaises(ValueError):
random.sample(self.seq,20)
forelementinrandom.sample(self.seq,5):
self.assertTrue(elementinself.seq)

if__name__=='__main__':
unittest.main()

❸ python如何開展單元測試

首先你要知道單元測試是什麼,單元測試就是針對軟體中的最小可測試單元進行檢查和驗證,在python中可以理解為是對類或者是方法的正確性驗證
其次要了解python語言中的單元測試框架有哪些,在python語言中的單元測試框架也有很多,解釋本身自帶的unittest單元測試框架,還有很流行的pytest(有豐富的插件),這些在我之前在黑馬程序員學習測試時都有涉及,或者你可以去看論壇上面有很多python開展單元測試的技術文章。
最後使用某個單元測試框架如何實現,拿解釋器自帶的unittest舉例子吧,使用這個框架來實現單元測試的話,需要創建測試類,創建測試方法,設置fixture,斷言,然後通過測試條件和運行器來執行測試用例.其測試數據可以使用參數化動態獲取.

❹ python的unittest模塊能用來做多線程的單元測試嗎

待測試的類(Widget.py)
# Widget.py
# Python 2.7.6

class Widget:
def __init__(self, size = (40,40)):
self.size = size
def getSize(self):
return self.size
def reSize(self,width,height):
if width <0 or height < 0:
raise ValueError, 'illegal size'
else:
self.size = (width,height)
return self.size
def dispose(self):
pass

測試類(Auto.py)

# coding=utf8
# Auto.dy
# Python 2.7.6

from Widget import Widget #導入測試類模塊Widget
import unittest #導入unittest模塊

class WidgetTestCase(unittest.TestCase):
#讓所有執行測試的類都繼承於TestCase類,可以將TestCase看成是對特定類進行測試的方法的集合

#在setUp()方法中進行測試前的初始化工作。
def setUp(self):
self.widget = Widget()

#並在tearDown()方法中執行測試後的清除工作,setUp()和tearDown()都是TestCase類中定義的方法。
def tearDown(self):
self.widget = None

#測試Widget類中getSize方法
def testgetSize(self):
print "Test GetSize"
#對Widget類中getSize()方法的返回值和預期值進行比較,確保兩者是相等的,
#assertEqual()也是TestCase類中定義的方法。
self.assertEqual(self.widget.getSize(), (40, 40))

#測試Widget類中reSize方法
def testreSize(self):
print "Test Resize"
#對Widget類中reSize()方法的返回值和預期值進行比較,確保兩者是相等的。
#assertEqual()也是TestCase類中定義的方法。
self.assertEqual(self.widget.reSize(50,100),(50,100))

#提供名為suite()的全局方法,PyUnit在執行測試的過程調用suit()方法來確定有多少個測試用例需要被執行,
#可以將TestSuite看成是包含所有測試用例的一個容器。
def suite():
suite = unittest.TestSuite()
suite.addTest(WidgetTestCase("testgetSize"))#往此添加需要測試的方法testgetSize()
suite.addTest(WidgetTestCase("testreSize")) #往此添加需要測試的方法testreSize()
return suite

if __name__ == "__main__":
unittest.main(defaultTest = 'suite') #在主函數中調用全局方法.

測試結果:

D:\Python>python27 Auto.py
Test GetSize
.Test Resize
.
------------------------------
Ran 2 tests in 0.004s

OK

總結:
1。第一步:先寫好測試類
2。第二步:導入unittest模塊及測試的類,運用setup()方法做測試前的准備工作,如建立資料庫連接,運用teardown()方法做測試後的清除工作,如取消資料庫的鏈接,再對類中的方法逐一做測試。
3。第三步: 寫suite()的全局方法,將要測試的方法,一一加入。
測試結果,有幾個測試用例就有幾個. 最後顯示OK,表示通過。

❺ python單元測試引入unittest模塊後一個類裡麵包含多個方法怎麼只讓setUp、方法只執行一次

不是有一個全局的setup和teardonw嗎
@classmethod
def tearDownClass(cls): # 必須使用 @ classmethod裝飾器, 所有test運行完後運行一次
print('4444444')
@classmethod
def setUpClass(cls): # 必須使用@classmethod 裝飾器,所有test運行前運行一次
print('33333')

❻ 如何用python unittest去測試c#的介面

1.首先使用 python 的 requests 對介面進行測試

[python] view plain
# TestInface.py
import requests,json
url = visit.get_test_url()
news_url = url+'news.info'
headers = baseToken.basetoken_datas()['headers']
def new_data(data):

r = requests.post(news_url,data=data,headers=headers)
cnn = json.loads(r.text)
return cnn

2.使用unittest調用介面,且對介面測試的結果進行統計

[python] view plain
# TestCase.py
# -*- coding:utf-8 -*-
import unittest
import TestInface

# 對執行的case結果進行統計
# ---------------------------------------------------------------------------------------------------------------------
text = ""
num_success = 0
num_fail = 0

# 測試通過
def decide_success(joggle):
global num_success
num_success += 1
print_out(joggle + ":介面測試通過\n")
return num_success

# 測試不通過
def decide_fail(txt, joggle):
global num_fail
num_fail += 1
print_out(joggle + ":介面測試未通過 \n錯誤信息: " + txt + "\n")
return num_fail

# 郵件內容寫入 & 客戶端輸出
def print_out(message):
global text
text += "\n" + message
return text

# 返回值判斷
def decide_result(result, code, joggle):
if result['code'] == code:
decide_success(joggle)
return "pass"
else:
txt = u"期望返回值:" + str(code) + u" 實際返回值:" + str(result) + '\n' + result['message']
decide_fail(txt, joggle)
return "fail"

def decide_Count():
data = {
'num_success': num_success,
'num_fail': num_fail,
'text': text
}
return data
# --------------------------------------------------------------------------------------------------------------------
# 定義 unittest
class MyTestCase(unittest.TestCase):

# 初始化工作
def setUp(self):
pass

# 退出清理工作
def tearDown(self):
pass
def test_Case1(self):
id = 16
data = {'id':id}
a = TestInface.new_data(data)
decide_result(a,0,'test_Case1')

3.使用suite對case進行管理

[python] view plain
# TestSuite.py
# -*- coding:utf-8 -*-
import unittest
import TestCase

def test_InterFace():

# 構造測試集
suite = unittest.TestSuite()
suite.addTest(TestCase("test_Case1")) # unittest中的測試用例

runner = unittest.TextTestRunner()
runner.run(suite)
#對測試集進行測試需要返回值
# return suite

if __name__ == '__main__':

# unittest.main(defaultTest='test_InterFace')
# 執行測試
runner = unittest.TextTestRunner()
runner.run(test_InterFace())

4.對介面的數據進行統計

[python] view plain
# TestCensus.py
# -*- coding:utf-8 -*-
import time
import TestSuite
import send_email
import TestCase

class Test_Calss():

def census(self):
text = ''
# 初始化測試起始時間
start_time = time.time()
# 調用suite測試集
TestSuite.test_InterFace()
# 結束執行時間計算
end_time = time.time()

result = TestCase.decide_Count()
# 介面測試統計說明
total_use_case = u"執行用例總數:" + str(result['num_success'] + result['num_fail']) + \
u"\t通過數:" + str(result['num_success']) + \
u"\t不通過數:" + str(result['num_fail'])
total_time = u"\t總共耗時:" + str(round((end_time - start_time), 3)) + u'秒'
text = result['text'] + total_use_case + total_time
print (text)

# 發生測試報告郵件
send_email.email_file(text)

if __name__ == '__main__':
Test_Calss().census()
[python] view plain
<pre code_snippet_id="2001712" snippet_file_name="blog_20161123_4_8691238"></pre><pre code_snippet_id="2001712" snippet_file_name="blog_20161123_1_3110897" name="code" class="python"><pre code_snippet_id="2001712" snippet_file_name="blog_20161123_1_3110897" name="code" class="python"><pre code_snippet_id="2001712" snippet_file_name="blog_20161123_1_3110897" name="code" class="python"><pre code_snippet_id="2001712" snippet_file_name="blog_20161123_1_3110897" name="code" class="python"><pre code_snippet_id="2001712" snippet_file_name="blog_20161123_1_3110897" name="code" class="python"><pre code_snippet_id="2001712" snippet_file_name="blog_20161123_1_3110897"></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<link rel="stylesheet" href="http://static.blog.csdn.net/public/res-min/markdown_views.css?v=1.0">
</pre></pre></pre></pre></pre>

❼ 如何使用python編寫測試腳本

1)doctest
使用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
# 執行測試的類
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"))

# 執行測試
runner = unittest.TextTestRunner()
runner.run(suite)

簡單的說,1>構造TestCase(測試用例),其中的setup和teardown負責預處理和善後工作。2>構造測試集,添加用例3>執行測試需要說明的是測試方法,在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 的 unittest

是需要重載setup 和teardown與before,after的用法一致。
setup建立數據環境
teardown清理自己留下的垃圾尾巴。

通常我們在setup里將資料庫刪除重新建立,
teardown里把整個兒庫再刪除。

❾ python unittest單元測試框架中,如何對一個testcase參數化,具體如何實現

#首先pyunit不像junit一樣支持參數化測試。。。不過不是不能實現,只是pyunit的作者想讓#這個東西變得盡量簡單。所以不去實現。當然這個pyhon語言足夠動態,你可以自己去實現

#外部輸入參數測試。

importunittest
classParametrizedTestCase(unittest.TestCase):
"""
inheritfromthisclass.
"""
def__init__(self,methodName='runTest',param=None):
super(ParametrizedTestCase,self).__init__(methodName)
self.param=param
@staticmethod
defparametrize(testcase_klass,param=None):
"""
subclass,passingthemtheparameter'param'.
"""
testloader=unittest.TestLoader()
testnames=testloader.getTestCaseNames(testcase_klass)
suite=unittest.TestSuite()
fornameintestnames:
suite.addTest(testcase_klass(name,param=param))
returnsuite


#####################################################

##用法-testcase
classTestOne(ParametrizedTestCase):
deftest_something(self):
print'param=',self.param
self.assertEqual(1,1)

deftest_something_else(self):
self.assertEqual(2,2)

##用法-測試
suite=unittest.TestSuite()
suite.addTest(ParametrizedTestCase.parametrize(TestOne,param=42))
suite.addTest(ParametrizedTestCase.parametrize(TestOne,param=13))
unittest.TextTestRunner(verbosity=2).run(suite)

#結果
test_something(__main__.TestOne)...param=42
ok
test_something_else(__main__.TestOne)...ok
test_something(__main__.TestOne)...param=13
ok
test_something_else(__main__.TestOne)...ok

----------------------------------------------------------------------
Ran4testsin0.000s

OK

當然最好的方法就是用別人寫的東西。。。

https://github.com/taykey/nose-ittr

這個拿去,不謝

熱點內容
滑板鞋腳本視頻 發布:2025-02-02 09:48:54 瀏覽:432
群暉怎麼玩安卓模擬器 發布:2025-02-02 09:45:23 瀏覽:557
三星安卓12彩蛋怎麼玩 發布:2025-02-02 09:44:39 瀏覽:743
電腦顯示連接伺服器錯誤 發布:2025-02-02 09:24:10 瀏覽:537
瑞芯微開發板編譯 發布:2025-02-02 09:22:54 瀏覽:146
linux虛擬機用gcc編譯時顯示錯誤 發布:2025-02-02 09:14:01 瀏覽:235
java駝峰 發布:2025-02-02 09:13:26 瀏覽:651
魔獸腳本怎麼用 發布:2025-02-02 09:10:28 瀏覽:538
linuxadobe 發布:2025-02-02 09:09:43 瀏覽:212
sql2000資料庫連接 發布:2025-02-02 09:09:43 瀏覽:726