Python 內置測試(調試)方法
主要介紹Python 內置原生支持的測試模塊:
doctest
doctest 模塊主要是在Python 代碼中將測試參數和預期結果使用文本標記,然後會查找標註的測試塊並執行,執行方式類似於交互式的調試場景;如給定一個輸入,執行被測代碼確認結果是否與預期輸出一致。常見的測試方法和場景如下:
1. 通過確認內置描述文本中的測試實例是否任然可以執行來檢查該模塊(描述或聲明)是否保持更新
2. 通過執行測試文件或測試對象中內置的doctest事例是否符合預期結果做迴歸測試
3. 用來給python包,庫,寫一個輸入輸出的使用教程。當然也要考慮這種“走讀測試”或“可執行的文本說明”是否有必要去做。
- 典型實例:
"""
This is the "example" module.
The example module supplies one function, factorial(). For example,
>>> factorial(5)
120
"""
def factorial(n):
"""Return the factorial of n, an exact integer >= 0.
If the result is small enough to fit in an int, return an int.
Else return a long.
>>> [factorial(n) for n in range(6)]
[1, 1, 2, 6, 24, 120]
>>> [factorial(long(n)) for n in range(6)]
[1, 1, 2, 6, 24, 120]
>>> factorial(30)
265252859812191058636308480000000L
>>> factorial(30L)
265252859812191058636308480000000L
>>> factorial(-1)
Traceback (most recent call last):
...
ValueError: n must be >= 0
Factorials of floats are OK, but the float must be an exact integer:
>>> factorial(30.1)
Traceback (most recent call last):
...
ValueError: n must be exact integer
>>> factorial(30.0)
265252859812191058636308480000000L
It must also not be ridiculously large:
>>> factorial(1e100)
Traceback (most recent call last):
...
OverflowError: n too large
"""
import math
if not n >= 0:
raise ValueError("n must be >= 0")
if math.floor(n) != n:
raise ValueError("n must be exact integer")
if n+1 == n: # catch a value like 1e300
raise OverflowError("n too large")
result = 1
factor = 2
while factor <= n:
result *= factor
factor += 1
return result
if __name__ == "__main__":
import doctest
doctest.testmod()
- 執行方法
1、在cmd或shell 下用python執行:
$ python example.py
2、在第一種執行中,如果測試PASS將沒有任何輸出,如果想要看到所有的輸出打印,則需要加 ‘-v’ 選項
$ python example.py -v
Trying:
factorial(5)
Expecting:
120
ok
Trying:
[factorial(n) for n in range(6)]
Expecting:
[1, 1, 2, 6, 24, 120]
ok
Trying:
[factorial(long(n)) for n in range(6)]
Expecting:
[1, 1, 2, 6, 24, 120]
ok
2.unittest
基於PyUnit,使用Python 寫的JUnit。支持自動化測試,對於每個測試用例或腳本共享SETUP和SHUTDOWN, 支持測試(根據功能模塊或目的劃分的測試用例子集)集管理,測試腳本(用例)執行與測試報告框架是獨立的。提供很多方法類。
unittest包含很多重要的測試概念:
-
測試環境(test fixture):
執行測試用例前需要做的一些準備,或者一些清理。一般包括創建臨時文件,數據,路徑,服務進程,需要的創建,不需要的藥清除。 -
測試用例(腳本)(test case):
最小的測試塊(事務,動作),如檢查特定操作(輸入)後的響應(輸出)。unittest 提供了一個testcase 類可用創建新的testcase -
測試集(test suite):
測試用例的集合,比如完成某個功能模塊必須要(同時)執行的一些測試用例。 -
測試執行者(test runner):
測試執行者(實體) 由執行用例,和提供或輸出測試數據給用戶這兩部分組成。執行者(實體)可以使用圖形界面接口,文本接口,或是通過特殊返回值,提供測試執行的結果