注冊 | 登錄讀書好,好讀書,讀好書!
讀書網(wǎng)-DuShu.com
當前位置: 首頁出版圖書科學技術(shù)計算機/網(wǎng)絡(luò)軟件與程序設(shè)計Python測試驅(qū)動開發(fā):使用Django Selenium和JavaScript進行Web編程

Python測試驅(qū)動開發(fā):使用Django Selenium和JavaScript進行Web編程

Python測試驅(qū)動開發(fā):使用Django Selenium和JavaScript進行Web編程

定 價:¥119.00

作 者: [英] 哈利·帕西瓦爾(Harry J.W. Percival) 著,安道 譯
出版社: 人民郵電出版社
叢編項:
標 簽: 暫缺

ISBN: 9787115485571 出版時間: 2018-07-01 包裝: 平裝
開本: 16開 頁數(shù): 454 字數(shù):  

內(nèi)容簡介

  本書從基礎(chǔ)的知識開始,講解Web開發(fā)的整個流程,展示如何使用Python做測試驅(qū)動開發(fā)。本書由三個部分組成。第一部分介紹了測試驅(qū)動開發(fā)和Django的基礎(chǔ)知識,并在每個階段進行嚴格的單元測試。第二部分討論了Web開發(fā)要素,探討了Web開發(fā)過程中不可避免的問題,以及如何通過測試解決這些問題。第三部分探討了一些話題,如模擬技術(shù)、集成第三方認證系統(tǒng)、Ajax、測試固件以及持續(xù)集成等。第2版全部使用Python 3,并針對新版Django全面升級,介紹了由外而內(nèi)的測試驅(qū)動開發(fā)流程。本書適合Web開發(fā)人員閱讀。

作者簡介

  哈利·J.W. 帕西瓦爾(Harry J.W. Percival),TDD積極踐行者,曾參與開發(fā)電子制作表軟件先驅(qū)Resolver One;目前jiu職于PythonAnywhere公司,經(jīng)常受邀參加TDD和Python開發(fā)主題演講、研討會;取得了利物浦大學計算機科學碩士學位和劍橋大學哲學碩士學位。

圖書目錄

前言 xv
準備工作和應(yīng)具備的知識 xxi
配套視頻 xxviii
致謝 xxix
第 一部分 TDD和Django基礎(chǔ)
第 1章 使用功能測試協(xié)助安裝Django 2
1.1 遵從測試山羊的教誨,沒有測試什么也別做 2
1.2 讓Django運行起來 4
1.3 創(chuàng)建Git倉庫 6
第 2 章 使用unittest模塊擴展功能測試 10
2.1 使用功能測試驅(qū)動開發(fā)一個最簡可用的應(yīng)用 10
2.2 Python標準庫中的unittest模塊 12
2.3 提交 14
第3章 使用單元測試測試簡單的首頁 16
3.1 第 一個Django應(yīng)用,第 一個單元測試 16
3.2 單元測試及其與功能測試的區(qū)別 17
3.3 Django中的單元測試 18
3.4 Django中的MVC、URL和視圖函數(shù) 19
3.5 終于可以編寫一些應(yīng)用代碼了 20
3.6 urls.py 22
3.7 為視圖編寫單元測試 23
第4章 測試(及重構(gòu))的目的 28
4.1 編程就像從井里打水 28
4.2 使用Selenium測試用戶交互 30
4.3 遵守“不測試常量”規(guī)則,使用模板解決這個問題 32
4.3.1 使用模板重構(gòu) 33
4.3.2 Django測試客戶端 35
4.4 關(guān)于重構(gòu) 37
4.5 接著修改首頁 38
4.6 總結(jié):TDD流程 39
第5章 保存用戶輸入:測試數(shù)據(jù)庫 42
5.1 編寫表單,發(fā)送POST請求 42
5.2 在服務(wù)器中處理POST請求 45
5.3 把Python變量傳入模板中渲染 46
5.4 事不過三,三則重構(gòu) 50
5.5 Django ORM和第 一個模型 51
5.5.1 第 一個數(shù)據(jù)庫遷移 53
5.5.2 測試向前走得挺遠 53
5.5.3 添加新字段就要創(chuàng)建新遷移 54
5.6 把POST請求中的數(shù)據(jù)存入數(shù)據(jù)庫 55
5.7 處理完P(guān)OST請求后重定向 57
5.8 在模板中渲染待辦事項 59
5.9 使用遷移創(chuàng)建生產(chǎn)數(shù)據(jù)庫 61
5.10 回顧 64
第6章 改進功能測試:確保隔離,去掉含糊的休眠 66
6.1 確保功能測試之間相互隔離 66
6.2 升級Selenium和Geckodriver 70
6.3 隱式等待、顯式等待和含糊的time.sleep 70
第7章 步步為營 75
7.1 必要時做少量的設(shè)計 75
7.1.1 不要預先做大量設(shè)計 75
7.1.2 YAGNI 76
7.1.3 REST(式) 76
7.2 使用TDD實現(xiàn)新設(shè)計 77
7.3 確保出現(xiàn)回歸測試 78
7.4 逐步迭代,實現(xiàn)新設(shè)計 80
7.5 自成一體的第 一步:新的URL 81
7.5.1 一個新URL 82
7.5.2 一個新視圖函數(shù) 82
7.6 變綠了嗎?該重構(gòu)了 84
7.7 再邁一小步:一個新模板,用于查看清單 84
7.8 第三小步:用于添加待辦事項的URL 86
7.8.1 用來測試新建清單的測試類 87
7.8.2 用于新建清單的URL和視圖 88
7.8.3 刪除當前多余的代碼和測試 89
7.8.4 出現(xiàn)回歸!讓表單指向剛添加的新URL 89
7.9 下定決心,調(diào)整模型 90
7.9.1 外鍵關(guān)系 92
7.9.2 根據(jù)新模型定義調(diào)整其他代碼 93
7.10 每個列表都應(yīng)該有自己的URL 95
7.10.1 捕獲URL中的參數(shù) 96
7.10.2 按照新設(shè)計調(diào)整new_list視圖 97
7.11 功能測試又檢測到回歸 98
7.12 還需要一個視圖,把待辦事項加入現(xiàn)有清單 99
7.12.1 小心霸道的正則表達式 99
7.12.2 最后一個新URL 100
7.12.3 最后一個新視圖 101
7.12.4 直接測試響應(yīng)上下文對象 102
7.13 使用URL引入做最后一次重構(gòu) 103
第二部分 Web 開發(fā)要素
第8章 美化網(wǎng)站:布局、樣式及其測試方法 108
8.1 如何在功能測試中測試布局和樣式 108
8.2 使用CSS框架美化網(wǎng)站 111
8.3 Django模板繼承 112
8.4 集成Bootstrap 114
8.5 Django中的靜態(tài)文件 115
8.6 使用Bootstrap中的組件改進網(wǎng)站外觀 117
8.6.1 超大文本塊 118
8.6.2 大型輸入框 118
8.6.3 樣式化表格 118
8.7 使用自己編寫的CSS 118
8.8 補遺:collectstatic命令和其他靜態(tài)目錄 120
8.9 沒談到的話題 122
第9章 使用過渡網(wǎng)站測試部署 123
9.1 TDD以及部署的危險區(qū)域 124
9.2 一如既往,先寫測試 125
9.3 注冊域名 127
9.4 手動配置托管網(wǎng)站的服務(wù)器 127
9.4.1 選擇在哪里托管網(wǎng)站 127
9.4.2 搭建服務(wù)器 128
9.4.3 用戶賬戶、SSH和權(quán)限 128
9.4.4 安裝Nginx 128
9.4.5 安裝Python 3.6 129
9.4.6 解析過渡環(huán)境和線上環(huán)境所用的域名 130
9.4.7 使用功能測試確認域名可用而且Nginx正在運行 130
9.5 手動部署代碼 130
9.5.1 調(diào)整數(shù)據(jù)庫的位置 131
9.5.2 手動創(chuàng)建虛擬環(huán)境,使用requirements.txt 133
9.5.3 簡單配置Nginx 134
9.5.4 使用遷移創(chuàng)建數(shù)據(jù)庫 136
9.6 手動部署大功告成 137
第 10章 為部署到生產(chǎn)環(huán)境做好準備 139
10.1 換用Gunicorn 139
10.2 讓Nginx伺服靜態(tài)文件 140
10.3 換用Unix套接字 141
10.4 把DEBUG設(shè)為False,設(shè)置ALLOWED_HOSTS 142
10.5 使用Systemd確保引導時啟動Gunicorn 143
10.6 考慮自動化 144
10.7 保存進度 147
第 11章 使用Fabric自動部署 148
11.1 分析一個Fabric部署腳本 149
11.1.1 分析一個Fabric部署腳本 149
11.1.2 使用Git拉取源碼 150
11.1.3 更新settings.py 151
11.1.4 更新虛擬環(huán)境 151
11.1.5 需要時遷移數(shù)據(jù)庫 152
11.2 試用部署腳本 152
11.2.1 部署到線上服務(wù)器 154
11.2.2 使用sed配置Nginx和Gunicorn 155
11.3 使用Git標簽標注發(fā)布狀態(tài) 157
11.4 延伸閱讀 157
第 12章 輸入驗證和測試的組織方式 159
12.1 針對驗證的功能測試:避免提交空待辦事項 159
12.1.1 跳過測試 160
12.1.2 把功能測試分拆到多個文件中 161
12.1.3 運行單個測試文件 163
12.2 功能測試新工具:通用顯式等待輔助方法 164
12.3 補完功能測試 167
12.4 重構(gòu)單元測試,分拆成多個文件 168
第 13章 數(shù)據(jù)庫層驗證 171
13.1 模型層驗證 172
13.1.1 self.a(chǎn)ssertRaises上下文管理器 172
13.1.2 Django怪異的表現(xiàn):保存時不驗證數(shù)據(jù) 173
13.2 在視圖中顯示模型驗證錯誤 173
13.3 Django模式:在渲染表單的視圖中處理POST請求 177
13.3.1 重構(gòu):把new_item實現(xiàn)的功能移到view_list中 178
13.3.2 在view_list視圖中執(zhí)行模型驗證 180
13.4 重構(gòu):去除硬編碼的URL 182
13.4.1 模板標簽{% url %} 182
13.4.2 重定向時使用get_absolute_url 183
第 14章 簡單的表單 186
14.1 把驗證邏輯移到表單中 186
14.1.1 使用單元測試探索表單API 187
14.1.2 換用Django中的ModelForm類 188
14.1.3 測試和定制表單驗證 189
14.2 在視圖中使用這個表單 191
14.2.1 在處理GET請求的視圖中使用這個表單 191
14.2.2 大量查找和替換 192
14.3 在處理POST請求的視圖中使用這個表單 194
14.3.1 修改new_list視圖的單元測試 195
14.3.2 在視圖中使用這個表單 196
14.3.3 使用這個表單在模板中顯示錯誤消息 196
14.4 在其他視圖中使用這個表單 197
14.4.1 定義輔助方法,簡化測試 197
14.4.2 意想不到的好處:HTML5自帶的客戶端驗證 199
14.5 值得鼓勵 201
14.6 這難道不是浪費時間嗎 201
14.7 使用表單自帶的save方法 202
第 15章 高級表單 205
15.1 針對重復待辦事項的功能測試 205
15.1.1 在模型層禁止重復 206
15.1.2 題外話:查詢集合排序和字符串表示形式 208
15.1.3 重寫舊模型測試 210
15.1.4 保存時確實會顯示完整性錯誤 211
15.2 在視圖層試驗待辦事項重復驗證 212
15.3 處理唯一性驗證的復雜表單 213
15.4 在清單視圖中使用ExistingListItemForm 215
15.5 小結(jié):目前所學的Django測試知識 217
第 16章 試探JavaScript 219
16.1 從功能測試開始 219
16.2 安裝一個基本的JavaScript測試運行程序 221
16.3 使用jQuery和固件元素 223
16.4 為想要實現(xiàn)的功能編寫JavaScript單元測試 225
16.5 固件、執(zhí)行順序和全局狀態(tài):JavaScript測試的重大挑戰(zhàn) 227
16.5.1 使用console.log打印調(diào)試信息 227
16.5.2 使用初始化函數(shù)精確控制執(zhí)行時 229
16.6 經(jīng)驗做法:onload樣板代碼和命名空間 230
16.7 JavaScript測試在TDD循環(huán)中的位置 232
16.8 一些缺憾 232
第 17章 部署新代碼 234
17.1 部署到過渡服務(wù)器 234
17.2 部署到線上服務(wù)器 235
17.3 如果看到數(shù)據(jù)庫錯誤該怎么辦 235
17.4 總結(jié):為這次新發(fā)布打上Git標簽 235
第三部分 高級話題
第 18章 用戶身份驗證、探究及去掉探究代碼 238
18.1 無密碼驗證 238
18.2 探索性編程(又名“探究”) 239
18.2.1 為此次探究新建一個分支 239
18.2.2 前端登錄UI 240
18.2.3 從Django中發(fā)出郵件 240
18.2.4 使用環(huán)境變量,避免源碼中出現(xiàn)機密信息 242
18.2.5 在數(shù)據(jù)庫中存儲令牌 243
18.2.6 自定義身份驗證模型 243
18.2.7 結(jié)束自定義Django身份驗證功能 224
18.3 去掉探究代碼 248
18.4 一個極簡的自定義用戶模型 251
18.5 令牌模型:把電子郵件地址與唯一的ID關(guān)聯(lián)起來 254
第 19章 使用馭件測試外部依賴或減少重復 257
19.1 開始之前布好基本管道 257
19.2 自己動手模擬(打猴子補?。?58
19.3 Python的模擬庫 261
19.3.1 使用unittest.patch 261
19.3.2 讓測試向前邁一小步 263
19.3.3 測試Django消息框架 263
19.3.4 在HTML中添加消息 265
19.3.5 構(gòu)建登錄URL 266
19.3.6 確認給用戶發(fā)送了帶有令牌的鏈接 267
19.4 去除自定義的身份驗證后端中的探究代碼 269
19.4.1 一個if語句需要一個測試 269
19.4.2 get_user方法 272
19.4.3 在登錄視圖中使用自定義的驗證后端 273
19.5 使用馭件的另一個原因:減少重復 274
19.5.1 使用馭件的返回值 277
19.5.2 在類一級上打補丁 278
19.6 關(guān)鍵時刻:功能測試能通過嗎 279
19.7 理論上正常,那么實際呢 281
19.8 完善功能測試,測試退出功能 283
第 20章 測試固件和一個顯式等待裝飾器 285
20.1 事先創(chuàng)建好會話,跳過登錄過程 285
20.2 顯式等待輔助方法最終版:wait裝飾器 290
第 21章 服務(wù)器端調(diào)試技術(shù) 293
21.1 實踐是檢驗真理的唯一標準:在過渡服務(wù)器中捕獲最后的問題 293
21.2 在服務(wù)器上通過環(huán)境變量設(shè)定機密信息 295
21.3 調(diào)整功能測試,以便通過POP3測試真實的電子郵件 296
21.4 在過渡服務(wù)器中管理測試數(shù)據(jù)庫 299
21.4.1 創(chuàng)建會話的Django管理命令 300
21.4.2 讓功能測試在服務(wù)器上運行管理命令 301
21.4.3 直接在Python代碼中使用Fabric 302
21.4.4 回顧:在本地服務(wù)器和過渡服務(wù)器中創(chuàng)建會話的方式 303
21.5 集成日志相關(guān)的代碼 304
21.6 小結(jié) 305
第 22章 完成“My Lists”頁面:由外而內(nèi)的TDD 306
22.1 對立技術(shù):“由內(nèi)而外” 306
22.2 為什么選擇使用“由外而內(nèi)” 307
22.3 “My Lists”頁面的功能測試 307
22.4 外層:表現(xiàn)層和模板 309
22.5 下移一層到視圖函數(shù)(控制器) 309
22.6 使用由外而內(nèi)技術(shù),再讓一個測試通過 310
22.6.1 快速重組模板的繼承層級 311
22.6.2 使用模板設(shè)計API 311
22.6.3 移到下一層:視圖向模板中傳入什么 313
22.7 視圖層的下一個需求:新建清單時應(yīng)該記錄屬主 313
22.8 下移到模型層 315
第 23章 測試隔離和“傾聽測試的心聲” 319
23.1 重溫抉擇時刻:視圖層依賴于尚未編寫的模型代碼 319
23.2 首先嘗試使用馭件實現(xiàn)隔離 320
23.3 傾聽測試的心聲:丑陋的測試表明需要重構(gòu) 323
23.4 以完全隔離的方式重寫視圖測試 323
23.4.1 為了新測試的健全性,保留之前的整合測試組件 324
23.4.2 完全隔離的新測試組件 324
23.4.3 站在協(xié)作者的角度思考問題 324
23.5 下移到表單層 329
23.6 下移到模型層 332
23.7 關(guān)鍵時刻,以及使用模擬技術(shù)的風險 335
23.8 把層與層之間的交互當作“合約” 336
23.8.1 找出隱形合約 337
23.8.2 修正由于疏忽導致的問題 338
23.9 還缺一個測試 339
23.10 清理:保留哪些整合測試 340
23.10.1 刪除表單層多余的代碼 340
23.10.2 刪除以前實現(xiàn)的視圖 341
23.10.3 刪除視圖層多余的代碼 342
23.11 總結(jié):什么時候編寫隔離測試,什么時候編寫整合測試 343
23.11.1 以復雜度為準則 344
23.11.2 兩種測試都要寫嗎 344
23.11.3 繼續(xù)前行 344
第 24章 持續(xù)集成 346
24.1 安裝Jenkins 346
24.2 配置Jenkins 347
24.2.1 首次解鎖 348
24.2.2 現(xiàn)在建議安裝的插件 348
24.2.3 配置管理員用戶 348
24.2.4 添加插件 350
24.2.5 告訴Jenkins到哪里尋找Python 3和Xvfb 350
24.2.6 設(shè)置HTTPS 351
24.3 設(shè)置項目 351
24.4 第 一次構(gòu)建 352
24.5 設(shè)置虛擬顯示器,讓功能測試能在無界面的環(huán)境中運行 354
24.6 截圖 356
24.7 如有疑問,增加超時試試 359
24.8 使用PhantomJS運行QUnit JavaScript測試 359
24.8.1 安裝node 359
24.8.2 在Jenkins中添加構(gòu)建步驟 361
24.9 CI服務(wù)器能完成的其他操作 362
第 25章 簡單的社會化功能、頁面模式以及練習 363
25.1 有多個用戶以及使用addCleanup的功能測試 363
25.2 頁面模式 365
25.3 擴展功能測試測試第二個用戶和“My Lists”頁面 367
25.4 留給讀者的練習 368
第 26章 測試運行速度的快慢和熾熱的巖漿 371
26.1 正題:單元測試除了運行速度超快之外還有其他優(yōu)勢 372
26.1.1 測試運行得越快,開發(fā)速度越快 372
26.1.2 神賜的心流狀態(tài) 372
26.1.3 經(jīng)常不想運行速度慢的測試,導致代碼變壞 373
26.1.4 現(xiàn)在還行,不過隨著時間推移,整合測試會變得越來越慢 373
26.1.5 別只聽我一個人說 373
26.1.6 單元測試能驅(qū)使我們實現(xiàn)好的設(shè)計 373
26.2 純粹的單元測試有什么問題 373
26.2.1 隔離的測試難讀也難寫 373
26.2.2 隔離測試不會自動測試集成情況 374
26.2.3 單元測試幾乎不能捕獲意料之外的問題 374
26.2.4 使用馭件的測試可能和實現(xiàn)方式聯(lián)系緊密 374
26.2.5 這些問題都可以解決 374
26.3 合題:我們到底想從測試中得到什么 374
26.3.1 正確性 374
26.3.2 簡潔可維護的代碼 375
26.3.3 高效的工作流程 375
26.3.4 根據(jù)所需的優(yōu)勢評估測試 375
26.4 架構(gòu)方案 375
26.4.1 端口和適配器(或六邊形、簡潔)架構(gòu) 376
26.4.2 函數(shù)式核心,命令式外殼 377
26.5 小結(jié) 377
遵從測試山羊的教誨 379
附錄A PythonAnywhere 381
附錄B 基于類的Django 視圖 385
附錄C 使用Ansible 配置服務(wù)器 394
附錄D 測試數(shù)據(jù)庫遷移 398
附錄E 行為驅(qū)動開發(fā) 403
附錄F 構(gòu)建一個REST API:JSON、Ajax 和JavaScript 模擬技術(shù) 416
附錄G Django-Rest-Framework 433
附錄H 速查表 443
附錄I 接下來做什么 447
附錄J 示例源碼 451
參考書目 453
作者簡介 454
封面介紹 454

本目錄推薦

掃描二維碼
Copyright ? 讀書網(wǎng) ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號 鄂公網(wǎng)安備 42010302001612號