本書(shū)由淺入深地對(duì)自動(dòng)化軟件測(cè)試進(jìn)行了闡述,內(nèi)容涵蓋軟件測(cè)試的基礎(chǔ)知識(shí)、Python、PyTest、Selenium、面向?qū)ο缶幊、自?dòng)化測(cè)試框架的設(shè)計(jì)要點(diǎn)和測(cè)試自動(dòng)化開(kāi)發(fā)實(shí)踐等,本書(shū)內(nèi)容組織成入門、進(jìn)階和高階三個(gè)逐步提高的版塊,每個(gè)版塊都有實(shí)戰(zhàn)編程章節(jié),清晰呈現(xiàn)了技術(shù)方案的打磨和改進(jìn)的過(guò)程。
本書(shū)的內(nèi)容分為三個(gè)大的版塊。
個(gè)版塊,從基礎(chǔ)的部分講起,讓基礎(chǔ)薄弱的工程師對(duì)測(cè)試和編程語(yǔ)言有基本的認(rèn)識(shí),在此基礎(chǔ)上開(kāi)始了解PyTest測(cè)試框架的基礎(chǔ)用法,以及如何用Selenium來(lái)做簡(jiǎn)單的Web UI的自動(dòng)化測(cè)試。
通過(guò)這個(gè)版塊的學(xué)習(xí),測(cè)試工程師有能力把一些簡(jiǎn)單的測(cè)試工作用代碼實(shí)現(xiàn),減少手工重復(fù)勞動(dòng)的比重,做到一定程度的測(cè)試自動(dòng)化,這是對(duì)自動(dòng)化測(cè)試工程師的入門要求。
第二個(gè)版塊,夯實(shí)Python語(yǔ)言基礎(chǔ),講解更深入的PyTest和Selenium特性,演示如何應(yīng)用這些知識(shí)來(lái)改進(jìn)測(cè)試用例的編寫,改善測(cè)試框架,讓測(cè)試自動(dòng)化更加高效。
通過(guò)這個(gè)版塊的學(xué)習(xí),測(cè)試工程師對(duì)編程語(yǔ)言和測(cè)試工具會(huì)有更深入的了解,可以更高效地進(jìn)行測(cè)試自動(dòng)化的工作,有能力開(kāi)始針對(duì)產(chǎn)品特性來(lái)設(shè)計(jì)自動(dòng)化測(cè)試框架,這是工程團(tuán)隊(duì)對(duì)中級(jí)測(cè)試工程師的一般要求。
第三個(gè)版塊,學(xué)習(xí)Python的高級(jí)特性、面向?qū)ο蟮乃枷、自?dòng)化測(cè)試工具和框架的高級(jí)特性、設(shè)計(jì)思路、以及存在的問(wèn)題、限制及其改進(jìn)思路、工程團(tuán)隊(duì)的高質(zhì)量協(xié)作、實(shí)際項(xiàng)目中的實(shí)踐等更深入的內(nèi)容,這個(gè)部分包含了大量實(shí)戰(zhàn)中提煉出來(lái)的經(jīng)驗(yàn)和總結(jié)。
通過(guò)這個(gè)版塊的學(xué)習(xí),測(cè)試工程師可以往高級(jí)工程師和架構(gòu)師方向邁出堅(jiān)實(shí)的一步,而具備這樣的技術(shù)能力和思維方式后,測(cè)試工程師可以在整個(gè)軟件工程團(tuán)隊(duì)中起到非常積極的正面影響,而不只限于測(cè)試團(tuán)隊(duì)。
每個(gè)版塊的末尾都有一個(gè)實(shí)戰(zhàn)章節(jié),所有的實(shí)戰(zhàn)章節(jié)圍繞同一個(gè)測(cè)試場(chǎng)景展開(kāi),前后銜接呼應(yīng),有很強(qiáng)的延續(xù)性。每個(gè)實(shí)戰(zhàn)章節(jié)都是針對(duì)相應(yīng)的技術(shù)水平而設(shè)計(jì)的,讀者可以非常直觀地看到代碼和設(shè)計(jì)如何隨著技術(shù)水平的提升而改進(jìn)。
1.本書(shū)內(nèi)容詳實(shí)、深入淺出、案例生動(dòng)、語(yǔ)言簡(jiǎn)練,是軟件自動(dòng)化測(cè)試工程師的參考資料,也可供相關(guān)專業(yè)的在校學(xué)生、手工測(cè)試工程師和希望提升技術(shù)水平的自動(dòng)化測(cè)試工程師學(xué)習(xí)參考。
2.業(yè)內(nèi)多個(gè)行業(yè)專家聯(lián)袂推薦。
3.讀者可以在微信公眾號(hào)Python閱碼場(chǎng)看到更多關(guān)于軟件開(kāi)發(fā)和測(cè)試相關(guān)的技術(shù)文章,也可通過(guò)公眾號(hào)與作者交流互動(dòng)。
序 一
明代學(xué)者林希元有云:自古圣賢之言學(xué)也,咸以躬行實(shí)踐為先,識(shí)見(jiàn)言論次之,強(qiáng)調(diào)實(shí)踐是位的,而著書(shū)立說(shuō)次之。唯有經(jīng)過(guò)實(shí)踐總結(jié)而成的書(shū),方能為讀者提供更強(qiáng)大的指導(dǎo)。本書(shū)的作者是一位長(zhǎng)期奮戰(zhàn)在編碼一線的老碼農(nóng),他把他多年的實(shí)踐經(jīng)驗(yàn)轉(zhuǎn)化為了這樣一本書(shū),這不是一本空洞無(wú)物的Python語(yǔ)法教程,也不是一本紙上談兵的軟件測(cè)試教程,它更像是Python在軟件測(cè)試領(lǐng)域的實(shí)戰(zhàn)兵法。
在讀完本書(shū)之后,我被本書(shū)的文字深深打動(dòng)了,驚嘆于作者在技術(shù)精湛之外,竟然有如此出色的文筆。不同于技術(shù)類圖書(shū)的八股文風(fēng),讀這本書(shū),感覺(jué)像是有一個(gè)坐在你身邊的碼農(nóng),向你講述他對(duì)Python的理解,對(duì)軟件測(cè)試乃至軟件工程的理解。本書(shū)使用了許多古今中外現(xiàn)實(shí)生活中的例子,生動(dòng)有趣地陳述枯燥的知識(shí)點(diǎn)。本書(shū)的另外一個(gè)特點(diǎn)就是如庖丁解牛,刀法精準(zhǔn),在正確的位置下刀。比如,對(duì)于如何安裝Python這樣的操作,作者幾乎只字未提,因?yàn)楸緯?shū)默認(rèn)讀者是具備這樣的能力的。所以,閱讀本書(shū),就像在看一部精彩的動(dòng)作片,從開(kāi)場(chǎng)的分鐘開(kāi)始就從頭打到尾,以至于觀眾全程都不愿意離場(chǎng)。
人生苦短,請(qǐng)用Python,F(xiàn)如今,Python已經(jīng)廣泛地應(yīng)用于Web開(kāi)發(fā)、人工智能、數(shù)據(jù)分析、網(wǎng)絡(luò)爬蟲(chóng)、游戲開(kāi)發(fā)、云計(jì)算、自動(dòng)化測(cè)試與運(yùn)維等眾多領(lǐng)域。熟練地掌握Python,意味著極大地提升工程中的生產(chǎn)效率。也正是因?yàn)镻ython大流行,現(xiàn)在市面上的Python書(shū)籍可以說(shuō)是汗牛充棟,但是,這些書(shū)籍中的絕大多數(shù)仍然采用了平鋪直敘式的語(yǔ)法講解方式。本書(shū)的結(jié)構(gòu)則非常新穎,它采用迭代螺旋的方式,把Python的理論原理和實(shí)踐技巧一個(gè)臺(tái)階一個(gè)臺(tái)階地往上提升。比如本書(shū)在第2章講完P(guān)ython的基礎(chǔ)語(yǔ)法結(jié)構(gòu)后,第3~5章分別是PyTest入門、Selenium入門和實(shí)戰(zhàn)12306之入門;第6章進(jìn)行Python進(jìn)階,之后,第7~9章又對(duì)PyTest、Selenium和12306進(jìn)行進(jìn)階學(xué)習(xí);第10章再對(duì)Python的高級(jí)特性進(jìn)行講解;第11章在此基礎(chǔ)上總結(jié)測(cè)試框架;第12章則第3次對(duì)12306案例進(jìn)行迭代提升。這種迭代推進(jìn)、螺旋上升的方式,非常符合人類的思維習(xí)慣,畢竟我們掌握任何一門新技術(shù),都不是一蹴而就的。回想起來(lái),我在學(xué)習(xí)Linux內(nèi)核及其他技術(shù)時(shí),也同樣是反反復(fù)復(fù)地跟同一個(gè)知識(shí)點(diǎn)死磕。但是在不同的階段,隨著自身技術(shù)深度和廣度的增加,對(duì)同一事物的理解也會(huì)完全不一樣。技術(shù)高手幾乎都會(huì)對(duì)同一關(guān)鍵的技術(shù)點(diǎn)進(jìn)行反復(fù)研究,正是這種不懈的執(zhí)拗,才拉開(kāi)了高手和一般程序員間的差距。
非常高興看到多年好友徐西寧老師的這本書(shū)出版,相信本書(shū)必然會(huì)為促進(jìn)Python,尤其是Python在軟件測(cè)試領(lǐng)域的工程實(shí)踐應(yīng)用、提升一線開(kāi)發(fā)人員的實(shí)戰(zhàn)水平起到巨大的作用。
宋寶華,知名Linux技術(shù)專家
序 二
自動(dòng)化測(cè)試是軟件工程中有價(jià)值的環(huán)節(jié)之一,需要有更多的高質(zhì)量技術(shù)分享傳播給更多人。老徐是一個(gè)能做會(huì)講的全棧工程師,技術(shù)功底深厚,表達(dá)能力強(qiáng),且極有耐心,是理想的技術(shù)書(shū)籍作者人選。
本書(shū)的主要內(nèi)容是關(guān)于軟件自動(dòng)化測(cè)試的,作為一個(gè)全棧工程師,老徐是從更高的角度來(lái)講解測(cè)試自動(dòng)化,將編程語(yǔ)言、軟件測(cè)試、軟件工程、面向?qū)ο笤O(shè)計(jì)、團(tuán)隊(duì)協(xié)作和軟件應(yīng)用場(chǎng)景講解得清晰而透徹。在文字描述上,本書(shū)盡量規(guī)避了正確但晦澀的專業(yè)術(shù)語(yǔ)表達(dá),而是盡量用生活化的場(chǎng)景來(lái)生動(dòng)講解,這讓本書(shū)在保持高技術(shù)水準(zhǔn)的同時(shí),也非常有特色。值得推薦!
張國(guó)強(qiáng),中科創(chuàng)達(dá)戰(zhàn)略合作顧問(wèn)
前 言
對(duì)于任何一支軟件工程團(tuán)隊(duì)來(lái)說(shuō),軟件測(cè)試都是必須認(rèn)真對(duì)待的環(huán)節(jié)。自動(dòng)化測(cè)試由于能夠減少重復(fù)人工勞動(dòng)、提高測(cè)試執(zhí)行效率、加快軟件發(fā)布速度,成為軟件工程團(tuán)隊(duì)努力追求的目標(biāo)。
Python是一種強(qiáng)大而簡(jiǎn)潔的編程語(yǔ)言。因?yàn)楣δ軓?qiáng)大、適用面廣,它在眾多領(lǐng)域得到了廣泛的應(yīng)用;因?yàn)檎Z(yǔ)法簡(jiǎn)潔、容易上手,它受到了許多人的青睞,其中就包括軟件測(cè)試工程師。
在實(shí)際工作中,有很多測(cè)試工程師會(huì)做簡(jiǎn)單的Web UI測(cè)試,會(huì)用Python寫腳本把一些重復(fù)的操作自動(dòng)化,會(huì)用PyTest測(cè)試框架的基本功能來(lái)寫測(cè)試用例,這些都在一定程度上減少了手工重復(fù)勞動(dòng),這是值得肯定的。但是作為工程師,我們追求的是更高效,而不是更熟練,我們需要不斷學(xué)習(xí)和思考如何更好地實(shí)施自動(dòng)化測(cè)試。本書(shū)用Python3作為演示語(yǔ)言,講解如何實(shí)施系統(tǒng)、高效、可靠、易于理解和管理的軟件自動(dòng)化測(cè)試。
本書(shū)的內(nèi)容分為三個(gè)大的板塊。
個(gè)板塊,從基礎(chǔ)的部分講起,讓基礎(chǔ)薄弱的工程師對(duì)測(cè)試和編程語(yǔ)言有基本的認(rèn)識(shí),可以用Python把一些常見(jiàn)的編程需求實(shí)現(xiàn)出來(lái)。在此基礎(chǔ)上,我們開(kāi)始了解PyTest測(cè)試框架的基礎(chǔ)用法,以及如何用Selenium來(lái)做簡(jiǎn)單的Web UI自動(dòng)化測(cè)試。通過(guò)這個(gè)板塊的學(xué)習(xí),測(cè)試工程師有能力把一些簡(jiǎn)單的測(cè)試工作用代碼來(lái)實(shí)現(xiàn),減少手工重復(fù)勞動(dòng)的比重,做到一定程度的測(cè)試自動(dòng)化,這是對(duì)自動(dòng)化測(cè)試工程師的入門要求。
第二個(gè)板塊,夯實(shí)Python語(yǔ)言基礎(chǔ),講解更深入的PyTest和Selenium特性,演示如何應(yīng)用這些知識(shí)來(lái)改進(jìn)測(cè)試用例的編寫,改善測(cè)試框架,讓測(cè)試自動(dòng)化更加高效。通過(guò)對(duì)這個(gè)板塊的學(xué)習(xí),測(cè)試工程師對(duì)編程語(yǔ)言和測(cè)試工具會(huì)有更深入的了解,從而更高效地進(jìn)行測(cè)試自動(dòng)化的工作,開(kāi)始有能力針對(duì)產(chǎn)品特性來(lái)設(shè)計(jì)自動(dòng)化測(cè)試框架,這是工程團(tuán)隊(duì)對(duì)中級(jí)測(cè)試工程師的一般要求。
第三個(gè)板塊,介紹Python的高級(jí)特性、面向?qū)ο蟮乃枷、自?dòng)化測(cè)試工具和框架的高級(jí)特性、設(shè)計(jì)思路、存在的問(wèn)題和限制及其改進(jìn)思路、工程團(tuán)隊(duì)的高質(zhì)量協(xié)作、實(shí)際項(xiàng)目中的實(shí)踐等更深入的內(nèi)容。這部分包含了實(shí)戰(zhàn)中提煉出來(lái)的大量經(jīng)驗(yàn)和總結(jié)。通過(guò)對(duì)這個(gè)板塊的學(xué)習(xí),測(cè)試工程師可以向高級(jí)工程師和架構(gòu)師方向邁出堅(jiān)實(shí)的一步。具備這樣的技術(shù)能力和思維方式后,測(cè)試工程師可以在整個(gè)軟件工程團(tuán)隊(duì)中起到非常積極的作用,而不只限于測(cè)試團(tuán)隊(duì)。
每個(gè)板塊的末尾都有一個(gè)實(shí)戰(zhàn)章節(jié),所有的實(shí)戰(zhàn)章節(jié)都圍繞同一個(gè)測(cè)試場(chǎng)景展開(kāi),前后銜接呼應(yīng),有很強(qiáng)的延續(xù)性。每個(gè)實(shí)戰(zhàn)章節(jié)都是針對(duì)相應(yīng)的技術(shù)水平而設(shè)計(jì)的,讀者可以非常直觀地看到代碼和設(shè)計(jì)如何隨著技術(shù)水平的提升而改進(jìn)。
本書(shū)盡量用生活化的場(chǎng)景來(lái)描述編程場(chǎng)景,避免正確但是晦澀的表達(dá),避免直接拋出結(jié)論,而是用實(shí)戰(zhàn)項(xiàng)目來(lái)演示軟件開(kāi)發(fā)和測(cè)試的思路, 用簡(jiǎn)單可行的思路引導(dǎo)讀者去一步步嘗試和驗(yàn)證,終得到可以理解的結(jié)果。
編程語(yǔ)言和工具在不斷快速演進(jìn),學(xué)習(xí)解決問(wèn)題的思路遠(yuǎn)比直接學(xué)習(xí)結(jié)論重要。本書(shū)針對(duì)常見(jiàn)的編程和測(cè)試場(chǎng)景講解Python的代碼實(shí)現(xiàn),但是不會(huì)事無(wú)巨細(xì)地列舉所有的邊角語(yǔ)言特性。同時(shí),本書(shū)會(huì)嘗試分析常見(jiàn)的代碼和測(cè)試思路,分析其中的不足,提出改進(jìn)思路,引導(dǎo)讀者理解實(shí)際項(xiàng)目中的開(kāi)發(fā)、測(cè)試和協(xié)作方式。在某些內(nèi)容的講解中,本書(shū)會(huì)嘗試比較Python和其他主流編程語(yǔ)言(比如Java),分析Python獨(dú)特的語(yǔ)言特性,也會(huì)講解Selenium和PyTest這樣的測(cè)試框架和工具在項(xiàng)目實(shí)踐中的問(wèn)題,以及相應(yīng)的解決思路。
對(duì)于相關(guān)的專業(yè)術(shù)語(yǔ),本書(shū)會(huì)盡量用中文表達(dá)。但是有一些術(shù)語(yǔ)如果翻譯成中文可能并不傳神,在實(shí)際工作中也不常用,并不會(huì)幫助讀者更好地理解它們的含義,對(duì)于這種情況,本書(shū)會(huì)直接用英文表達(dá),詳細(xì)介紹可參見(jiàn)后面的術(shù)語(yǔ)表。
本書(shū)希望讀者有基本的編程和軟件測(cè)試經(jīng)驗(yàn),更重要的是,要有在軟件測(cè)試的職業(yè)道路上走得更遠(yuǎn)的意愿。
在寫作本書(shū)的準(zhǔn)備過(guò)程中,我得到了許多朋友的幫助和鼓勵(lì),這讓我下定決心動(dòng)筆,逐步厘清寫書(shū)的思路,完善自己的知識(shí)體系,直至終成書(shū)。
謹(jǐn)以此書(shū),致謝宋寶華、張國(guó)強(qiáng)、劉勃、黃巍、王錄華、盧鵬、劉濤、何昭然、曾昭毅、邱鵬、周宇、劉陽(yáng)、李潔、劉靜、甘露、Bryan Turner、Jeff Strater、Daniel Toms、任俊、劉保良、劉春濤、劉志鵬、郝洛玫、周麗、李真真、徐欣、陳然、張翔、張立兵、劉軍、楊文镕等親友,感謝你們?cè)诩夹g(shù)和職業(yè)發(fā)展上對(duì)我的幫助和鼓勵(lì)。謹(jǐn)以此書(shū),致謝我的鐵匠鋪籃球隊(duì)的隊(duì)友們,因?yàn)橛心銈兌嗄甑呐惆楹凸膭?lì),我才對(duì)鍛煉身體沒(méi)有懈怠,才能以良好的身體狀態(tài)持續(xù)投入編程和寫書(shū)的世界中。謹(jǐn)以此書(shū),向我的父母、岳父母、兄嫂、姐姐和姐夫致謝,你們的言傳身教給了我努力的方向。謹(jǐn)以此書(shū),向我的兒子致遠(yuǎn)和女兒致雅表達(dá)感激,在陪伴你們成長(zhǎng)的過(guò)程中,我的內(nèi)心也成長(zhǎng)了。謹(jǐn)以此書(shū),向我的秀外慧中的大當(dāng)家劉璐致以無(wú)盡感激,因?yàn)橛心銦o(wú)怨無(wú)悔的付出和全力支持,我才能把工作之余本應(yīng)該陪伴家人的時(shí)間騰挪出來(lái),花費(fèi)一年多的時(shí)間寫完這本書(shū)。后,對(duì)為本書(shū)做出巨大貢獻(xiàn)的策劃朱捷老師致以深深的謝意,因?yàn)橛心銖膶I(yè)的角度不斷給我中肯的反饋,我才能不斷完善和打磨書(shū)稿,竭力為讀者呈現(xiàn)有質(zhì)量的內(nèi)容。
限于篇幅,我無(wú)法一一列舉所有想要感謝的人,但我一直心懷感恩,這些年里,我從你們身上學(xué)會(huì)了很多,收獲了很多,是你們激勵(lì)我不斷前行,努力跟上你們的腳步。
本書(shū)基于我的學(xué)習(xí)和工作經(jīng)驗(yàn)總結(jié)而成,但是因?yàn)楝F(xiàn)實(shí)世界里的軟件項(xiàng)目多種多樣,而我本人受限于所涉及的項(xiàng)目類型和技術(shù)視野,加之時(shí)間倉(cāng)促,書(shū)中難免有錯(cuò)誤和疏漏,懇請(qǐng)廣大讀者批評(píng)指正。我的郵箱是mac.xxn@outlook.com,歡迎大家和我討論相關(guān)的技術(shù)問(wèn)題,我會(huì)非常樂(lè)意和大家交流分享。
序一
序二
前言
第1章 軟件測(cè)試基礎(chǔ) 1
1.1 什么是軟件測(cè)試1
1.2 軟件測(cè)試的類型2
1.2.1 按測(cè)試對(duì)象的顆粒度劃分2
1.2.2 按內(nèi)部邏輯的透明度劃分3
1.2.3 按執(zhí)行階段劃分4
1.2.4 按執(zhí)行方式劃分4
1.3 敏捷開(kāi)發(fā)模式5
1.4 測(cè)試經(jīng)濟(jì)學(xué)6
1.4.1 測(cè)試是必需的嗎6
1.4.2 放棄追求完美7
1.4.3 關(guān)注核心功能8
1.4.4 等價(jià)類劃分8
1.4.5 邊界值分析9
1.4.6 用機(jī)器取代人工10
1.5 自動(dòng)化測(cè)試不容易12
1.6 本章小結(jié)12
第2章 Python入門 13
2.1 世界上好的兩種編程語(yǔ)言13
2.2 別問(wèn)我怎么安裝14
2.3 解釋器是什么14
2.4 初識(shí)變量16
2.5 函數(shù)基礎(chǔ)17
2.6 代碼縮進(jìn)和代碼塊18
2.7 字符串19
2.7.1 拼接和格式化21
2.7.2 下標(biāo)訪問(wèn)22
2.7.3 更多常見(jiàn)操作23
2.8 數(shù)值類型26
2.8.1 數(shù)值類型的基本運(yùn)算27
2.8.2 浮點(diǎn)數(shù)的常見(jiàn)運(yùn)算29
2.9 布爾值和條件判斷32
2.9.1 條件判斷的組合33
2.9.2 條件判斷的短路34
2.9.3 條件判斷的鏈?zhǔn)奖磉_(dá)35
2.10 日期和時(shí)間36
2.10.1 生成時(shí)間對(duì)象37
2.10.2 格式化日期字符串38
2.11 list基礎(chǔ)39
2.11.1 下標(biāo)訪問(wèn)40
2.11.2 插入元素40
2.11.3 刪除元素41
2.11.4 簡(jiǎn)單排序42
2.11.5 更多常見(jiàn)操作43
2.11.6 遍歷44
2.11.7 元素類型46
2.12 dict基礎(chǔ)47
2.12.1 讀取48
2.12.2 插入和更新49
2.12.3 合并50
2.12.4 刪除51
2.12.5 遍歷53
2.12.6 key的選擇55
2.13 循環(huán)56
2.13.1 while循環(huán)57
2.13.2 for循環(huán)58
2.13.3 多重循環(huán)59
2.13.4 循環(huán)的終止60
2.13.5 遞歸63
2.14 異常63
2.14.1 基本語(yǔ)法64
2.14.2 異常的類型67
2.14.3 捕獲特定類型的異常68
2.14.4 主動(dòng)拋出異常71
2.15 斷言72
2.15.1 assertion72
2.15.2 AssertionError73
2.15.3 assert73
2.16 pip的基礎(chǔ)用法74
2.17 本章小結(jié)76
第3章 PyTest入門 77
3.1 框架是什么77
3.2 測(cè)試框架77
3.2.1 篩選測(cè)試源文件77
3.2.2 篩選測(cè)試函數(shù)78
3.2.3 測(cè)試函數(shù)的啟動(dòng)79
3.2.4 成功還是失敗80
3.2.5 測(cè)試報(bào)告80
3.2.6 測(cè)試前的環(huán)境配置81
3.2.7 測(cè)試后的現(xiàn)場(chǎng)清理81
3.2.8 核心功能的擴(kuò)充82
3.2.9 主流測(cè)試框架82
3.3 PyTest是什么83
3.4 自動(dòng)發(fā)現(xiàn)84
3.4.1 自動(dòng)發(fā)現(xiàn)測(cè)試源文件84
3.4.2 自動(dòng)發(fā)現(xiàn)測(cè)試函數(shù)84
3.5 使用斷言85
3.6 測(cè)試結(jié)果解讀86
3.7 測(cè)試報(bào)告88
3.8 本章小結(jié)89
第4章 Selenium入門 90
4.1 Selenium是什么90
4.1.1 Selenium IDE91
4.1.2 Selenium Grid97
4.1.3 Web Driver98
4.2 Selenium的安裝配置99
4.3 用Web Driver驅(qū)動(dòng)網(wǎng)頁(yè)100
4.4 頁(yè)面元素的定位102
4.4.1 簡(jiǎn)單定位102
4.4.2 CSS定位107
4.5 頁(yè)面元素的常見(jiàn)操作108
4.6 本章小結(jié)112
第5章 實(shí)戰(zhàn)12306之入門篇 113
5.1 測(cè)試用例設(shè)計(jì)文檔113
5.2 代碼實(shí)戰(zhàn)114
5.3 代碼解析116
5.3.1 審視測(cè)試邏輯116
5.3.2 用變量澄清代碼邏輯117
5.3.3 DRY原則118
5.3.4 改善代碼可讀性120
5.4 本章小結(jié)122
第6章 Python進(jìn)階 123
6.1 基本數(shù)據(jù)類型的深入了解123
6.1.1 轉(zhuǎn)義字符123
6.1.2 字符串的不可變性124
6.1.3 深入了解布爾類型126
6.1.4 set128
6.1.5 tuple131
6.1.6 整型數(shù)的設(shè)計(jì)很優(yōu)秀132
6.1.7 浮點(diǎn)數(shù)為什么算不準(zhǔn)133
6.1.8 Decimal,準(zhǔn)!134
6.2 深入了解函數(shù)137
6.2.1 函數(shù)的調(diào)用137
6.2.2 函數(shù)的返回138
6.2.3 不支持函數(shù)重載139
6.2.4 默認(rèn)參數(shù)141
6.2.5 可變參數(shù)142
6.3 關(guān)于時(shí)間144
6.3.1 時(shí)間差144
6.3.2 UTC時(shí)間146
6.4 面向?qū)ο蠡A(chǔ)148
6.4.1 面向?qū)ο蟮降资鞘裁匆馑?48
6.4.2 類和對(duì)象148
6.4.3 初始化函數(shù)149
6.5 模塊是什么151
6.6 高級(jí)排序153
6.6.1 list的排序153
6.6.2 dict的排序157
6.6.3 自定義對(duì)象序列的排序159
6.7 復(fù)雜的遍歷場(chǎng)景160
6.7.1 一邊遍歷一邊修改160
6.7.2 一邊遍歷一邊刪除162
6.8 文件和文件系統(tǒng)操作基礎(chǔ)165
6.8.1 路徑的正確操作方式165
6.8.2 文件系統(tǒng)的基本操作168
6.8.3 文本文件的讀169
6.8.4 文本文件的寫170
6.8.5 文本文件的關(guān)閉171
6.8.6 CSV文件的讀寫172
6.8.7 Excel文件的讀寫174
6.9 淺拷貝與深拷貝176
6.10 深入了解import179
6.11 變量的作用域182
6.12 局部變量和全局變量的沖突185
6.13 __name__和__main__186
6.14 注釋188
6.15 pip的工程用法190
6.16 本章小結(jié)192
第7章 PyTest進(jìn)階 193
7.1 自動(dòng)發(fā)現(xiàn)測(cè)試類193
7.2 測(cè)試集合194
7.3 標(biāo)記195
7.3.1 忽略執(zhí)行195
7.3.2 條件執(zhí)行197
7.3.3 期待失敗的發(fā)生199
7.3.4 限時(shí)執(zhí)行201
7.3.5 自定義標(biāo)簽201
7.4 參數(shù)化測(cè)試204
7.5 測(cè)試用例的ID206
7.6 Fixture初探207
7.7 PyTest的插件機(jī)制209
7.7.1 Hook函數(shù)209
7.7.2 PyTest插件210
7.7.3 多級(jí)conftest協(xié)同210
7.7.4 第三方插件212
7.8 本章小結(jié)213
第8章 Selenium進(jìn)階 214
8.1 頁(yè)面元素的XPath定位214
8.2 頁(yè)面元素的等待215
8.2.1 隱式等待216
8.2.2 顯式等待216
8.3 Selenium的局限218
8.4 本章小結(jié)219
第9章 實(shí)戰(zhàn)12306之進(jìn)階篇 220
9.1 PO設(shè)計(jì)模式220
9.2 更有針對(duì)性的顯式等待223
9.3 更健壯的代碼邏輯224
9.4 函數(shù)單一職責(zé)原則225
9.5 測(cè)試單一職責(zé)原則226
9.6 本章小結(jié)227
第10章 Python高階 228
10.1 面向?qū)ο笤O(shè)計(jì)思想228
10.1.1 繼承228
10.1.2 封裝230
10.1.3 多態(tài)232
10.2 對(duì)類的深入了解233
10.2.1 析構(gòu)函數(shù)233
10.2.2 訪問(wèn)權(quán)限控制235
10.2.3 self不是關(guān)鍵字236
10.2.4 實(shí)例屬性和類屬性239
10.2.5 成員方法和類方法240
10.2.6 類方法和靜態(tài)方法242
10.3 重寫244
10.3.1 如何重寫244
10.3.2 重寫中的代碼復(fù)用247
10.3.3 重寫__str__方法249
10.3.4 重寫運(yùn)算符249
10.4 深入了解函數(shù)252
10.4.1 函數(shù)也是一種對(duì)象252
10.4.2 內(nèi)嵌函數(shù)254
10.4.3 函數(shù)裝飾器255
10.4.4 不只是會(huì)裝飾259
10.4.5 用Property裝飾器改進(jìn)設(shè)計(jì)261
10.5 None是什么264
10.6 Enum是什么265
10.7 Python不支持常量267
10.8 隨機(jī)數(shù)據(jù)和時(shí)間戳268
10.9 自定義異常類型270
10.10 需要用強(qiáng)類型嗎271
10.11 日志272
10.12 本章小結(jié)277
第11章 測(cè)試框架的設(shè)計(jì)和演進(jìn) 278
11.1 代碼的可讀性278
11.1.1 統(tǒng)一的代碼風(fēng)格279
11.1.2 丑陋的函數(shù)名280
11.1.3 糟糕的變量名282
11.2 友好的函數(shù)設(shè)計(jì)283
11.2.1 簡(jiǎn)潔的接口283
11.2.2 操作狀態(tài)的處理285
11.2.3 不要過(guò)度設(shè)計(jì)287
11.2.4 防呆288
11.3 有效管理測(cè)試資源290
11.3.1 封裝微服務(wù)290
11.3.2 統(tǒng)一的資源入口295
11.3.3 資源的延遲加載296
11.3.4 保證資源的釋放298
11.3.5 支持多環(huán)境測(cè)試300
11.3.6 容忍不穩(wěn)定的測(cè)試環(huán)境302
11.4 不要引入getter和setter304
11.5 一次收集多個(gè)斷言錯(cuò)誤306
11.6 日志的支持和改進(jìn)308
11.7 減少重復(fù)執(zhí)行的負(fù)面影響310
11.8 數(shù)據(jù)驅(qū)動(dòng)測(cè)試的設(shè)計(jì)311
11.8.1 讓PyTest支持中文ID311
11.8.2 更優(yōu)雅的參數(shù)化測(cè)試314
11.8.3 用YML取代JSON316
11.8.4 面向?qū)ο蟮臏y(cè)試數(shù)據(jù)317
11.9 接受一定程度的重復(fù)代碼319
11.10 本章小結(jié)320
第12章 實(shí)戰(zhàn)12306之高階篇 321
12.1 就近原則321
12.2 用Enum澄清設(shè)計(jì)意圖322
12.3 支持鏈?zhǔn)奖磉_(dá)324
12.4 簡(jiǎn)化函數(shù)名325
12.5 封裝復(fù)雜邏輯326
12.6 單例設(shè)計(jì)模式328
12.7 異常和斷言的使用場(chǎng)景的區(qū)別331
12.8 測(cè)試用例的維護(hù)333
12.9 本章小結(jié)334
術(shù)語(yǔ)表 335
參考文獻(xiàn) 336
后記 337