前面已經(jīng)講過如何運(yùn)行測試用例,不管用哪種方式忽冻,都可以支持這些運(yùn)行參數(shù)惦银。
你可以通過-h
或--help
查看所有的命令望蜡,包含了所有插件的:
pytest --version # 顯示 pytest 的版本
pytest -h | --help
1. 查找用例
模塊或目錄
pytest 除了參數(shù)以外绒窑,在 pytest 后面沒有跟任何參數(shù)的字符串都會認(rèn)為是文件或者目錄棕孙,會去這些指定的目錄或文件中查找用例。
pytest tests test_login.py ../flow/test_flow.py
這里 pytest 會去查找當(dāng)前目錄下的
tests
子目錄些膨,當(dāng)前目錄下的test_login.py
蟀俊,上級目錄下的flow
目錄中的test_flow.py
。會找到所有這些目錄或文件中符合條件的測試用例订雾。你可以使用下面的--collect-only
來檢驗一下肢预。
--collect-only
此參數(shù)展示當(dāng)前 pytest 能找到的用例,也就是說直接根據(jù)當(dāng)前參數(shù)配置洼哎,能找到的用例列表烫映。用于檢驗運(yùn)行的用例是否符合你的預(yù)期。
注意噩峦,這里只是列出會運(yùn)行的用例锭沟,但是不會實際運(yùn)行。
-k
篩選用例
-k
可以讓你使用表達(dá)式來指定希望運(yùn)行的測試用例识补「郧眨可以用 and
,or
李请,not
連接符,模糊匹配文件名厉熟、類名和函數(shù)名导盅。
pytest -k "str or Add and not list" --collect-only
匹配名稱包含 str 或者 Add 且 不包含 list 的文件、類揍瑟、及函數(shù)白翻。如果用上面的例子,這里就只會找到兩個函數(shù):
注意這里有個坑,千萬不要用單引號滤馍,一定要用雙引號包裹表達(dá)式岛琼。
-m 標(biāo)記
標(biāo)記markers
用于標(biāo)記測試并分組,以便快速選中某些需要的用例并運(yùn)行巢株。比如我們在冒煙測試時運(yùn)行其中某一部分用例槐瑞,bvt 測試時運(yùn)行另一部分用例「蟀可以通過@pytest.mark.標(biāo)記名
來標(biāo)記這些需要的用例困檩,運(yùn)行時用-m 標(biāo)記
就能快速選出這部分用例運(yùn)行。
@pytest.mark.bvt # => 給函數(shù)加上標(biāo)記
def test_int():
"""測試整型"""
a, b = 1, 2
assert add(a, b) == 3
運(yùn)行時:
pytest -m bvt
標(biāo)記名可以自己隨意加那槽,但是加上后會有警告信息悼沿。可以使用 pytest 的配置文件配置這些標(biāo)記骚灸。在測試目錄下新建一個
pytest.ini
糟趾,這是一個文本文件,并加入如下內(nèi)容甚牲。[pytest] markers=smoke:冒煙測試用例 bvt: bvt 測試用例 online: 正式環(huán)境運(yùn)行的用例
關(guān)于配置文件
pytest.ini
后面開專門的文章來講解
2. 控制運(yùn)行過程
Pytest 自帶的這些控制運(yùn)行命令可能并不常用义郑,而最常用的應(yīng)該是由失敗重試插件提供的遇到用例失敗重試的命令。
失敗重試需要插件
pip install pytest-rerunfailures
pytest --reruns=3 # 用例失敗重新運(yùn)行3次
以下是 pytest 自帶的運(yùn)行控制命令:
-x, --exitfirst
遇到失敗停止
正常情況下鳖藕,一個用例失敗后魔慷,會繼續(xù)運(yùn)行后續(xù)用例 ,直到所有用例運(yùn)行完為止著恩。-x
參數(shù)會讓整個測試在遇到第一次失敗就停止院尔。這取決于你有沒有這樣的需要,一般來說可能用不上喉誊。
--maxfail=num
遇到多少次失敗就停止
與上面-x
一樣邀摆,不過-x
是遇到第一次失敗就停止。而--maxfail
可以指定遇到幾個測試用例失敗就停止伍茄。
pytest --maxfail=3 # 遇到三次用例失敗就停止
-lf, --last-failed
當(dāng)一個或多個用例失敗后栋盹,定位到最后一個失敗的用例重新運(yùn)行,后續(xù)用例會停止運(yùn)行敷矫。
-ff, --failed-first
與-lf
查不多例获,失敗后會定位最后一個失敗的用例重新弄運(yùn)行,但是會運(yùn)行完剩余的用例曹仗。
3. 結(jié)果展示
-s, --capture=method
顯示標(biāo)準(zhǔn)輸出
默認(rèn)情況下你在用例中寫的print
或者log
輸出榨汤,都不會在測試結(jié)果中展示。如果你想看到用例中的標(biāo)準(zhǔn)輸出怎茫,那么需要加上-s
參數(shù)收壕。
-v, --verbose
更詳細(xì)的結(jié)果
使用-v
會讓輸出結(jié)果更詳細(xì),不用的時候一個文件占一行蜜宪,而用例之后一個用例占結(jié)果的一行虫埂。并且結(jié)果中的用例名稱和結(jié)果都會展示,而不僅僅是一個.
或字符圃验。
-q, --quiet
簡略的結(jié)果
與-v
相反掉伏,-q
會輸出更簡化的信息。
-l, --showlocals
顯示變量
使用-l
會展示運(yùn)行過程中的全局變量和局部變量损谦。
測試報告
默認(rèn)情況下岖免,pytest 只有 xml 格式的報告。通過--junit-xml=path
可以輸出 xml 格式的報告照捡。結(jié)合 Jenkins 還是比較直觀颅湘。
但是可能你需要更直觀的 html 測試報告,那么需要使用插件pytest-html
栗精,你可以通過 pip install pytest-html
安裝 闯参。
然后在命令中加上--html=path
:
pytest --html=report.html # 在當(dāng)前目錄生成名為report.html的測試報告
其他還有很多參數(shù),各位可使用 python --help
查詢悲立。這里只是提出一部分較為常用的鹿寨,你把常用的用熟了再去看其他的也就容易懂了。