一、前言
doctest從字面意思上看,那就是文檔測試。doctest是python里面自帶的一個模塊,它實際上是單元測試的一種。
官方解釋:doctest 模塊會搜索那些看起來像交互式會話的 Python 代碼片段,然后嘗試執(zhí)行并驗證結果
doctest測試用例可以放在兩個地方
- 函數(shù)或者方法下的注釋里面
- 模塊的開頭
二、案例
先看第一個案例,將需要測試的片段,標準格式,需要運行的代碼前面加>>> ,相當于進入cmd這種交互環(huán)境執(zhí)行,期望的結果前面不需要加 >>>
>>> multiply(4, 3)
12
>>> multiply('a', 3)
'aaa'
放到multiply函數(shù)的注釋里
def multiply(a, b):
"""
fuction: 兩個數(shù)相乘
>>> multiply(4, 3)
12
>>> multiply('a', 3)
'aaa'
"""
return a * b
if __name__ == '__main__':
import doctest
doctest.testmod(verbose=True)
運行結果
Trying:
multiply(4, 3)
Expecting:
12
ok
Trying:
multiply('a', 3)
Expecting:
'aaa'
ok
1 items had no tests:
__main__
1 items passed all tests:
2 tests in __main__.multiply
2 tests in 2 items.
2 passed and 0 failed.
Test passed.
從運行的結果可以看出,雖然函數(shù)下方的注釋里面有其它內(nèi)容“fuction: 兩個數(shù)相乘”,但不會去執(zhí)行,只識別“>>>”這種符號。2個測試用例都是通過的,實際的結果與期望的結果一致
三、失敗案例
doctest的內(nèi)容放到.py模塊的開頭也是可以識別到的
# 保存為xxx.py
'''
fuction: 兩個數(shù)相乘
>>> multiply(4, 8)
12
>>> multiply('a', 5)
'aaa'
'''
def multiply(a, b):
"""
fuction: 兩個數(shù)相乘
"""
return a * b
if __name__ == '__main__':
import doctest
doctest.testmod(verbose=True)
運行結果2個都失敗
**********************************************************************
1 items had failures:
2 of 2 in __main__
2 tests in 2 items.
0 passed and 2 failed.
***Test Failed*** 2 failures.
verbose參數(shù),設置為True則在執(zhí)行測試的時候會輸出詳細信息
四、cmd執(zhí)行
以上案例是在編輯器直接運行的,如果在cmd里面,也可以用指令去執(zhí)行
$ python -m doctest -v xxx.py
m 參數(shù)指定運行方式doctest
-v參數(shù)是verbose,帶上-v參數(shù)相當于verbose=True
五、pytest運行
pytest框架是可以兼容doctest用例,執(zhí)行的時候加個參數(shù) —doctest-modules ,這樣它就能自動搜索到doctest的用例
$ pytest -v —doctest-modules xxx.py
如下是函數(shù)下的文檔
?fuction: 兩個數(shù)相乘
>>> multiply(4, 3)
12
>>> multiply('a', 5)
'aaa'
?運行結果
D:\test1122\a>pytest -v --doctest-modules xxx.py
============================= test session starts =============================
platform win32 -- Python 3.6.0, pytest-3.6.3, py-1.5.4, pluggy-0.6.0 -- d:\soft\
python3.6\python.exe
cachedir: .pytest_cache
metadata: {'Python': '3.6.0', 'Platform': 'Windows-7-6.1.7601-SP1', 'Packages':
{'pytest': '3.6.3', 'py': '1.5.4', 'pluggy': '0.6.0'}, 'Plugins': {'metadata': '
1.7.0', 'html': '1.19.0', 'allure-adaptor': '1.7.10'}, 'JAVA_HOME': 'D:\\soft\\j
dk18\\jdk18v'}
rootdir: D:\test1122\a, inifile:
plugins: metadata-1.7.0, html-1.19.0, allure-adaptor-1.7.10
collected 1 item
xxx.py::xxx.multiply FAILED [100%]
================================== FAILURES ===================================
___________________________ [doctest] xxx.multiply ____________________________
004
005 fuction: 兩個數(shù)相乘
006 >>> multiply(4, 3)
007 12
008 >>> multiply('a', 5)
Expected:
'aaa'
Got:
'aaaaa'
D:\test1122\a\xxx.py:8: DocTestFailure
========================== 1 failed in 0.16 seconds ===========================
結果可以看出,文檔里面的每一行都被執(zhí)行了,當遇到測試不通過的用例時,就不會繼續(xù)往下執(zhí)行了
六、doctest獨立文件
doctest內(nèi)容也可以和代碼抽離開,單獨用一個.txt文件保存
在當前xxx.py同一目錄新建一個xxx.txt文件,寫入測試的文檔,要先導入該功能,導入代碼前面也要加 >>>
>>> from xxx import multiply
>>> multiply(4, 3)
12
>>> multiply('a', 3)
'aaa'
?cmd執(zhí)行“python -m doctest -v xxx.txt測試結果
>python -m doctest -v xxx.txt
Trying:
from xxx import multiply
Expecting nothing
ok
Trying:
multiply(4, 3)
Expecting:
12
ok
Trying:
multiply('a', 3)
Expecting:
'aaa'
ok
1 items passed all tests:
3 tests in xxx.txt
3 tests in 1 items.
3 passed and 0 failed.
Test passed.
最后感謝每一個認真閱讀我文章的人,禮尚往來總是要有的,雖然不是什么很值錢的東西,如果你用得到的話可以直接拿走:
【軟件測試技術交流(資料分享)】:320231853(備注C)http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=VhgK91CsO3OcxW86SoFS1zYSMHCtLapU&authKey=t1D%2F3BhXbUcLKimCIzg91AXnhvhU0RvSTRQDRzK3JcwlXtJFCQFyiaGK0cYZBI5v&noverify=0&group_code=320231853
生命不息,奮斗不止。每一份努力都不會被辜負,只要堅持不懈,終究會有回報。珍惜時間,追求夢想。不忘初心,砥礪前行。你的未來,由你掌握!
生命短暫,時間寶貴,我們無法預知未來會發(fā)生什么,但我們可以掌握當下。珍惜每一天,努力奮斗,讓自己變得更加強大和優(yōu)秀。堅定信念,執(zhí)著追求,成功終將屬于你!文章來源:http://www.zghlxwxcb.cn/news/detail-505100.html
只有不斷地挑戰(zhàn)自己,才能不斷地超越自己。堅持追求夢想,勇敢前行,你就會發(fā)現(xiàn)奮斗的過程是如此美好而值得。相信自己,你一定可以做到!文章來源地址http://www.zghlxwxcb.cn/news/detail-505100.html
到了這里,關于從0到1精通自動化測試,pytest自動化測試框架,doctest測試框架(十四)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!