pytest是動(dòng)態(tài)編程語言Python專用的測(cè)試框架,它具有易于上手、功能強(qiáng)大、第三方插件豐富、效率高、可擴(kuò)展性好、兼容性強(qiáng)等特點(diǎn)!秔ytest測(cè)試實(shí)戰(zhàn)》深入淺出地講解了pytest的使用方法,尤其是具有特色的fixture的用法。作者通過豐富的測(cè)試實(shí)例,手把手教讀者編寫簡(jiǎn)潔、易于維護(hù)的測(cè)試代碼和插件,讓你輕松掌握這個(gè)業(yè)界受歡迎的Python測(cè)試工具。
pytest是一款強(qiáng)大的Python測(cè)試工具,可以勝任各種類型或級(jí)別的軟件測(cè)試工作,既適合開發(fā)團(tuán)隊(duì)、QA團(tuán)隊(duì)、獨(dú)立的測(cè)試小組使用,又適合練習(xí)測(cè)試驅(qū)動(dòng)開發(fā)的個(gè)人,以及開源團(tuán)隊(duì)使用。實(shí)際上,越來越多的互聯(lián)網(wǎng)項(xiàng)目開始放棄unittest和nose,轉(zhuǎn)而使用pytest,比如Mozilla和Dropbox。因?yàn)閜ytest會(huì)提供更豐富的功能,包括assert重寫、第三方插件,以及其他測(cè)試工具無法比擬的fixture模型。 pytest是一個(gè)軟件測(cè)試框架。它是一款命令行工具,可以自動(dòng)找到測(cè)試用例執(zhí)行,并且匯報(bào)測(cè)試結(jié)果。它有豐富的基礎(chǔ)庫,可以大幅提高用戶編寫測(cè)試用例的效率。它具備可擴(kuò)展性,用戶可以自己編寫插件,或者安裝第三方提供的插件。pytest可以直接測(cè)試各類Python程序,也可以很容易地與其他工具集成到一起使用,比如持續(xù)集成、Web端自動(dòng)化測(cè)試等。 下面列舉了一些pytest優(yōu)于其他測(cè)試框架的地方。? 簡(jiǎn)單的測(cè)試可以很簡(jiǎn)單地編寫;? 復(fù)雜的測(cè)試也可以很簡(jiǎn)單地編寫;? 測(cè)試的可讀性強(qiáng);? 易于上手;? 斷言測(cè)試失敗僅使用原生assert關(guān)鍵字,而不是self.assertEqual(),或者self.assertLessThan();? pytest可以運(yùn)行由unittest和nose編寫的測(cè)試用例。
Brian Okken是一位有二十多年工作經(jīng)驗(yàn)的軟件測(cè)試工程師,他業(yè)余時(shí)間錄制了Test & Code和Python Bytes兩個(gè)播客。
第1章 pytest入門 1
1.1 資源獲取 4
1.2 運(yùn)行Pytest 5
1.3 運(yùn)行單個(gè)測(cè)試用例 10
1.4 使用命令行選項(xiàng) 10
--collect-only選項(xiàng) 11
-k選項(xiàng) 11
-m選項(xiàng) 12
-x選項(xiàng) 13
--maxfail=num 15
-s與--capture=method 16
--lf(--last-failed)選項(xiàng) 16
--ff(--failed-first)選項(xiàng) 17
-v(--verbose)選項(xiàng) 17
-q(--quiet)選項(xiàng) 18
-l(--showlocals)選項(xiàng) 19
--tb=style選項(xiàng) 20
--duration=N選項(xiàng) 21
--version選項(xiàng) 22
-h(--help)選項(xiàng) 23
1.5 練習(xí) 24
1.6 預(yù)告 25
第2章 編寫測(cè)試函數(shù) 27
2.1 測(cè)試示例程序 27
本地安裝Tasks項(xiàng)目程序包 30
2.2 使用assert聲明 32
2.3 預(yù)期異常 35
2.4 測(cè)試函數(shù)的標(biāo)記 36
完善冒煙測(cè)試 38
2.5 跳過測(cè)試 40
2.6 標(biāo)記預(yù)期會(huì)失敗的測(cè)試 43
2.7 運(yùn)行測(cè)試子集 45
單個(gè)目錄 45
單個(gè)測(cè)試文件/模塊 46
單個(gè)測(cè)試函數(shù) 47
單個(gè)測(cè)試類 47
單個(gè)測(cè)試類中的測(cè)試方法 48
用測(cè)試名劃分測(cè)試集合 48
2.8 參數(shù)化測(cè)試 49
2.9 練習(xí) 56
2.10
預(yù)告 57
第3章 pytest Fixture 59
3.1 通過conftest.py共享fixture 60
3.2 使用fixture執(zhí)行配置及銷毀邏輯 61
3.3 使用--setup-show回溯fixture的執(zhí)行過程 63
3.4 使用fixture傳遞測(cè)試數(shù)據(jù) 64
3.5 使用多個(gè)fixture
66
3.6 指定fixture作用范圍 68
修改Tasks項(xiàng)目的fixture作用范圍 70
3.7 使用usefixtures指定fixture 73
3.8 為常用fixture添加autouse選項(xiàng) 74
3.9 為fixture重命名 75
3.10
Fixture的參數(shù)化 77
3.11
參數(shù)化Tasks項(xiàng)目中的fixture 80
3.12
練習(xí) 83
3.13
預(yù)告 83
第4章 內(nèi)置Fixture 85
4.1 使用tmpdir和tmpdir_factory
86
在其他作用范圍內(nèi)使用臨時(shí)目錄 88
4.2 使用pytestconfig
90
4.3 使用cache 92
4.4 使用capsys 100
4.5 使用monkeypatch
102
4.6 使用doctest_namespace
106
4.7 使用recwarn 109
4.8 練習(xí) 110
4.9 預(yù)告 111
第5章 插件 113
5.1 尋找插件 114
5.2 安裝插件 114
從PyPI安裝 114
從PyPI安裝指定版本 115
從.tar.gz或.whl文件安裝 115
從本地目錄安裝 115
從Git存儲(chǔ)倉庫安裝 116
5.3 編寫自己的插件 116
5.4 創(chuàng)建可安裝插件 121
5.5 測(cè)試插件 125
5.6 創(chuàng)建發(fā)布包 129
通過共享目錄分發(fā)插件 130
通過PyPI發(fā)布插件 130
5.7 練習(xí) 131
5.8 預(yù)告 131
第6章 配置 133
6.1 理解pytest的配置文件 133
用pytest --help查看ini文件選項(xiàng) 135
插件可以添加ini文件選項(xiàng) 135
6.2 更改默認(rèn)命令行選項(xiàng) 136
6.3 注冊(cè)標(biāo)記來防范拼寫錯(cuò)誤
136
6.4 指定pytest的最低版本號(hào) 138
6.5 指定pytest忽略某些目錄 138
6.6 指定測(cè)試目錄 139
6.7 更改測(cè)試搜索的規(guī)則 141
6.8 禁用XPASS 142
6.9 避免文件名沖突 143
6.10
練習(xí) 145
6.11 預(yù)告 145
第7章 pytest與其他工具的搭配使用
147
7.1
pdb:調(diào)試失敗的測(cè)試用例 147
7.2
coverage.py:判斷測(cè)試覆蓋了多少代碼 151
7.3
mock:替換部分系統(tǒng) 155
7.4
tox:測(cè)試多種配置 162
7.5
Jenkins CI:讓測(cè)試自動(dòng)化 166
7.6
unittest:用pytest運(yùn)行歷史遺留測(cè)試用例 173
7.7 練習(xí) 179
7.8 預(yù)告 180
附錄A 虛擬環(huán)境 181
附錄B Pip 183
附錄C 常用插件 187
C.1 改變測(cè)試流程的插件 187
pytest-repeat:重復(fù)運(yùn)行測(cè)試 187
pytest-xdist:并行運(yùn)行測(cè)試 189
pytest-timeout:為測(cè)試設(shè)置時(shí)間限制
190
C.2 改善輸出效果的插件 191
pytest-instafail:查看錯(cuò)誤的詳細(xì)信息
191
pytest-sugar:顯示色彩和進(jìn)度條 192
pytest-emoji:為測(cè)試增添一些樂趣 193
pytest-html:為測(cè)試生成HTML報(bào)告 195
C.3 靜態(tài)分析用的插件 197
pytest-pycodestyle和pytest-pep8:Python代碼風(fēng)格檢查 197
pytest-flake8:更多的風(fēng)格檢查 197
C.4
Web開發(fā)用的插件 198
pytest-selenium:借助瀏覽器完成自動(dòng)化測(cè)試
198
pytest-django:測(cè)試Django應(yīng)用 198
pytest-flask:測(cè)試Flask應(yīng)用 199
附錄D 打包和發(fā)布Python項(xiàng)目 201
D.1 創(chuàng)建可安裝的模塊 201
D.2 創(chuàng)建可安裝的包 203
D.3 創(chuàng)建源碼發(fā)布包和Wheel文件 205
D.4 創(chuàng)建可以從PyPI安裝的包 209
附錄E xUnit Fixture 211
E.1
xUnit Fixture的語法 211
E.2 混合使用pytest
Fixture和xUnit Fixture 214
E.3
xUnit Fixture的限制 215
索引 216