PyUnitTest是什么
作為標(biāo)準(zhǔn)python中的一個模塊笼平,是其它框架和工具的基礎(chǔ)咙俩,參考資料是它的官方文檔:http://docs.python.org/2.7/library/unittest.html和源代碼,文檔已經(jīng)寫的非常好了,我在這里記錄的主要是它的一些重要概念、關(guān)鍵點以及可能會碰到的一些坑,目的在于對unittest加深理解酵熙,而不是停留在泛泛的表面層上。
unittest是一個python版本的junit弯淘,junit是java中的單元測試框架绿店,對java的單元測試,有一句話很貼切:Keep the bar green庐橙,相信使用eclipse寫過java單元測試的都心領(lǐng)神會假勿。unittest實現(xiàn)了很多junit中的概念,比如我們非常熟悉的test case, test suite等态鳖,總之转培,原理都是相通的,只是用不同的語言表達(dá)出來浆竭。
這里吐槽一下浸须,我其實是想研究Appium對移動端的自動化測試惨寿,結(jié)果發(fā)現(xiàn)Appium是基于selenium發(fā)展過來的,Python調(diào)用selenium自動化測試有比較詳細(xì)的文檔删窒,而Appium文檔實在是太少太少裂垦,于是我就順著Appium看到了selenium〖∷鳎看著看著發(fā)現(xiàn)蕉拢,要執(zhí)行selenium的自動化測試,必須要了解測試框架诚亚。于是又開始研究這個Python的unittest測試框架晕换。
第一個例子
程序語言都喜歡使用helloworld來開始,這個框架我們也使用這個來作例子吧站宗。
# -*- coding: utf-8 -*-
import unittest
def hello():
return "hello world"
class testNum(unittest.TestCase):
def testHello(self):
self.assertEqual("hello world",hello())
if __name__ == '__main__':
unittest.main()
上面是一個很簡單的測試?yán)诱⒆肌_\行的結(jié)果如下:
.
----------------------------------------------------------------------
Ran 1 tests in 0.000s
OK
[Finished in 0.1s]
我們來分析一下這個代碼
# -*- coding: utf-8 -*-
import unittest
編碼類型使用UTF8,引用unittest模塊梢灭,unittest是Python自帶的模塊夷家,無需另外安裝
def hello():
return "hello world"
功能函數(shù),返回hello world或辖,也是我們的被測試函數(shù)
class testNum(unittest.TestCase):
def testHello(self):
self.assertEqual("hello world",hello())
測試函數(shù)瘾英,繼承unittest.TestCase枣接。里面所有的測試案例都使用test開頭颂暇,里面的方法self.assertEqual()表示斷言兩個值相等比如調(diào)用hello()函數(shù),我們得到的結(jié)果就是hello world但惶。和我們給的預(yù)期值相同耳鸯。運行結(jié)果就是成功。如果運行失敗膀曾,會顯示下面的東西
F
======================================================================
FAIL: testHello (__main__.testNum)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Users/svenweng/Desktop/Development/unittest/testcal.py", line 21, in testHello
self.assertEqual("hello word",hello())
AssertionError: 'hello word' != 'hello world'
----------------------------------------------------------------------
Ran 1 tests in 0.000s
FAILED (failures=1)
[Finished in 0.1s with exit code 1]
[shell_cmd: python -u "/Users/svenweng/Desktop/Development/unittest/testcal.py"]
[dir: /Users/svenweng/Desktop/Development/unittest]
[path: /usr/bin:/bin:/usr/sbin:/sbin]
錯誤提示很明確县爬。AssertionError: 'hello word' != 'hello world'
其他方法
assertEqual(a, b) a == b
assertNotEqual(a, b) a != b
assertTrue(x) bool(x) is True
assertFalse(x) bool(x) is False
assertIs(a, b) a is b 2.7
assertIsNot(a, b) a is not b 2.7
assertIsNone(x) x is None 2.7
assertIsNotNone(x) x is not None 2.7
assertIn(a, b) a in b 2.7
assertNotIn(a, b) a not in b 2.7
assertIsInstance(a, b) isinstance(a, b) 2.7
assertNotIsInstance(a, b) not isinstance(a, b) 2.7