TOP
瀏覽紀錄
【反詐騙】接到不明來電說:升等為「高級會員」「購物滿意度調查」,這是詐騙!請絕對「不要依照指示操作ATM或網銀」
1/1
庫存:6
軟件自動化測試實戰解析:基於Python3編程語言(簡體書)
人民幣定價:89元
定  價:NT$534元
優惠價: 75401
可得紅利積點:12 點

庫存:6

商品簡介

作者簡介

名人/編輯推薦

目次

本書由淺入深地對自動化軟件測試進行了闡述,內容涵蓋軟件測試的基礎知識、Python、PyTest、Selenium、面向物件編程、自動化測試框架的設計要點和測試自動化開發實踐等,本書內容組織成入門、進階和高階三個逐步提高的版塊,每個版塊都有實戰編程章節,清晰呈現了技術方案的打磨和改進的過程。

本書的內容分為三個大的版塊。

第一個版塊,從最基礎的部分講起,讓基礎薄弱的工程師對測試和編程語言有基本的認識,在此基礎上開始了解PyTest測試框架的基礎用法,以及如何用Selenium來做簡單的Web UI的自動化測試。

通過這個版塊的學習,測試工程師有能力把一些簡單的測試工作用代碼實現,減少手工重復勞動的比重,做到一定程度的測試自動化,這是對自動化測試工程師的入門要求。

第二個版塊,夯實Python語言基礎,講解更深入的PyTest和Selenium特性,演示如何應用這些知識來改進測試用例的編寫,改善測試框架,讓測試自動化更加高效。

通過這個版塊的學習,測試工程師對編程語言和測試工具會有更深入的了解,可以更高效地進行測試自動化的工作,有能力開始針對產品特性來設計自動化測試框架,這是工程團隊對中級測試工程師的一般要求。

第三個版塊,學習Python的高級特性、面向物件的思想、自動化測試工具和框架的高級特性、設計思路、以及存在的問題、限制及其改進思路、工程團隊的高質量協作、實際項目中的最佳實踐等更深入的內容,這個部分包含了大量實戰中提煉出來的經驗和總結。

通過這個版塊的學習,測試工程師可以往高級工程師和架構師方向邁出堅實的一步,而具備這樣的技術能力和思維方式後,測試工程師可以在整個軟件工程團隊中起到非常積極的正面影響,而不只限於測試團隊。

每個版塊的末尾都有一個實戰章節,所有的實戰章節圍繞同一個測試場景展開,前後銜接呼應,有很強的延續性。每個實戰章節都是針對相應的技術水平而設計的,讀者可以非常直觀地看到代碼和設計如何隨著技術水平的提升而改進。


徐西寧,畢業於華中科技大學計算機學院,資深全棧軟件工程師,從事軟件開發和測試工作15年,先後任職於Autodesk、EMC、每銳軟件等公司,在自動化測試框架設計、自動化測試流程優化、持續集成、Web開發等方面有豐富的經驗,是一位活躍的開源軟件和技術分享實踐者。

1.本書內容詳實、深入淺出、案例生動、語言簡練,是軟件自動化測試工程師必備的參考資料,也可供相關專業的在校學生、手工測試工程師和希望提升技術水平的自動化測試工程師學習參考。

2.業內多個行業專家聯袂推薦。

3.讀者可以在微信公眾號“Python閱碼場”看到更多關於軟件開發和測試相關的技術文章,也可通過公眾號與作者交流互動。


序  一

明代學者林希元有云:“自古聖賢之言學也,咸以躬行實踐為先,識見言論次之”,強調實踐是第一位的,而著書立說次之。唯有經過實踐總結而成的書,方能為讀者提供更強大的指導。本書的作者是一位長期奮戰在編碼一線的“老碼農”,他把他多年的實踐經驗轉化為了這樣一本書,這不是一本空洞無物的Python語法教程,也不是一本紙上談兵的軟件測試教程,它更像是Python在軟件測試領域的實戰兵法。

在讀完本書之後,我被本書的文字深深打動了,驚嘆於作者在技術精湛之外,竟然有如此出色的文筆。不同於技術類圖書的八股文風,讀這本書,感覺像是有一個坐在你身邊的碼農,向你講述他對Python的理解,對軟件測試乃至軟件工程的理解。本書使用了許多古今中外現實生活中的例子,生動有趣地陳述枯燥的知識點。本書的另外一個特點就是如庖丁解牛,刀法精準,在正確的位置下刀。比如,對於如何安裝Python這樣的操作,作者幾乎只字未提,因為本書默認讀者是具備這樣的能力的。所以,閱讀本書,就像在看一部精彩的動作片,從開場的第一分鐘開始就從頭打到尾,以至於觀眾全程都不願意離場。

“人生苦短,請用Python”。現如今,Python已經廣泛地應用於Web開發、人工智能、數據分析、網絡爬蟲、遊戲開發、云計算、自動化測試與運維等眾多領域。熟練地掌握Python,意味著極大地提升工程中的生產效率。也正是因為Python大流行,現在市面上的Python書籍可以說是汗牛充棟,但是,這些書籍中的絕大多數仍然采用了平鋪直敘式的語法講解方式。本書的結構則非常新穎,它采用迭代螺旋的方式,把Python的理論原理和實踐技巧一個臺階一個臺階地往上提升。比如本書在第2章講完Python的基礎語法結構後,第3~5章分別是PyTest入門、Selenium入門和實戰12306之入門;第6章進行Python進階,之後,第7~9章又對PyTest、Selenium和12306進行進階學習;第10章再對Python的高級特性進行講解;第11章在此基礎上總結測試框架;第12章則第3次對12306案例進行迭代提升。這種迭代推進、螺旋上升的方式,非常符合人類的思維習慣,畢竟我們掌握任何一門新技術,都不是一蹴而就的。回想起來,我在學習Linux內核及其他技術時,也同樣是反反復復地跟同一個知識點“死磕”。但是在不同的階段,隨著自身技術深度和廣度的增加,對同一事物的理解也會完全不一樣。技術高手幾乎都會對同一關鍵的技術點進行反復研究,正是這種不懈的“執拗”,才拉開了高手和一般程序員間的差距。

非常高興看到多年好友徐西寧老師的這本書出版,相信本書必然會為促進Python,尤其是Python在軟件測試領域的工程實踐應用、提升一線開發人員的實戰水平起到巨大的作用。


——宋寶華,知名Linux技術專家



序  二

自動化測試是軟件工程中最有價值的環節之一,需要有更多的高質量技術分享傳播給更多人。老徐是一個能做會講的全棧工程師,技術功底深厚,表達能力強,且極有耐心,是理想的技術書籍作者人選。

本書的主要內容是關於軟件自動化測試的,作為一個全棧工程師,老徐是從更高的角度來講解測試自動化,將編程語言、軟件測試、軟件工程、面向物件設計、團隊協作和軟件應用場景講解得清晰而透徹。在文字描述上,本書盡量規避了“正確”但晦澀的專業術語表達,而是盡量用生活化的場景來生動講解,這讓本書在保持高技術水準的同時,也非常有特色。值得推薦!

——張國強,中科創達戰略合作顧問




前  言

對於任何一支軟件工程團隊來說,軟件測試都是必須認真對待的環節。自動化測試由於能夠減少重復人工勞動、提高測試執行效率、加快軟件發布速度,成為軟件工程團隊努力追求的目標。

Python是一種強大而簡潔的編程語言。因為功能強大、適用面廣,它在眾多領域得到了廣泛的應用;因為語法簡潔、容易上手,它受到了許多人的青睞,其中就包括軟件測試工程師。

在實際工作中,有很多測試工程師會做簡單的Web UI測試,會用Python寫腳本把一些重復的操作自動化,會用PyTest測試框架的基本功能來寫測試用例,這些都在一定程度上減少了手工重復勞動,這是值得肯定的。但是作為工程師,我們追求的是更高效,而不是更熟練,我們需要不斷學習和思考如何更好地實施自動化測試。本書用Python3作為演示語言,講解如何實施系統、高效、可靠、易於理解和管理的軟件自動化測試。

本書的內容分為三個大的板塊。

第一個板塊,從最基礎的部分講起,讓基礎薄弱的工程師對測試和編程語言有基本的認識,可以用Python把一些常見的編程需求實現出來。在此基礎上,我們開始了解PyTest測試框架的基礎用法,以及如何用Selenium來做簡單的Web UI自動化測試。通過這個板塊的學習,測試工程師有能力把一些簡單的測試工作用代碼來實現,減少手工重復勞動的比重,做到一定程度的測試自動化,這是對自動化測試工程師的入門要求。

第二個板塊,夯實Python語言基礎,講解更深入的PyTest和Selenium特性,演示如何應用這些知識來改進測試用例的編寫,改善測試框架,讓測試自動化更加高效。通過對這個板塊的學習,測試工程師對編程語言和測試工具會有更深入的了解,從而更高效地進行測試自動化的工作,開始有能力針對產品特性來設計自動化測試框架,這是工程團隊對中級測試工程師的一般要求。

第三個板塊,介紹Python的高級特性、面向物件的思想、自動化測試工具和框架的高級特性、設計思路、存在的問題和限制及其改進思路、工程團隊的高質量協作、實際項目中的最佳實踐等更深入的內容。這部分包含了實戰中提煉出來的大量經驗和總結。通過對這個板塊的學習,測試工程師可以向高級工程師和架構師方向邁出堅實的一步。具備這樣的技術能力和思維方式後,測試工程師可以在整個軟件工程團隊中起到非常積極的作用,而不只限於測試團隊。

每個板塊的末尾都有一個實戰章節,所有的實戰章節都圍繞同一個測試場景展開,前後銜接呼應,有很強的延續性。每個實戰章節都是針對相應的技術水平而設計的,讀者可以非常直觀地看到代碼和設計如何隨著技術水平的提升而改進。

本書盡量用生活化的場景來描述編程場景,避免正確但是晦澀的表達,避免直接拋出結論,而是用實戰項目來演示軟件開發和測試的思路, 用簡單可行的思路引導讀者去一步步嘗試和驗證,最終得到可以理解的結果。

編程語言和工具在不斷快速演進,學習解決問題的思路遠比直接學習結論重要。本書針對常見的編程和測試場景講解Python的代碼實現,但是不會事無巨細地列舉所有的邊角語言特性。同時,本書會嘗試分析常見的代碼和測試思路,分析其中的不足,提出改進思路,引導讀者理解實際項目中的開發、測試和協作方式。在某些內容的講解中,本書會嘗試比較Python和其他主流編程語言(比如Java),分析Python獨特的語言特性,也會講解Selenium和PyTest這樣的測試框架和工具在項目實踐中的問題,以及相應的解決思路。

對於相關的專業術語,本書會盡量用中文表達。但是有一些術語如果翻譯成中文可能並不傳神,在實際工作中也不常用,並不會幫助讀者更好地理解它們的含義,對於這種情況,本書會直接用英文表達,詳細介紹可參見後面的術語表。

本書希望讀者有基本的編程和軟件測試經驗,更重要的是,要有在軟件測試的職業道路上走得更遠的意願。

在寫作本書的準備過程中,我得到了許多朋友的幫助和鼓勵,這讓我下定決心動筆,逐步厘清寫書的思路,完善自己的知識體系,直至最終成書。

謹以此書,致謝宋寶華、張國強、劉勃、黃巍、王錄華、盧鵬、劉濤、何昭然、曾昭毅、邱鵬、周宇、劉陽、李潔、劉靜、甘露、Bryan Turner、Jeff Strater、Daniel Toms、任俊、劉保良、劉春濤、劉志鵬、郝洛玫、周麗、李真真、徐欣、陳然、張翔、張立兵、劉軍、楊文镕等親友,感謝你們在技術和職業發展上對我的幫助和鼓勵。謹以此書,致謝我的“鐵匠鋪”籃球隊的隊友們,因為有你們多年的陪伴和鼓勵,我才對鍛煉身體沒有懈怠,才能以良好的身體狀態持續投入編程和寫書的世界中。謹以此書,向我的父母、岳父母、兄嫂、姐姐和姐夫致謝,你們的言傳身教給了我努力的方向。謹以此書,向我的兒子致遠和女兒致雅表達感激,在陪伴你們成長的過程中,我的內心也成長了。謹以此書,向我的秀外慧中的“大當家”劉璐致以無盡感激,因為有你無怨無悔的付出和全力支持,我才能把工作之餘本應該陪伴家人的時間騰挪出來,花費一年多的時間寫完這本書。最後,對為本書做出巨大貢獻的策劃朱捷老師致以深深的謝意,因為有你從專業的角度不斷給我中肯的反饋,我才能不斷完善和打磨書稿,竭力為讀者呈現有質量的內容。

限於篇幅,我無法一一列舉所有想要感謝的人,但我一直心懷感恩,這些年裡,我從你們身上學會了很多,收獲了很多,是你們激勵我不斷前行,努力跟上你們的腳步。

本書基於我的學習和工作經驗總結而成,但是因為現實世界裡的軟件項目多種多樣,而我本人受限於所涉及的項目類型和技術視野,加之時間倉促,書中難免有錯誤和疏漏,懇請廣大讀者批評指正。歡迎大家和我討論相關的技術問題,我會非常樂意和大家交流分享。


序一
序二
前言
第1章 軟件測試基礎 1
11 什麼是軟件測試1
12 軟件測試的類型2
121 按測試物件的顆粒度劃分2
122 按內部邏輯的透明度劃分3
123 按執行階段劃分4
124 按執行方式劃分4
13 敏捷開發模式5
14 測試經濟學6
141 測試是必需的嗎6
142 放棄追求完美7
143 關注核心功能8
144 等價類劃分8
145 邊界值分析9
146 用機器取代人工10
15 自動化測試不容易12
16 本章小結12
第2章 Python入門 13
21 世界上最好的兩種編程語言13
22 別問我怎麼安裝14
23 解釋器是什麼14
24 初識變量16
25 函數基礎17
26 代碼縮進和代碼塊18
27 字符串19
271 拼接和格式化21
272 下標訪問22
273 更多常見操作23
28 數值類型26
281 數值類型的基本運算27
282 浮點數的常見運算29
29 布爾值和條件判斷32
291 條件判斷的組合33
292 條件判斷的短路34
293 條件判斷的鏈式表達35
210 日期和時間36
2101 生成時間物件37
2102 格式化日期字符串38
211 list基礎39
2111 下標訪問40
2112 插入元素40
2113 刪除元素41
2114 簡單排序42
2115 更多常見操作43
2116 遍歷44
2117 元素類型46
212 dict基礎47
2121 讀取48
2122 插入和更新49
2123 合並50
2124 刪除51
2125 遍歷53
2126 key的選擇55
213 循環56
2131 while循環57
2132 for循環58
2133 多重循環59
2134 循環的終止60
2135 遞歸63
214 異常63
2141 基本語法64
2142 異常的類型67
2143 捕獲特定類型的異常68
2144 主動拋出異常71
215 斷言72
2151 assertion72
2152 AssertionError73
2153 assert73
216 pip的基礎用法74
217 本章小結76
第3章 PyTest入門 77
31 框架是什麼77
32 測試框架77
321 篩選測試源文件77
322 篩選測試函數78
323 測試函數的啟動79
324 成功還是失敗80
325 測試報告80
326 測試前的環境配置81
327 測試後的現場清理81
328 核心功能的擴充82
329 主流測試框架82
33 PyTest是什麼83
34 自動發現84
341 自動發現測試源文件84
342 自動發現測試函數84
35 使用斷言85
36 測試結果解讀86
37 測試報告88
38 本章小結89
第4章 Selenium入門 90
41 Selenium是什麼90
411 Selenium IDE91
412 Selenium Grid97
413 Web Driver98
42 Selenium的安裝配置99
43 用Web Driver驅動網頁100
44 頁面元素的定位102
441 簡單定位102
442 CSS定位107
45 頁面元素的常見操作108
46 本章小結112
第5章 實戰12306之入門篇 113
51 測試用例設計文檔113
52 代碼實戰114
53 代碼解析116
531 審視測試邏輯116
532 用變量澄清代碼邏輯117
533 DRY原則118
534 改善代碼可讀性120
54 本章小結122
第6章 Python進階 123
61 基本數據類型的深入了解123
611 轉義字符123
612 字符串的不可變性124
613 深入了解布爾類型126
614 set128
615 tuple131
616 整型數的設計很優秀132
617 浮點數為什麼算不準133
618 Decimal,準!134
62 深入了解函數137
621 函數的調用137
622 函數的返回138
623 不支持函數重載139
624 默認參數141
625 可變參數142
63 關於時間144
631 時間差144
632 UTC時間146
64 面向物件基礎148
641 面向物件到底是什麼意思148
642 類和物件148
643 初始化函數149
65 模塊是什麼151
66 高級排序153
661 list的排序153
662 dict的排序157
663 自定義物件序列的排序159
67 復雜的遍歷場景160
671 一邊遍歷一邊修改160
672 一邊遍歷一邊刪除162
68 文件和文件系統操作基礎165
681 路徑的正確操作方式165
682 文件系統的基本操作168
683 文本文件的讀169
684 文本文件的寫170
685 文本文件的關閉171
686 CSV文件的讀寫172
687 Excel文件的讀寫174
69 淺拷貝與深拷貝176
610 深入了解import179
611 變量的作用域182
612 局部變量和全局變量的衝突185
613 __name__和__main__186
614 注釋188
615 pip的工程用法190
616 本章小結192
第7章 PyTest進階 19

第7章 PyTest進階 193

7.1 自動發現測試類193

7.2 測試集合194

7.3 標記195

7.3.1 忽略執行195

7.3.2 條件執行197

7.3.3 期待失敗的發生199

7.3.4 限時執行201

7.3.5 自定義標簽201

7.4 參數化測試204

7.5 測試用例的ID206

7.6 Fixture初探207

7.7 PyTest的插件機制209

7.7.1 Hook函數209

7.7.2 PyTest插件210

7.7.3 多級conftest協同210

7.7.4 第三方插件212

7.8 本章小結213

第8章 Selenium進階 214

8.1 頁面元素的XPath定位214

8.2 頁面元素的等待215

8.2.1 隱式等待216

8.2.2 顯式等待216

8.3 Selenium的局限218

8.4 本章小結219

第9章 實戰12306之進階篇 220

9.1 PO設計模式220

9.2 更有針對性的顯式等待223

9.3 更健壯的代碼邏輯224

9.4 函數單一職責原則225

9.5 測試單一職責原則226

9.6 本章小結227

第10章 Python高階 228

10.1 面向物件設計思想228

10.1.1 繼承228

10.1.2 封裝230

10.1.3 多態232

10.2 對類的深入了解233

10.2.1 析構函數233

10.2.2 訪問權限控制235

10.2.3 self不是關鍵字236

10.2.4 實例屬性和類屬性239

10.2.5 成員方法和類方法240

10.2.6 類方法和靜態方法242

10.3 重寫244

10.3.1 如何重寫244

10.3.2 重寫中的代碼復用247

10.3.3 重寫__str__方法249

10.3.4 重寫運算符249

10.4 深入了解函數252

10.4.1 函數也是一種物件252

10.4.2 內嵌函數254

10.4.3 函數裝飾器255

10.4.4 不只是會裝飾259

10.4.5 用Property裝飾器改進設計261

10.5 None是什麼264

10.6 Enum是什麼265

10.7 Python不支持常量267

10.8 隨機數據和時間戳268

10.9 自定義異常類型270

10.10 需要用強類型嗎271

10.11 日志272

10.12 本章小結277

第11章 測試框架的設計和演進 278

11.1 代碼的可讀性278

11.1.1 統一的代碼風格279

11.1.2 丑陋的函數名280

11.1.3 糟糕的變量名282

11.2 友好的函數設計283

11.2.1 簡潔的接口283

11.2.2 操作狀態的處理285

11.2.3 不要過度設計287

11.2.4 防呆288

11.3 有效管理測試資源290

11.3.1 封裝微服務290

11.3.2 統一的資源入口295

11.3.3 資源的延遲加載296

11.3.4 保證資源的釋放298

11.3.5 支持多環境測試300

11.3.6 容忍不穩定的測試環境302

11.4 不要引入getter和setter304

11.5 一次收集多個斷言錯誤306

11.6 日志的支持和改進308

11.7 減少重復執行的負面影響310

11.8 數據驅動測試的設計311

11.8.1 讓PyTest支持中文ID311

11.8.2 更優雅的參數化測試314

11.8.3 用YML取代JSON316

11.8.4 面向物件的測試數據317

11.9 接受一定程度的重復代碼319

11.10 本章小結320

第12章 實戰12306之高階篇 321

12.1 就近原則321

12.2 用Enum澄清設計意圖322

12.3 支持鏈式表達324

12.4 簡化函數名325

12.5 封裝復雜邏輯326

12.6 單例設計模式328

12.7 異常和斷言的使用場景的區別331

12.8 測試用例的維護333

12.9 本章小結334

術語表 335

參考文獻 336

後記 337

購物須知

為了保護您的權益,「三民網路書店」提供會員七日商品鑑賞期(收到商品為起始日)。

若要辦理退貨,請在商品鑑賞期內寄回,且商品必須是全新狀態與完整包裝(商品、附件、發票、隨貨贈品等)否則恕不接受退貨。

大陸出版品因裝訂品質及貨運條件與台灣出版品落差甚大,除封面破損、內頁脫落等較嚴重的狀態,其餘商品將正常出貨。

無現貨庫存之簡體書,將向海外調貨:
海外有庫存之書籍,等候約20個工作天;
海外無庫存之書籍,平均作業時間約60個工作天,然不保證確定可調到貨,尚請見諒。