日韩偷拍一区二区,国产香蕉久久精品综合网,亚洲激情五月婷婷,欧美日韩国产不卡

在線客服
Python Web開發(fā) 測試驅(qū)動方法圖書
人氣:24

Python Web開發(fā) 測試驅(qū)動方法

全新正版圖書
  • 所屬分類:圖書 >計算機/網(wǎng)絡(luò)>計算機教材  
  • 作者:[英] [珀西瓦爾]([Harry] [J.W]. [Percival])
  • 產(chǎn)品參數(shù):
  • 叢書名:--
  • 國際刊號:9787115403271
  • 出版社:人民郵電出版社
  • 出版時間:2015-10
  • 印刷時間:2015-10-01
  • 版次:1
  • 開本:16開
  • 頁數(shù):236
  • 紙張:膠版紙
  • 包裝:平裝-膠訂
  • 套裝:

內(nèi)容簡介

本書從基礎(chǔ)的知識開始,講解Web開發(fā)的整個流程,展示如何使用Python做測試驅(qū)動開發(fā)。本書由三個部分組成。介紹了測試驅(qū)動開發(fā)和Django的基礎(chǔ)知識。第二部分討論了Web開發(fā)要素,探討了Web開發(fā)過程中不可避免的問題,及如何通過測試解決這些問題。第三部分探討了一些高級話題,如模擬技術(shù)、集成第三方插件、Ajax、測試固件、持續(xù)集成等。本書適合Web開發(fā)人員閱讀。

編輯推薦

本書手把手教你從頭開始開發(fā)一個真正的Web應(yīng)用,并且展示使用Python做測試驅(qū)動開發(fā)(TDD)的優(yōu)勢。你將學(xué)到如何在開發(fā)應(yīng)用的每一個部分之前先編寫和運行測試,然后再編寫少量的代碼讓測試通過。也就是說,你將學(xué)會應(yīng)用TDD理念,寫出簡潔可用、賞心悅目的代碼。

在這個過程中,你還將學(xué)到Django、Selenium、Git、jQuery和Mock的基礎(chǔ)知識,以及其他當(dāng)前流行的Web開發(fā)技術(shù)。如果你準(zhǔn)備提升自己的Python技能,本書將清楚地演示如何使用TDD實現(xiàn)簡單的設(shè)計。

通過閱讀本書,你將:

深入分析TDD流程,包括"單元測試/編寫代碼"循環(huán)和重構(gòu);

使用單元測試檢查類和函數(shù),使用功能測試檢查瀏覽器中的用戶交互;

學(xué)習(xí)何時以及如何使用模擬對象,以及隔離測試和整合測試的優(yōu)缺點;

在過渡服務(wù)器中測試和自動部署;

測試網(wǎng)站中集成的第三方插件;

使用持續(xù)集成環(huán)境自動運行測試。

作者簡介

Harry J.W. Percival目前就職于PythonAnywhere LLP公司,他在各種演講、研討會和開發(fā)者大會上積極推廣TDD。他在利物浦大學(xué)獲得計算機科學(xué)碩士學(xué)位,在劍橋大學(xué)獲得哲學(xué)碩士學(xué)位。

目錄

及時部分 TDD 和Django 基礎(chǔ)

第1章 使用功能測試協(xié)助安裝Django 3

1.1 遵從測試山羊的教誨,沒有測試什么也別做 3

1.2 讓Django運行起來 6

1.3 創(chuàng)建Git倉庫 7

第2章 使用unittest模塊擴展功能測試 11

2.1 使用功能測試驅(qū)動開發(fā)一個最簡可用的應(yīng)用 11

2.2 Python標(biāo)準(zhǔn)庫中的unittest模塊 14

2.3 隱式等待 16

2.4 提交 16

第3章 使用單元測試測試簡單的首頁 18

3.1 及時個Django應(yīng)用,及時個單元測試 19

3.2 單元測試及其與功能測試的區(qū)別 19

3.3 Django中的單元測試 20

3.4 Django中的MVC、URL 和視圖函數(shù) 21

3.5 終于可以編寫一些應(yīng)用代碼了 22

3.6 urls.py 24

3.7 為視圖編寫單元測試 27

第4章 編寫這些測試有什么用 31

4.1 編程就像從井里打水 31

4.2 使用Selenium測試用戶交互 33

4.3 遵守"不測試常量"規(guī)則,使用模板解決這個問題 35

4.4 關(guān)于重構(gòu) 39

4.5 接著修改首頁 40

4.6 總結(jié):TDD流程 42

第5章 保存用戶輸入 45

5.1 編寫表單,發(fā)送POST請求 45

5.2 在服務(wù)器中處理POST請求 48

5.3 把Python變量傳入模板中渲染 49

5.4 事不過三,三則重構(gòu) 53

5.5 Django ORM和及時個模型 54

5.5.1 及時個數(shù)據(jù)庫遷移 56

5.5.2 測試向前走得挺遠 57

5.5.3 添加新字段就要創(chuàng)建新遷移 57

5.6 把POST請求中的數(shù)據(jù)存入數(shù)據(jù)庫 58

5.7 處理完P(guān)OST請求后重定向 61

5.8 在模板中渲染待辦事項 63

5.9 使用遷移創(chuàng)建生產(chǎn)數(shù)據(jù)庫 65

第6章 完成最簡可用的網(wǎng)站 70

6.1 確保功能測試之間相互隔離 70

6.2 必要時做少量的設(shè)計 74

6.2.1 YAGNI 74

6.2.2 REST 75

6.3 使用TDD 實現(xiàn)新設(shè)計 76

6.4 逐步迭代,實現(xiàn)新設(shè)計 78

6.5 使用Django測試客戶端一起測試視圖、模板和URL 80

6.5.1 一個新測試類 80

6.5.2 一個新URL 81

6.5.3 一個新視圖函數(shù) 81

6.5.4 一個新模板,用于查看清單 82

6.6 用于添加待辦事項的URL和視圖 85

6.6.1 用來測試新建清單的測試類 85

6.6.2 用于新建清單的URL和視圖 86

6.6.3 刪除當(dāng)前多余的代碼和測試 88

6.6.4 讓表單指向剛添加的新URL 88

6.7 調(diào)整模型 89

6.7.1 通過外鍵實現(xiàn)的關(guān)聯(lián) 91

6.7.2 根據(jù)新模型定義調(diào)整其他代碼 92

6.8 每個列表都應(yīng)該有自己的URL 94

6.8.1 捕獲URL中的參數(shù) 95

6.8.2 按照新設(shè)計調(diào)整new_list視圖 96

6.9 還需要一個視圖,把待辦事項加入現(xiàn)有清單 97

6.9.1 小心霸道的正則表達式 98

6.9.2 一個新URL 98

6.9.3 一個新視圖 99

6.9.4 如何在表單中使用那個URL 100

6.10 使用URL 引入做一次重構(gòu) 102

第二部分 Web開發(fā)要素

第7章 美化網(wǎng)站:布局、樣式及其測試方法 106

7.1 如何在功能測試中測試布局和樣式 106

7.2 使用CSS框架美化網(wǎng)站 109

7.3 Django模板繼承 111

7.4 集成Bootstrap 112

7.5 Django中的靜態(tài)文件 114

7.6 使用Bootstrap中的組件改進網(wǎng)站外觀 116

7.6.1 超大文本塊 116

7.6.2 大型輸入框 116

7.6.3 樣式化表格 117

7.7 使用自己編寫的CSS 117

7.8 補遺:collectstatic命令和其他靜態(tài)目錄 118

7.9 沒談到的話題 121

第8章 使用過渡網(wǎng)站測試部署 122

8.1 TDD以及部署的危險區(qū)域 123

8.2 一如既往,先寫測試 124

8.3 注冊域名 126

8.4 手動配置托管網(wǎng)站的服務(wù)器 126

8.4.1 選擇在哪里托管網(wǎng)站 127

8.4.2 搭建服務(wù)器 127

8.4.3 用戶賬戶、SSH和權(quán)限 128

8.4.4 安裝Nginx 128

8.4.5 解析過渡環(huán)境和線上環(huán)境所用的域名 129

8.4.6 使用功能測試確認(rèn)域名可用而且Nginx正在運行 130

8.5 手動部署代碼 130

8.5.1 調(diào)整數(shù)據(jù)庫的位置 131

8.5.2 創(chuàng)建虛擬環(huán)境 133

8.5.3 簡單配置Nginx 135

8.5.4 使用遷移創(chuàng)建數(shù)據(jù)庫 137

8.6 為部署到生產(chǎn)環(huán)境做好準(zhǔn)備 138

8.6.1 換用Gunicorn 138

8.6.2 讓Nginx伺服靜態(tài)文件 139

8.6.3 換用Unix套接字 140

8.6.4 把DEBUG設(shè)為False,設(shè)置ALLOWED_HOSTS 141

8.6.5 使用Upstart確保引導(dǎo)時啟動Gunicorn 141

8.6.6 保存改動:把Gunicorn 添加到requirements.txt 142

8.7 自動化 143

第9章 使用Fabric自動部署 147

9.1 分析一個Fabric部署腳本 148

9.2 試用部署腳本 151

9.2.1 部署到線上服務(wù)器 153

9.2.2 使用sed配置Nginx 和Gunicorn 155

9.3 使用Git標(biāo)簽標(biāo)注狀態(tài) 155

9.4 延伸閱讀 156

第10章 輸入驗證和測試的組織方式 158

10.1 針對驗證的功能測試:避免提交空待辦事項 158

10.1.1 跳過測試 159

10.1.2 把功能測試分拆到多個文件中 160

10.1.3 運行單個測試文件 162

10.1.4 填充功能測試 163

10.2 使用模型層驗證 164

10.2.1 重構(gòu)單元測試,分拆成多個文件 164

10.2.2 模型驗證的單元測試和self.assertRaises上下文管理器 165

10.2.3 Django怪異的表現(xiàn):保存時不驗證數(shù)據(jù) 166

10.3 在視圖中顯示模型驗證錯誤 167

10.4 Django模式:在渲染表單的視圖中處理POST 請求 171

10.4.1 重構(gòu):把new_item實現(xiàn)的功能移到view_list 中 172

10.4.2 在view_list 視圖中執(zhí)行模型驗證 174

10.5 重構(gòu):去除硬編碼的URL 176

10.5.1 模板標(biāo)簽{% url %} 176

10.5.2 重定向時使用get_absolute_url 177

第11章 簡單的表單 181

11.1 把驗證邏輯移到表單中 181

11.1.1 使用單元測試探索表單API 182

11.1.2 換用Django中的ModelForm類 183

11.1.3 測試和定制表單驗證 184

11.2 在視圖中使用這個表單 186

11.2.1 在處理GET請求的視圖中使用這個表單 187

11.2.2 大量查找和替換 189

11.3 在處理POST請求的視圖中使用這個表單 191

11.3.1 修改new_list視圖的單元測試 191

11.3.2 在視圖中使用這個表單 192

11.3.3 使用這個表單在模板中顯示錯誤消息 193

11.4 在其他視圖中使用這個表單 194

11.5 使用表單自帶的save方法 196

第12章 高級表單 199

12.1 針對重復(fù)待辦事項的功能測試 199

12.1.1 在模型層禁止重復(fù) 200

12.1.2 題外話:查詢集合排序和字符串表示形式 202

12.1.3 重寫舊模型測試 204

12.1.4 保存時確實會顯示完整性錯誤 205

12.2 在視圖層試驗待辦事項重復(fù)驗證 206

12.3 處理性驗證的復(fù)雜表單 207

12.4 在清單視圖中使用ExistingListItemForm 209

第13章 試探JavaScript 213

13.1 從功能測試開始 213

13.2 安裝一個基本的JavaScript 測試運行程序 214

13.3 使用jQuery 和13.4 為想要實現(xiàn)的功能編寫JavaScript單元測試 219

13.5 JavaScript測試在TDD循環(huán)中的位置 221

13.6 經(jīng)驗做法:onload1樣板代碼和命名空間 222

13.7 一些缺憾 223

第14章 部署新代碼 224

14.1 部署到過渡服務(wù)器 224

14.2 部署到線上服務(wù)器 225

14.3 如果看到數(shù)據(jù)庫錯誤該怎么辦 225

14.4 總結(jié):為這次新打上Git 標(biāo)簽 225

第三部分 高級話題

第15章 用戶認(rèn)證、集成第三方插件以及JavaScript模擬技術(shù)的使用 228

15.1 Mozilla Persona(BrowserID) 229

15.2 探索性編程(又名"探究") 229

15.2.1 為此次探究新建一個分支 230

15.2.2 前端和JavaScript代碼 230

15.2.3 Browser-ID協(xié)議 231

15.2.4 服務(wù)器端:自定義認(rèn)證機制 232

15.3 去掉探究代碼 237

15.3.1 常用Selenium技術(shù):顯式等待 240

15.3.2 刪除探究代碼 241

15.4 涉及外部組件的JavaScript單元測試:首次使用模擬技術(shù) 242

15.4.1 整理:全站共用的靜態(tài)文件夾 242

15.4.2 什么是模擬技術(shù),為什么要模擬,模擬什么 244

15.4.3 命名空間 244

15.4.4 在initialize函數(shù)的單元測試中使用一個簡單的馭件 245

15.4.5 高級模擬技術(shù) 250

15.4.6 檢查參數(shù)的調(diào)用 253

15.4.7 QUnit 中的setup和teardown函數(shù),以及Ajax請求測試 255

15.4.8 深層嵌套回調(diào)函數(shù)和測試異步代碼 259

第16章 服務(wù)器端認(rèn)證,在Python中使用模擬技術(shù) 262

16.1 探究登錄視圖 262

16.2 在Python代碼中使用模擬技術(shù) 263

16.2.1 通過模擬authenticate函數(shù)測試視圖 263

16.2.2 確認(rèn)視圖確實登錄了用戶 266

16.3 模擬網(wǎng)絡(luò)請求,去除自定義認(rèn)證后臺中的探究代碼 270

16.3.1 一個if 語句需要一個測試 270

16.3.2 在類上使用patch修飾器 272

16.3.3 進行布爾值比較時要留意馭件 275

16.3.4 需要時創(chuàng)建用戶 276

16.3.5 get_user方法 277

16.4 一個最簡單的自定義用戶模型 279

16.4.1 稍微有點兒失望 280

16.4.2 把測試當(dāng)作文檔 281

16.4.3 用戶已經(jīng)通過認(rèn)證 282

16.5 關(guān)鍵時刻:功能測試能通過嗎 283

16.6 完善功能測試,測試退出功能 284

第17章 測試固件、日志和服務(wù)器端調(diào)試 287

17.1 事先創(chuàng)建好會話,跳過登錄過程 287

17.2 實踐是檢驗真理的標(biāo)準(zhǔn):在過渡服務(wù)器中捕獲的問題 290

17.2.1 設(shè)置日志 291

17.2.2 修正Persona引起的這個問題 293

17.3 在過渡服務(wù)器中管理測試數(shù)據(jù)庫 295

17.3.1 創(chuàng)建會話的Django管理命令 295

17.3.2 讓功能測試在服務(wù)器上運行管理命令 296

17.3.3 使用subprocess模塊完成額外的工作 298

17.4 集成日志相關(guān)的代碼 301

17.5 小結(jié) 304

第18章 完成"My Lists"頁面:由外而內(nèi)的TDD 305

18.1 對立技術(shù):"由內(nèi)而外" 305

18.2 為什么選擇使用"由外而內(nèi)" 306

18.3 "My Lists"頁面的功能測試 306

18.4 外層:表現(xiàn)層和模板 307

18.5 下移一層到視圖函數(shù)(控制器) 308

18.6 使用由外而內(nèi)技術(shù),再讓一個測試通過 309

18.6.1 快速重組模板的繼承層級 309

18.6.2 使用模板設(shè)計API 310

18.6.3 移到下一層:視圖向模板中傳入什么 311

18.7 視圖層的下一個需求:新建清單時應(yīng)該記錄屬主 312

18.8 下移到模型層 313

第19章 測試隔離和"傾聽測試的心聲" 318

19.1 重溫抉擇時刻:視圖層依賴于尚未編寫的模型代碼 318

19.2 首先嘗試使用馭件實現(xiàn)隔離 319

19.3 傾聽測試的心聲:丑陋的測試表明需要重構(gòu) 322

19.4 以隔離的方式重寫視圖測試 323

19.4.1 為了新測試的健全性,保留之前的整合測試組件 323

19.4.2 隔離的新測試組件 324

19.4.3 站在協(xié)作者的角度思考問題 324

19.5 下移到表單層 328

19.6 下移到模型層 332

19.7 關(guān)鍵時刻,以及使用模擬技術(shù)的風(fēng)險 335

19.8 把層與層之間的交互當(dāng)作"合約" 336

19.8.1 找出隱形合約 337

19.8.2 修正由于疏忽導(dǎo)致的問題 338

19.9 還缺一個測試 340

19.10 清理:保留哪些整合測試 340

19.10.1 刪除表單層多余的代碼 340

19.10.2 刪除以前實現(xiàn)的視圖 341

19.10.3 刪除視圖層多余的代碼 342

19.11 總結(jié):什么時候編寫隔離測試,什么時候編寫整合測試 343

19.11.1 以復(fù)雜度為準(zhǔn)則 344

19.11.2 兩種測試都要寫嗎 344

19.11.3 繼續(xù)前行 345

第20章 持續(xù)集成 346

20.1 安裝Jenkins 346

20.1.1 Jenkins的安全配置 348

20.1.2 添加需要的插件 348

20.2 設(shè)置項目 350

20.3 及時次構(gòu)建 351

20.4 設(shè)置虛擬顯示器,讓功能測試能在無界面的環(huán)境中運行 353

20.5 截圖 355

20.6 一個常見的Selenium問題:條件競爭 358

20.7 使用PhantomJS運行QUnit JavaScript測試 361

20.7.1 安裝node 361

20.7.2 在Jenkins中添加構(gòu)建步驟 362

20.8 CI 服務(wù)器能完成的其他操作 364

第21章 簡單的社會化功能、頁面模式,以及練習(xí) 365

21.1 有多個用戶以及使用addCleanup 的功能測試 365

21.2 實現(xiàn)Selenium交互等待模式 367

21.3 頁面模式 368

21.4 擴展功能測試測試第二個用戶和"My Lists"頁面 371

21.5 留給讀者的練習(xí) 373

第22章 測試運行速度的快慢和熾熱的巖漿 375

22.1 正題:單元測試除了運行速度超快之外還有其他優(yōu)勢 376

22.1.1 測試運行得越快,開發(fā)速度越快 376

22.1.2 神賜的心流狀態(tài) 377

22.1.3 速度慢的測試經(jīng)常不想運行,導(dǎo)致代碼變壞 377

22.1.4 現(xiàn)在還行,不過隨著時間推移,整合測試會變得越來越慢 377

22.1.5 別只聽我一個人說 377

22.1.6 單元測試能驅(qū)使我們實現(xiàn)好的設(shè)計 377

22.2 純粹的單元測試有什么問題 378

22.2.1 隔離的測試難讀也難寫 378

22.2.2 隔離測試不會自動測試集成情況 378

22.2.3 單元測試幾乎不能捕獲意料之外的問題 378

22.2.4 使用馭件的測試可能和實現(xiàn)方式聯(lián)系緊密 378

22.2.5 這些問題都可以解決 379

22.3 合題:我們到底想從測試中得到什么 379

22.3.1 正確性 379

22.3.2 簡潔可維護的代碼 379

22.3.3 高效的工作流程 379

22.3.4 根據(jù)所需的優(yōu)勢評估測試 379

22.4 架構(gòu)方案 380

22.4.1 端口和適配器(或六邊形、簡潔)架構(gòu) 380

22.4.2 函數(shù)式核心,命令式外殼 381

22.5 小結(jié) 381

遵從測試山羊的教誨 383

附錄A PythonAnywhere 385

附錄B 基于類的Django 視圖 388

附錄C 使用Ansible配置服務(wù)器 398

附錄D 測試數(shù)據(jù)庫遷移 402

附錄E 接下來做什么 407

附錄F 速查表 411

附錄G 參考書目 415

作者簡介 416

封面介紹 416

網(wǎng)友評論(不代表本站觀點)

免責(zé)聲明

更多出版社
主站蜘蛛池模板: 会泽县| 鄢陵县| 大名县| 武功县| 嘉禾县| 天台县| 奎屯市| 桑植县| 垣曲县| 鲁甸县| 仪征市| 尖扎县| 梅州市| 香港| 砀山县| 长阳| 明光市| 大冶市| 定边县| 逊克县| 登封市| 仪征市| 乐亭县| 石泉县| 阆中市| 甘肃省| 邛崃市| 浦江县| 吴旗县| 拉萨市| 黑水县| 枣强县| 晋中市| 辽源市| 虞城县| 南阳市| 镇宁| 中西区| 当雄县| 东城区| 东乡|