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