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