本書主要包含三部分內(nèi)容,*部分為Python編程基礎(chǔ),第二部分是HTTP協(xié)議,第三部分是HTTP接口測試實戰(zhàn)。讓讀者可以從零開始,逐步掌握Python語言,具備基本的Python編程基礎(chǔ)。通過練習的方式了解HTTP協(xié)議中常用的概念和機制。*后,將兩者相結(jié)合,學會用Python進行HTTP接口測試,主要采用Python的單元測試方法進行HTTP接口測試工作,通過一步一步的練習,讀者會掌握unittest單元測試框架的使用,掌握測試數(shù)據(jù)的外部化(到文件和到Excel等),掌握HTTP接口的發(fā)現(xiàn)和探測。 本書亦學亦練,學練結(jié)合,每個章節(jié)分為多個小節(jié),每個小節(jié)的前半部分會對本小節(jié)的知識點主題進行詳細的介紹,后半部分會啟動一個練習,讓讀者邊閱讀邊練習,在練習中檢驗學習的成果。
本書是資深互聯(lián)網(wǎng)高級工程師阿奎結(jié)合自己多年的經(jīng)驗寫就的一本指導(dǎo)初學者學習Python編程和自動化測試中的HTTP接口測試的書。通過闖關(guān)游戲式的獨特學習模式,通過在線讀者圈增值服務(wù),指導(dǎo)讀者掌握高效學習計算機編程和應(yīng)用。
序一
身處軟件開發(fā)這個頗具顛覆性的行業(yè),又恰逢智能技術(shù)的爆發(fā)期,很多認知都在被刷新著。和阿奎相識源于組織的敏捷轉(zhuǎn)型合作,初幾次見面印象是此人技術(shù)問得很細,聊了很多關(guān)于代碼重構(gòu)和自動化測試的觀點,這可能也是敏捷圈子里最能夠試探彼此是否為圈內(nèi)人士的方法。那個時候關(guān)于測試已死的觀點還是頗為流行的,當然意思是傳統(tǒng)的人肉測試最終都會被自動化測試所取代,而開發(fā)人員通過測試驅(qū)動開發(fā)這樣的技術(shù)實踐自然就能生成自動化測試集,那專職測試還留著作甚?
前兩周圈子里的人工智能專家給我轉(zhuǎn)來一篇論文,快速掃描后大意是一組科研人員正通過語義和圖形分析的技術(shù)對算法類論文進行直接算法生成,也就是說給這程序一個算法描述,它就還你一個真正的算法實現(xiàn)。當然現(xiàn)實中給一個高保真網(wǎng)頁圖片,還你一個真實網(wǎng)站的在線服務(wù)已經(jīng)存在了。稍加思索你會得出一個具有諷刺意味的推論:是不是開發(fā)已死?具備一定智能的程序已經(jīng)可以自己產(chǎn)生相應(yīng)的程序了。而測試卻好像并沒有死,反而這兩年從探索性測試到針對新交互渠道的感知測試還越來越火了。
看到這本書的時候,很高興當年和阿奎討論的一個觀點現(xiàn)在仍然是對的,那就是測試人員必須寫代碼。不管是現(xiàn)代的分布式互聯(lián)網(wǎng)應(yīng)用,還是即將到來的物聯(lián)網(wǎng)設(shè)備,其測試的難度都提升了很多,甚至可以說如果不采用自動化的程序是不可能進行有效測試的。想像一下把應(yīng)用商城刷積分的人肉模式復(fù)制到未來一平米可能有上萬個物聯(lián)網(wǎng)設(shè)備接入的場景下,你可能需要一個Alpha Go來完成這樣的人肉測試。有幸的是我認識了幾位把測試人員寫代碼真正貫徹和執(zhí)行下去的管理者,阿奎就是其中一位。
Python作為編程語言自不用多講,曾經(jīng)在測試領(lǐng)域因為其靈活性大受歡迎,積累了不少有用的測試庫,即使現(xiàn)在很多項目上我們還會日常使用。而大數(shù)據(jù)時代的來到更催生了這門語言的學習熱潮,不少業(yè)務(wù)人員開始學習Python作為數(shù)據(jù)分析的編程語言。時下的大數(shù)據(jù)分析不同于之前既定規(guī)則的數(shù)據(jù)處理,更多是在大數(shù)據(jù)中去挖掘和探索,某種意義上我們又何嘗不可以說是在進行數(shù)據(jù)測試呢?所以學習Python應(yīng)該是符合時代背景高投入產(chǎn)出比的事情。
從互聯(lián)網(wǎng)到移動互聯(lián)網(wǎng),再到物聯(lián)網(wǎng),很多技術(shù)都會被改變,最有可能持續(xù)發(fā)光發(fā)熱的組件可能就是我們的應(yīng)用通信協(xié)議HTTP了。針對HTTP通信的接口測試也是最常見的,經(jīng)常也是最繁瑣的。學習如何進行有效的自動化是避免自己被機器人取代的必備技能。
最后,很感謝阿奎把自己的學習心得和方法也融匯到了此書中。刻意練習是技術(shù)學習的不二竅門,如何堅持確是相當有難度的一件事情。和廣大讀者一樣,阿奎并非身處一個純粹的技術(shù)公司,日常有很多的管理會議和業(yè)務(wù)需求,所以他的學習經(jīng)驗分享更值得大家借鑒和試驗。
肖然
精益敏捷專家
ThoughtWorks咨詢與設(shè)計總監(jiān)
序二
轉(zhuǎn)眼,阿奎工作已經(jīng)13個年頭了,先后做過程序員、軟件工程師、團隊經(jīng)理,現(xiàn)在是一名系統(tǒng)分析師和內(nèi)部敏捷教練,積極地參與組織中的敏捷實踐和推廣工作。
在擔任團隊經(jīng)理期間,阿奎先后帶過C/C 、Cobol和Java為開發(fā)語言的開發(fā)團隊,多年來一直保持對技術(shù)研發(fā)工作的熱愛。最有意思的是,多年以前他還在一個以主機COBOL為開發(fā)語言的部門的時候,竟然會去參加以Java為語言棧的編程大賽。
接觸最多的是2013年調(diào)到新技術(shù)實驗室的時候,那個時候互聯(lián)網(wǎng)金融風頭正盛,敏捷開發(fā)方法作為一種新的軟件開發(fā)方法,正在被各個大型企業(yè)所認可和嘗試。那是他接觸敏捷的緣起,甚至可以說也是這本書的緣起。
阿奎自2013年開始從事敏捷實踐和推廣工作,他將自己定位為一名技術(shù)性管理者,在從事團隊管理的同時,一直保持著對各種新技術(shù)的關(guān)注,在工作中對于如何提升團隊的工作效率也多有思考。眾所周知,敏捷開發(fā)轉(zhuǎn)變的核心在于人的轉(zhuǎn)變,而在人的轉(zhuǎn)變過程中,人員能力的提升和對新的開發(fā)模式的適應(yīng)又是尤為重要的。
隨著敏捷、精益、DevOps等新的軟件開發(fā)理念的盛行,軟件測試的從業(yè)人員也正在經(jīng)歷工作環(huán)境和工作要求的改變。這種改變需要軟件測試從業(yè)者成為真正的IT人,具備計算機基礎(chǔ)理論知識和網(wǎng)絡(luò)知識,掌握一門編程語言,熟悉一個操作系統(tǒng)和一個數(shù)據(jù)庫。
環(huán)顧業(yè)內(nèi),很多軟件測試從業(yè)者都正在經(jīng)歷從點點點工程師到自動化測試工程師的轉(zhuǎn)變,這個轉(zhuǎn)變是痛苦的,也是迷茫的。阿奎就是看到了這樣一個需要,利用去年下半年和今天一年的業(yè)余時間,寫了這本書,其中的每一個練習都是他精心設(shè)計的,并且都自己進行了實戰(zhàn)和解答。這本書是他專門針對沒有編程基礎(chǔ)的軟件測試工程師如何快速、高效地學會編程這一課題的一次實踐和有益的嘗試。
書中提到的闖關(guān)式學習實際上就是刻意練習的學習思想,在編程語言學習上的實地應(yīng)用,并且經(jīng)過他的一些實驗,取得了非常好的學習效果。
特別祝賀阿奎,能夠?qū)⒆约洪L期工作、學習的收獲和所得,通過一本書的形式進行一次總結(jié),特別是這樣一本幫助大家學習編程的書。
薛勇
主任工程師
中國銀行軟件中心
前 言
每個人都應(yīng)該花1年時間學習編程。
喬布斯
我一直以來有一個觀點,對于希望從事自動化測試工作或者希望掌握自動化測試技能的人士,掌握一門計算機語言是繞不過去的一個坎。就是這個坎,讓很多從事手工測試的工程師對于自動化測試工作望而卻步,這讓很多人不由自主地退而求其次,轉(zhuǎn)向去學習一些自動化測試的工具,來回避語言學習的困難。
看到身邊很多的測試工程師對待編程語言的學習畏之如虎,談之無力,讓我產(chǎn)生了為希望轉(zhuǎn)型成為自動化測試工程師的軟件測試從業(yè)者提供一本靠譜的編程語言學習指導(dǎo)書的想法。這也是促成這本書初稿形成的原始動力。
隨著信息技術(shù)的發(fā)展,計算機辦公技能成為一名現(xiàn)代白領(lǐng)工作者的必備技能,我們?nèi)粘9ぷ髦杏泻芏嗟臅r間都是在與計算機進行交互。通過對計算機語言的學習,可以為你打開一扇與計算機進行深層次互動交流的大門。同時,在編程語言的學習中,你會學到一種新的思考方式并找到另一種看待問題、解決問題的視角。
本書的內(nèi)容包含兩部分:Python編程基礎(chǔ)和基于Python的HTTP接口測試。
在Python編程基礎(chǔ)部分,主要關(guān)注Python語言的基礎(chǔ)知識的學習和掌握,這一部分對于每一名希望快速掌握一門計算機語言的學習者都是適用的。
基于Python的HTTP接口測試部分,重點面向希望轉(zhuǎn)型為自動化測試工程師的軟件測試從業(yè)者,以HTTP接口測試為應(yīng)用場景,來學習和掌握Python的相關(guān)知識點和使用技巧。
本書以闖關(guān)式學習方法為指導(dǎo)進行編寫,讓讀者通過一個一個小的關(guān)卡的刻意練習,在不知不覺中掌握Python編程基礎(chǔ)和HTTP接口測試的相關(guān)技能,完成從手工測試工程師到自動化測試工程師的轉(zhuǎn)變。
所謂闖關(guān)式學習方法,通俗地講,就是通過不斷的刻意練習,打通一個一個的練習關(guān)卡來進行自我提升和學習的方法。闖關(guān)式學習方法首先要求有一名有經(jīng)驗的指導(dǎo)者,針對學習目標刻意設(shè)計的一個又一個的練習關(guān)卡,即挑戰(zhàn)問題,讀者通過一定的前期知識的學習和練習后,在給定的時間內(nèi)對第一個關(guān)卡的問題發(fā)起挑戰(zhàn),即闖關(guān)。如果給定的時間內(nèi)不能有效地完成挑戰(zhàn)問題,就需要反復(fù)的刻意練習,直至輕松完成挑戰(zhàn)問題為止,即闖關(guān)成功。此時,進入下一個練習關(guān)卡。
我一直認為,學習軟件開發(fā)、測試技能,和學習騎自行車、游泳一樣,是一項技能的修煉,而非僅僅是知識或者概念的掌握,而要習得一項技能需要刻意地練習。
作家格拉德威爾在《異類》一書中指出:人們眼中的天才之所以卓越非凡,并非天資超人一等,而是付出了持續(xù)不斷的努力。1萬小時的錘煉是任何人從平凡變成超凡的必要條件。他將此稱為一萬小時定律。要成為某個領(lǐng)域的專家,需要10000小時,按比例計算就是:如果每天工作八個小時,一周工作五天,那么成為一個領(lǐng)域的專家至少需要五年。
我并不是想用這段引用來告訴大家,成為自動化測試工程師也需要五年的時間,而是希望大家看到其中錘煉一詞的深意成就超凡技藝的過程,實際上是一個錘煉的過程,也就是刻意練習的過程。
既然叫做刻意練習,有別于隨意的練習。隨意的練習并不能帶來有效的學習和精進,并且會浪費時間,打擊練習者的信心。沒有任何有效的學習和精進的過程是愜意的,不需要付出努力的,要做到刻意練習有如下四個要點:
● 有目的的練習。刻意練習一定是針對某一個既定的目的進行練習,即每一個練習都是有具體目標的。
● 精神高度集中的練習。刻意練習一定是需要練習者精神高度集中,全身心投入的,只有這樣才能帶來學習上的領(lǐng)悟和突破。
● 反復(fù)的練習。在以上兩點的基礎(chǔ)上,重復(fù)的練習是技藝提升不可缺少的一環(huán),沒有什么技巧性的技藝是一次就可以完全掌握和徹底領(lǐng)悟的,編程尤其如此。只有通過不斷的重復(fù)的練習才將編程中用到的一些基本的概念和模式變成自己的肌肉記憶和大腦反射。
● 獲得有效反饋的練習。反復(fù)練習中,還需要有效的反饋來確定練習是否取得了進展,這種反饋一方面可以促進練習者更好的堅持練習,另一方面也可以告訴練習者,練習到什么程度就夠了。
以上也是闖關(guān)式學習方法的理論依據(jù)和本書設(shè)計編寫的初衷。
編程作為一門技藝,是可以習得的,習得是有方法的,即刻意練習!但是,沒有任何有效的學習和精進的過程是愜意的和不需要付出努力的。
這是一本針對Python編程基礎(chǔ)和HTTP接口測試技能,進行刻意練習的學習指南,這不是一本可以靠在沙發(fā)上閱讀的消遣書。
作者自2004年4月-至今 一直在中國銀行軟件中心從事銀行系統(tǒng)軟件開發(fā)工作,歷任程序員,軟件工程師,團隊經(jīng)理,系統(tǒng)分析師。2013-2016年度,主要從事互聯(lián)網(wǎng)技術(shù)在銀行業(yè)的應(yīng)用開發(fā)工作,參與系統(tǒng)分析和架構(gòu)設(shè)計,負責敏捷開發(fā)工藝的推廣和團隊管理工作。在軟件開發(fā)、技術(shù)團隊管理和培訓方面有豐富的經(jīng)驗和獨到的心得。
目 錄
第一部分 初識與初心
第一章 Python正流行2
1.1 語言排行榜與技術(shù)雷達2
1.2 Python之禪5
1.3 無所不能的Python8
第二章 接口測試的崛起9
2.1 接口測試簡介9
2.2 Ajax接口與Web動靜分離10
2.3 Restful接口11
第三章 測試工程師的自動化測試轉(zhuǎn)型13
3.1 點點點測試工程師的困惑13
3.2 自動化測試到底要學什么14
3.3 擺脫點點點從哪里開始16
第二部分 認識Python
第四章 我來了20
4.1 第一聲問候20
4.2 小青,你幾歲了?23
4.3 我會做加法28
4.4 這是奇數(shù)還是偶數(shù)?30
4.5 我們?nèi)齻誰最大32
4.6 FizzBuzz36
4.7 建造星星塔39
第五章 我長大了43
5.1 函數(shù)是枝葉43
5.2 模塊是枝干51
5.3 面向?qū)ο笫橇硪环N看待世界的視角53
第六章 我想和你談?wù)?5
6.1 終端帶來即時交互55
6.2 文件適用于批量交互57
6.3 處理異常不要崩潰60
第三部分 初識HTTP
第七章 相識前的準備70
7.1 JSON格式的通信錄70
7.2 狀態(tài)碼的五個分類74
7.3 HTTP協(xié)議基礎(chǔ)77
第八章 交談開始85
8.1 我知道你是哪里人85
8.2 請查收我的POST87
8.3 厲害了,我的30291
8.4 把我藏在Cookies里96
8.5 讓我們保持通話101
第四部分 實踐HTTP接口測試
第九章 先要測起來112
9.1 認識自動化測試112
9.2 unittest(一)120
9.3 unittest(二)128
第十章 HTTP接口測試(無狀態(tài))133
10.1 接口約定133
10.2 案例編寫138
10.3 數(shù)據(jù)外化到文件147
10.4 數(shù)據(jù)外化到Excel156
第十一章 普通Web接口測試(有狀態(tài))165
11.1 接口探索165
11.2 在返回頁面中定位檢查點173
11.3 第一個測試案例181
11.4 更多測試案例185
11.5 重復(fù)執(zhí)行注冊失敗了193
11.6 命令行集成與HTML報告199
寫在后面的話207
這僅僅是一個開始207
附錄:參考資料209
附錄:學習心得210
第一部分 初識與初心1
第一章 Python正流行2
1.1 語言排行榜與技術(shù)雷達2
1.2 Python之禪5
1.3 無所不能的Python8
第二章 接口測試的崛起9
2.1 接口測試簡介9
2.2 Ajax接口與Web動靜分離10
2.3 Restful接口11
第三章 測試工程師的自動化測試轉(zhuǎn)型13
3.1 點點點測試工程師的困惑13
3.2 自動化測試到底要學什么14
3.3 擺脫點點點從哪里開始16
第二部分 認識Python19
第四章 我來了20
4.1 第一聲問候20
4.2 小青,你幾歲了?23
4.3 我會做加法28
4.4 這是奇數(shù)還是偶數(shù)?30
4.5 我們?nèi)齻誰最大32
4.6 FizzBuzz36
4.7 建造星星塔39
第五章 我長大了43
5.1 函數(shù)是枝葉43
5.2 模塊是枝干51
5.3 面向?qū)ο笫橇硪环N看待世界的視角53
第六章 我想和你談?wù)?5
6.1 終端帶來即時交互55
6.2 文件適用于批量交互57
6.3 處理異常不要崩潰60
第三部分 初識HTTP69
第七章 相識前的準備70
7.1 JSON格式的通信錄70
7.2 狀態(tài)碼的五個分類74
7.3 HTTP協(xié)議基礎(chǔ)77
第八章 交談開始85
8.1 我知道你是哪里人85
8.2 請查收我的POST87
8.3 厲害了,我的30291
8.4 把我藏在Cookies里96
8.5 讓我們保持通話101
第四部分 實踐HTTP接口測試111
第九章 先要測起來112
9.1 認識自動化測試112
9.2 unittest(一)120
9.3 unittest(二)128
第十章 HTTP接口測試(無狀態(tài))133
10.1 接口約定133
10.2 案例編寫138
10.3 數(shù)據(jù)外化到文件147
10.4 數(shù)據(jù)外化到Excel156
第十一章 普通Web接口測試(有狀態(tài))165
11.1 接口探索165
11.2 在返回頁面中定位檢查點173
11.3 第一個測試案例181
11.4 更多測試案例185
11.5 重復(fù)執(zhí)行注冊失敗了193
11.6 命令行集成與HTML報告199
寫在后面的話208
這僅僅是一個開始208
附錄:參考資料210