內容介紹
《cucumber:行為驅動開發指南》的兩位作者是matt wynne和aslak helles?y,前者是cucumber最有經驗的用戶和貢獻者之一,後者是cucumber的創始人,因此,《cucumber:行為驅動開發指南》是一本權威指南,它會提供使用cucumber所需的全部知識,讓你和你的團隊自信地開啟cucumber之旅。儘管cucumber誕生於ruby社區,但你可以用它測試幾乎所有系統,從簡單的shell或perl腳本,到使用php、java或任何其他平台編寫的web套用。書中將展示如何用一組清晰、可執行且團隊中任何人都能讀懂的規格說明來表達用戶那些天馬行空的想法。你將學會如何將這些示例提供給cucumber,並讓它指導你的開發過程。《cucumber:行為驅動開發指南》的第一部分會提供cucumber入門所需的全部知識,引導你從cucumber的核心特性起步,通過cucumber的gherkin dsl,使用自然語言來描述客戶想要的系統行為,然後帶你編寫ruby代碼來解釋這些自然語言描述的規格說明並據此來驗證套用的行為。第二部分將通過一個可以工作的例子來鞏固學到的知識,同時學習一些更高級的cucumber技術,還將學習如何測試異步系統和使用資料庫的系統。第三部分提供了一些解決問題的方法,針對的都是作者曾幫助其他團隊解決過的最困難、最常見的問題。基於這些模式和技術,你將學習如何使用capybara和selenium測試大量使用ajax的web套用,測試rest web服務、ruby on rails套用、命令行套用、遺留程式等。
cucumber有助於在軟體團隊中的技術人員和非技術人員之間架起溝通的橋樑。《cucumber:行為驅動開發指南》的內容既適合開發人員和測試人員閱讀,也適合軟體團隊中的非技術讀者閱讀。
作者介紹
matt wynne,獨立諮詢顧問,他幫助各種各樣的團隊學習如何盡其所能交付軟體,並同時享受這一過程。業餘時間他是cucumber項目的核心開發者,matt的部落格是mattwynne.net,推特是@mattwynne。aslak helles,y cucumber項目的創始人,倫敦drw交易集團(drw trading group)倫敦公司的一名高級開發工程師,他使用多種不同的語言編寫快速、智慧型的軟體。在此之前,他是挪威bekk諮詢公司的首席科學家。aslak的推特是@aslak_hellesoy。
譯者介紹
許曉斌 程式設計師,敏捷教練,技術作者,持續集成方面的專家。曾任職於sonatype,是開源軟體nexus的核心團隊成員,maven中央倉庫的主要維護者。著有《maven實戰》,譯有《maven權威指南》,有不少文章發表於infoq、《程式設計師》等技術雜誌,活躍于敏捷社區並在agile tour等scrumgathering等會議上發表過演講。新浪微博@juvenxu,部落格http://www.juvenxu.com/。
王江平 就職於autodesk軟體上海分公司。熱愛編程,熱愛修bug,熱愛讀書,熱愛交友,熱愛唱歌,熱愛看戲,熱愛騎腳踏車……熱愛everything卻無一精通的專業程式設計師一名。也熱愛人肉翻譯,參與、主導或獨立完成過《代碼之美》、《c#3.0設計模式》、《敏捷開發的藝術》、《軟體開發者路線圖》、《java語言精粹》、《python計算與編程實踐》等書的翻譯。新浪微博@steedhorse。
作品目錄
第一部分 cucumber基礎 1第1章 為何使用cucumber 3
1.1 自動化驗收測試 3
1.2 行為驅動開發 4
1.2.1 通用語言 4
1.2.2 實例 5
1.3 活的文檔 6
事實來源 6
1.4 cucumber如何工作 6
1.5 我們學到了什麼 7
第2章 cucumber初體驗 9
2.1 理解我們的目標 9
2.2 創建一個特性 10
2.3 創建步驟定義 12
2.4 實現第一個步驟定義 13
2.5 運行程式 14
2.6 改變格式器 15
2.7 添加一個斷言 16
2.8 讓測試通過 18
.2.9 我們學到了什麼 20
2.9.1 目錄結構 20
2.9.2 小步前進 21
2.9.3 gherkin 21
2.9.4 步驟定義 21
第3章 gherkin基礎 22
3.1 gherkins是乾什麼的 22
3.1.1 具體實例 22
3.1.2 可執行的規格說明 23
3.2 格式和語法 24
3.2.1 關鍵字 25
3.2.2 模擬運行 25
3.3 feature 25
3.4 場景 26
3.4.1 given、when和then 27
3.4.2 and和but 27
3.4.3 使用星號替換given、when和then 28
3.4.4 無狀態 28
3.4.5 名稱和描述 29
3.5 注釋 29
3.6 語言 30
3.7 我們學到了什麼 31
第4章 步驟定義:外在篇 34
4.1 步驟和步驟定義 35
4.1.1 匹配步驟 35
4.1.2 創建步驟定義 36
4.1.3 given、when和then是相同的 37
4.1.4 使用本國語言 38
4.2 捕獲參數 39
4.2.1 捕獲組 39
4.2.2 多選分支 39
4.2.3 點號 40
4.2.4 星號修飾符 40
4.2.5 字元組 41
4.2.6 字元組簡記法 41
4.2.7 加號修飾符 42
4.3 多重捕獲 42
4.4 靈活性 43
4.4.1 問號修飾符 44
4.4.2 非捕獲組 44
4.4.3 錨點 45
4.5 返回結果 45
4.5.1 未定義的步驟 46
4.5.2 待定的步驟 48
4.5.3 失敗的步驟 49
4.6 我們學到了什麼 50
第5章 富有表現力的場景 53
5.1 背景 53
5.2 數據表 56
5.2.1 在步驟定義中處理數據表 57
5.2.2 將數據錶轉換成數組 58
5.2.3 使用diff!比較數據表 59
5.3 場景輪廓 60
5.3.1 更大的占位符 62
5.3.2 多個實例表 63
5.3.3 解釋自己 64
5.4 嵌套步驟 65
5.4.1 嵌套步驟重構 66
5.4.2 參數和嵌套步驟 67
5.4.3 嵌套步驟的危險 67
5.5 文檔字元串 68
5.6 使用標籤和子資料夾保持條理性 69
5.6.1 子資料夾 69
5.6.2 運行子資料夾中的特性 70
5.6.3 標籤 70
5.7 我們學到了什麼 72
第6章 cucumber常見問題及解決之道 73
6.1 感受痛苦 73
6.1.1 閃爍的場景 74
6.1.2 脆弱的特性 74
6.1.3 緩慢的特性 75
6.1.4 厭倦的利益相關人 76
6.2 同心協力 76
6.2.1 偶然細節 77
6.2.2 命令式步驟 78
6.2.3 重複 80
6.2.4 語言不通用 82
6.2.5 閉門造車式的特性 82
6.3 照管好你的測試 84
6.3.1 滲露的場景 84
6.3.2 競爭條件和打瞌睡的步驟 85
6.3.3 共享的環境 86
6.3.4 被隔離的測試人員 87
6.3.5 固件數據 87
6.3.6 大量場景 89
6.3.7 大泥球 90
6.4 停掉生產線和缺陷預防 90
6.5 我們學到了什麼 92
第二部分 可以工作的示例 95
第7章 步驟定義:內在篇 97
7.1 勾勒出領域模型 98
7.1.1 準確用詞 99
7.1.2 實話實說 100
7.1.3 做最簡單的事情 101
7.2 使用變形器消除重複 102
7.3 為world添加自定義輔助方法 105
7.3.1 在world中存儲狀態 107
7.3.2 創建自定義輔助方法 107
7.3.3 自定義world 108
7.3.4 設計抵達終點線的方法 109
7.4 組織代碼 113
7.4.1 隔離應用程式代碼 113
7.4.2 啟動cucumber環境 113
7.4.3 變形器和world模組 114
7.4.4 組織步驟定義 114
7.4.5 模擬運行和env.rb 114
7.5 我們學到了什麼 115
第8章 支持代碼 117
8.1 修復bug 117
檢查和重構 121
8.2 開啟用戶界面 123
安裝gem 125
8.3 做出轉換 126
設計用戶界面 128
8.4 使用鉤子 129
8.4.1 打標籤的鉤子 130
8.4.2 觀察場景 131
8.4.3 around鉤子 131
8.4.4 在其他時間運行的鉤子 132
8.5 構建用戶界面 133
提供現金 134
8.6 我們學到了什麼 136
第9章 處理訊息佇列和異步組件 139
9.1 我們全新的異步架構 139
9.2 如何同步 140
9.2.1 通過監聽同步 141
9.2.2 通過取樣同步 141
9.3 實現新架構 142
9.3.1 驅動出接口 142
9.3.2 構建交易佇列 143
9.3.3 構建balancestore 144
9.3.4 添加鉤子以重置狀態 145
9.3.5 構建transaction processor 145
9.4 修復閃爍的場景 146
9.4.1 安裝及配置service manager 146
9.4.2 調查閃爍 148
9.4.3 使用取樣修復閃爍 150
9.4.4 測試什麼都沒有發生 152
9.5 我們學到了什麼 152
第10章 資料庫 154
10.1 activerecord介紹 154
使用遷移管理模式變更 155
10.2 重構至使用資料庫 156
10.3 讀取及寫入資料庫 159
10.4 用事務清理資料庫 162
10.5 使用截斷清理資料庫 166
10.6 我們學到了什麼 167
第三部分 套用cucumber 169
第11章 cucumber命令行界面 171
11.1 cucumber命令行選項 171
11.2 運行一個場景子集 172
11.2.1 使用標籤表達式過濾 172
11.2.2 基於行號過濾 173
11.2.3 基於名稱過濾 174
11.3 改變cucumber的輸出 174
11.3.1 特殊的格式器 174
11.3.2 格式化至檔案及使用多種格式器 175
11.3.3 顯示完整回溯 175
11.4 指定步驟定義的位置 175
11.5 管理進行中的工作 177
11.6 使用profile 177
11.7 從rake運行cucumber 178
11.8 在持續集成中運行cucumber 178
11.8.1 嚴格要求 178
11.8.2 共享報告 179
11.9 我們學到了什麼 179
第12章 測試rest web服務 181
12.1 進程內測試基於rack的rest api 182
12.1.1 建立套用的骨架——然後存儲一些水果 183
12.1.2 使用rack-test測一測我們的套用 185
12.1.3 比較json 187
12.2 進程外測試任意rest api 192
12.3 我們學到了什麼 198
第13章 為遺留套用添加測試 199
13.1 特性描述測試 200
13.2 消滅bug 202
13.3 添加新的行為 202
13.4 代碼覆蓋率 204
13.5 我們學到了什麼 204
第14章 引導rails 206
14.1 運行生成器 207
14.2 創建用戶 208
14.3 發布訊息 212
14.4 關聯訊息與用戶 215
14.5 手工創建控制器 217
14.6 實現視圖 218
14.7 我們學到了什麼 219
第15章 使用capybara測試ajax web套用 221
15.1 實現不用ajax的簡單搜尋 223
15.1.1 準備內容以供搜尋 223
15.1.2 導航、填寫輸入域和點擊按鈕 224
15.1.3 修復控制器代碼 225
15.1.4 讓capybara做點事情 226
15.1.5 驗證頁面內容 228
15.1.6 從頁面中提取數據 228
15.1.7 使用表格比較 230
15.2 基於ajax的搜尋 232
15.2.1 使用selenium 233
15.2.2 活動搜尋的設計 236
15.2.3 讓web套用返回json 238
15.2.4 處理ajax的異步特性 240
15.3 capybara api 242
15.3.1 導航 242
15.3.2 連結與按鈕點擊 242
15.3.3 表單互動 242
15.3.4 查詢 243
15.3.5 查找 243
15.3.6 範圍限定 244
15.4 抓取螢幕截圖 244
15.5 我們學到了什麼 245
第16章 使用aruba測試命令行套用 247
16.1 簡單界面 247
16.2 我們的第一個aruba特性 248
16.2.1 流和退出狀態 249
16.2.2 安裝aruba 250
16.2.3 考察aruba的步驟定義 251
16.3 使用檔案與可執行程式 252
16.3.1 使用@announce查看aruba見到的內容 255
16.3.2 隔離場景 256
16.3.3 告知aruba勿刪檔案 256
16.3.4 設定aruba的工作目錄 257
16.3.5 設定$path 258
16.4 與用戶輸入互動 259
16.5 使用aruba的ruby dsl 262
16.6 我們學到了什麼 263
附錄a 在其他平台上使用cucumber 264
附錄b 安裝cucumber 266
b.1 安裝ruby 266
b.1.1 os x和linux 266
b.1.2 windows 267
b.2 http代理設定 267
b.3 安裝bundler 267
b.4 安裝cucumber(及rspec) 268
b.5 安裝其他gem 268
b.6 選擇一款文本編輯器 268
附錄c ruby gem版本 269
附錄d 參考文獻 271