Hello PyUnitTest

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,973評(píng)論 19 139
  • Startup 單元測(cè)試的核心價(jià)值在于兩點(diǎn): 更加精確地定義某段代碼的作用,從而使代碼的耦合性更低 避免程序員寫出...
    wuwenxiang閱讀 10,159評(píng)論 1 27
  • 本書首次探索了游戲化的力量,揭示了互聯(lián)時(shí)代的未來(lái)趨勢(shì),顛覆了普通人對(duì)游戲的認(rèn)知。 核心內(nèi)容這本書分三個(gè)部分,第一部...
    林安福閱讀 339評(píng)論 2 1
  • 哲學(xué)特別是包含道德與倫理的社會(huì)哲學(xué),其偉大之處在于把模糊的東西做成清晰的學(xué)說(shuō),它定義錯(cuò)誤與正確,甚至罪惡與美好,這...
    粲月閱讀 187評(píng)論 0 0
  • 什么是url?? url是uniform resource location的縮寫,具體意思為統(tǒng)一資源定位符,是互...
    losspm閱讀 237評(píng)論 0 0