PyUnitTest是什么
作為標(biāo)準(zhǔn)python中的一個(gè)模塊,是其它框架和工具的基礎(chǔ),參考資料是它的官方文檔:http://docs.python.org/2.7/library/unittest.html和源代碼,文檔已經(jīng)寫的非常好了,我在這里記錄的主要是它的一些重要概念、關(guān)鍵點(diǎn)以及可能會(huì)碰到的一些坑,目的在于對(duì)unittest加深理解,而不是停留在泛泛的表面層上。
unittest是一個(gè)python版本的junit,junit是java中的單元測(cè)試框架,對(duì)java的單元測(cè)試,有一句話很貼切:Keep the bar green,相信使用eclipse寫過(guò)java單元測(cè)試的都心領(lǐng)神會(huì)。unittest實(shí)現(xiàn)了很多junit中的概念,比如我們非常熟悉的test case, test suite等,總之,原理都是相通的,只是用不同的語(yǔ)言表達(dá)出來(lái)。
這里吐槽一下,我其實(shí)是想研究Appium對(duì)移動(dòng)端的自動(dòng)化測(cè)試,結(jié)果發(fā)現(xiàn)Appium是基于selenium發(fā)展過(guò)來(lái)的,Python調(diào)用selenium自動(dòng)化測(cè)試有比較詳細(xì)的文檔,而Appium文檔實(shí)在是太少太少,于是我就順著Appium看到了selenium。看著看著發(fā)現(xiàn),要執(zhí)行selenium的自動(dòng)化測(cè)試,必須要了解測(cè)試框架。于是又開(kāi)始研究這個(gè)Python的unittest測(cè)試框架。
第一個(gè)例子
程序語(yǔ)言都喜歡使用helloworld來(lái)開(kāi)始,這個(gè)框架我們也使用這個(gè)來(lái)作例子吧。
# -*- 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()
上面是一個(gè)很簡(jiǎn)單的測(cè)試?yán)印_\(yùn)行的結(jié)果如下:
.
----------------------------------------------------------------------
Ran 1 tests in 0.000s
OK
[Finished in 0.1s]
我們來(lái)分析一下這個(gè)代碼
# -*- coding: utf-8 -*-
import unittest
編碼類型使用UTF8,引用unittest模塊,unittest是Python自帶的模塊,無(wú)需另外安裝
def hello():
return "hello world"
功能函數(shù),返回hello world,也是我們的被測(cè)試函數(shù)
class testNum(unittest.TestCase):
def testHello(self):
self.assertEqual("hello world",hello())
測(cè)試函數(shù),繼承unittest.TestCase。里面所有的測(cè)試案例都使用test開(kāi)頭,里面的方法self.assertEqual()表示斷言兩個(gè)值相等比如調(diào)用hello()函數(shù),我們得到的結(jié)果就是hello world。和我們給的預(yù)期值相同。運(yùn)行結(jié)果就是成功。如果運(yùn)行失敗,會(huì)顯示下面的東西
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]
錯(cuò)誤提示很明確。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