自學軟體測試怎麼學?

我現在在做網路推廣,剛從大學出來沒有找到工作就做了網路推廣,我以前學得是.net軟體開發,我想自學軟體測試從什麼地方入手


一、軟體測試基礎知識

要想進入測試這個行業,就必須要了解什麼是軟體測試,該如何測試?

這部分的學習目標:掌握軟體測試的基本概念、軟體測試的流程,並能熟練的應用常見的用例設計方法來設計測試用例。掌握常見的測試方法和類型,並知道如何進行每個階段的測試。

下面是推薦的參考書:

1、軟體測試(原書第2版) (美)佩騰(Patton,R.) 著,張小松 等譯

這本書可以用來作為進入行業的第一本書,本書講解的都是實用的技術,通過閱讀本書可以快速的去學會如何測試軟體。個人建議,這本書至少要讀3遍以上。

看完這本書,自己可以去找一個項目(可以到開源中國上查找)來測一測,應用一下學的知識,找一找缺陷。在測試這個項目中要體會一下測試的流程,學習如何搭建測試環境。

2、軟體測試的藝術(原書第3版) (美)梅耶 等

第二本就是這本軟體測試的「聖經」,這本書據說是矽谷測試人員必備的書。這本書最值得看的地方就是測試的思想。閱讀這本書可以讓你有豁然開朗的感覺。

3、計算機軟體測試(原書第2版) (美)卡尼爾

這本書也是值得一讀的,同樣也是非常適合初學者閱讀的。

4、全程軟體測試 朱少民

上面的都是外國人寫的,來本國產的。

還有很多經典的測試書,例如:Paul C.Jorgensen的軟體測試(第2版)這本書,但是筆者認為他不是很適合初學者,這本書都是用來做研究生教材的,做過一段測試的可以來看看。

二、軟體測試進階書籍

這部分主要是針對有過一年左右測試經驗的,真正測試過幾個項目的。推薦的參考書主要是提高測試效率的,一些測試的經驗。

1、有效軟體測試

這本書主要是給軟體測試的各個階段提出了一些建議,一共50條。這些建議都十分中肯,值得一讀。

2、軟體測試經驗與教訓

聽書名也應該了解了一大半了吧,這本書一共給出了293條經驗,閱讀它吧。它會讓你重新思考關於測試的基本理論。

還有一些很好的書籍了,但是沒有讀過的就不做推薦了。

三、自動化測試

我們都知道,目前自動化測試是軟體測試的趨勢,而且目前公司在招聘的過程中都會考察自動化相關的知識。這裡我們介紹一下QTP和Loadrunner等測試工具。

目標:掌握自動化測試的概念、流程和方法。能夠使用相關的工具進行自動化的測試。

QTP部分:

目標:掌握QTP的測試流程、工作原理和基本使用。能夠使用QTP進行自動化測試。進階需要掌握自動化框架設計的原理,並能獨立設計自動化框架。

目前網路資源很豐富,有很多前輩錄製了很多視頻,大家可以先來看看。

1、IT播吧 - 小強老師零基礎學習軟體測試系列視頻教程之QTP學習指南

首先可以先看這套視頻,這裡主要講的是QTP的基本使用。學習視頻的過程中,最好能夠獨立的測試QTP自帶的飛機訂票的例子。這個最好了,QTP的基本使用就沒問題了。

2、精通QTP——自動化測試技術領航 余傑 趙旭斌 編著

第一個視頻還是講的錄製和回放,並且也是以飛機訂票作為的例子,但是實際工作中,很少有錄製的項目,基本上都是需要自己開發腳本的。所以這本書會給你很大幫助的。

3、QTP自動化測試權威指南(第二版)

這本是QTP的大牛TarunLalwani的經典力作,公認的QTP測試的「聖經」。無論是初學者還是使用過QTP的都應該好好的讀一讀。

LoadRunner部分:

目標:掌握性能測試的常見術語,性能測試的方法和流程。能夠熟練使用Loadrunner。進階的話需要學會分析性能報表,找到性能瓶頸,進行性能調優。但是這個過程並不是看基本書就可以達到的,需要不斷的積累測試經驗才能做到的。(努力吧)

1、IT播吧 - 小強老師零基礎學習軟體測試系列視頻教程之Loadrunner學習指南

還是這個視頻,學過這個視頻基本上可以獨立的使用Loadrunner執行性能測試用例了。

2、精通軟體性能測試與LoadRunner最佳實戰

在來一本入門的書,這本書基本上算是Loadrunner的百科全書了吧,各個方面都有所涉及。

3、捉蟲記——大容量Web應用性能測試與LoadRunner實戰

這部分還需要掌握,類似QC這樣的測試管理工具和Mantis等缺陷管理工具。

自動化理論部分:

1、軟體測試自動化 (美)Daniel J.Mosley 等著

2、軟體自動化測試技術與實例詳解(一本很老的書)

3、自動化測試最佳實踐

四、其他技術

上面的是和軟體測試理論相關的知識,但是真正的想做好測試這些還是不夠,還有一些必須要掌握的知識,下面一一列舉一下。

1、數據的技術

目標:掌握SQL語句,重點在增刪改查上。可以參考:測試人員的SQL語言 系列

2、編程語言

這裡推薦的是Java,畢竟現在Java用的比較多。而且學會一門語言,在學習其他語言也是很容易的。

目標:掌握程序設計的邏輯和面向對象的思想。掌握一門語言。

目前這方面的視頻非常多,大家可以找來自己看看。

3、UML

UML還是必須要會的,至少應該能看懂。畢竟大部分需求都是用它畫的啊。

4、操作系統

這裡說的伺服器的系統,以Linux為例。

目標:能夠搭建常見的服務,解決相關故障。

推薦大家看《鳥哥的私房菜這個系列》,除此之外,還有學會Shell編程。

5、Web技術

如果測試Web,對Web還是需要了解的啊。主要是Html+Css+JavaScript。


學習軟體測試首先和背景無關。歡迎!

學習軟體測試建議先看以下幾本書。其一,成功高效人士的7個習慣

其二,微軟測試之道

其三,軟體測試用例設計 鄭文強出版。

先打好軟體測試設計思維,方法的基礎。然後再去學習各種工具才輔助測試。


http://www.zhihu.com/question/21103928/answer/116395056


本文主要說明的是從事軟體測試行業需要必備的知識,以及該如何學習,從入門到精通,主要給大家提供一些比較優秀的書籍,並給出學習的順序。並且也會附上有用的視頻教程,希望通過閱讀本文,讀者可以明確該如何學習測試,並學習哪些知識。由於僅是個人建議,如有錯誤不妥的地方,敬請提出批評。

一、軟體測試基礎知識

要想進入測試這個行業,就必須要了解什麼是軟體測試,該如何測試?

這部分的學習目標:掌握軟體測試的基本概念、軟體測試的流程,並能熟練的應用常見的用例設計方法來設計測試用例。掌握常見的測試方法和類型,並知道如何進行每個階段的測試。

下面是推薦的參考書:

1、軟體測試(原書第2版) (美)佩騰(Patton,R.) 著,張小松 等譯

這本書可以用來作為進入行業的第一本書,本書講解的都是實用的技術,通過閱讀本書可以快速的去學會如何測試軟體。個人建議,這本書至少要讀3遍以上。

看完這本書,自己可以去找一個項目(可以到開源中國上查找)來測一測,應用一下學的知識,找一找缺陷。在測試這個項目中要體會一下測試的流程,學習如何搭建測試環境。

2、軟體測試的藝術(原書第3版) (美)梅耶 等

第二本就是這本軟體測試的「聖經」,這本書據說是矽谷測試人員必備的書。這本書最值得看的地方就是測試的思想。閱讀這本書可以讓你有豁然開朗的感覺。

3、計算機軟體測試(原書第2版) (美)卡尼爾

這本書也是值得一讀的,同樣也是非常適合初學者閱讀的。

4、全程軟體測試

朱少民

上面的都是外國人寫的,來本國產的。

還有很多經典的測試書,例如:Paul C.Jorgensen的軟體測試(第2版)這本書,但是筆者認為他不是很適合初學者,這本書都是用來做研究生教材的,做過一段測試的可以來看看。

二、軟體測試進階書籍

這部分主要是針對有過一年左右測試經驗的,真正測試過幾個項目的。推薦的參考書主要是提高測試效率的,一些測試的經驗。

1、有效軟體測試

這本書主要是給軟體測試的各個階段提出了一些建議,一共50條。這些建議都十分中肯,值得一讀。

2、軟體測試經驗與教訓

聽書名也應該了解了一大半了吧,這本書一共給出了293條經驗,閱讀它吧。它會讓你重新思考關於測試的基本理論。

還有一些很好的書籍了,但是沒有讀過的就不做推薦了

三、自動化測試

我們都知道,目前自動化測試是軟體測試的趨勢,而且目前公司在招聘的過程中都會考察自動化相關的知識。

1、軟體測試自動化

(美)Daniel J.Mosley 等著

2、軟體自動化測試技術與實例詳解(一本很老的書)

3、自動化測試最佳實踐

但是說實話,我個人並不建議自學,確切的說,是不建議看書自學。

一個來說,學這個東西很枯燥的,你能堅持一天學10個小時我信,你能堅持1月學10個小時我服!

能有自學軟體測試成才的本事現在不成功也在成功的路上了好嗎?

這個世界還是正常人占多數的,超常的天才我們仰望一下就好了,該入的門還是要有人帶的。

再一個,書籍的傳播是需要時間成本的,從撰寫之初,書中提到的技術就已經成型了,其後,要經歷撰寫的時間,發行的時間,流行的時間,等我們知道併購買這本書的時候,很難想像此時與作品撰寫之初,相關學科的知識已經更新了多少——IT行業又是一個典型的知識告訴迭代的行業。

所以,我個人更建議使用教學視頻來進行學習。

確切的說,是相對較為優質的,錄製時間較晚的視頻。

針對上述兩點,一方面,視頻質量要優質,尤其是主講人,最好是一些現任的BAT中高層,擁有豐富的實戰經驗,其所接觸到的行業知識,至少在國內而言,也應當是最先進的,其個人素質,自然也是過硬的;

另一方面,視頻的傳播速度相對較快,尤其是一些較晚錄製的視頻,可能這邊剛上傳,那邊就能下載了。這樣就保證了知識的實效性。

由此,我個人推薦一位王老師的視頻,他是百度聯想企培負責人,最近應某IT教育機構的邀請,錄製了一套視頻,我正好由於工作原因拿到了這份視頻的內部版,這裡就放在回答後面了,希望能對題主和看到這份回答的朋友有所幫助。


實名反對最高票的兩個回答!

什麼《高效人士的七個習慣》《微軟測試之道》《軟體測試》這幾本書還是別看了,浪費時間,《軟體測試》是外國人寫的,沒有實際的參考價值,轉行之前我自己買了,我們測試組也買了那本書,至今都沒什麼人翻。

本人學的文科轉行軟體測試,轉行之前在家學習了一個多月,不過我目前做的是嵌入式測試,不是嚴格意義上的軟體測試(入行的小夥伴一定不要做嵌入式測試,除非你做白盒測試,否則你其實做的就是硬體測試,沒什麼技術含量上升空間有限,跳槽也很難,很容易被取代)作為一個轉行者面試了無數家互聯網公司後加之自己在這個行業摸爬滾打,漸漸知道了該掌握哪些知識才能勝任軟體測試。

————————沒想到有這麼多朋友點贊,那我就寫詳細一點——————————————

那麼重點來了入行軟體測試要學什麼?

1.你需要知道軟體測試基礎知識,設計測試用例的常用方法,比如等價類、邊界值、因果圖…也可以理解為設計用例的思路,如果有筆試,很容易考到這個。舉個例子,讓你測試QQ的登錄,你該怎麼設計測試用例?這個問題我不止一次在面試時被問到。

2.缺陷管理工具的使用,目前比較主流的是國產軟體禪道,還有惠普的QC,還有bugfree等等,學會一個就OK了,大同小異,用起來其實很簡單,關鍵是你實際練習的時候你得搭建一個缺陷管理工具的環境,這個不會的話可以淘寶讓別人遠程幫你搭。但不是所有公司都用,如果有公司不用缺陷管理工具管理缺陷,這樣的公司你還是別去了,不過我目前的公司就沒用這個,上家公司用的TD~

3.資料庫的增刪改查,首選MySQL資料庫,而且MySQL支持本地操作,主要是查詢,這個也不怎麼難,但最好實際操作一下,建表格,插數據,各種多表查詢,按條件查詢等等

4.Linux操作系統的常用命令,比如查看日誌的命令是什麼?這個我也不止一次被問到,我目前沒有從事互聯網方面的測試工作,我猜想,互聯網公司的數據是存在伺服器上的,而伺服器一般裝在Linux操作系統上,所以測試人員需要掌握一些常用命令,你可以在你的電腦上裝一個虛擬機然後將Linux裝在虛擬機上,試著自己輸入一些常用命令操作一下,其實它就是一個操作系統,只是沒有什麼圖形界面或者圖形界面很少,就像Windows裡面的控制台一樣

6.大概了解web項目是什麼樣的,我至今也沒接觸到web測試,也不知道完整的web測試到底是什麼樣的,這裡面應該涉及到了測試環境的搭建,有些公司會讓運維做這個;還有對一個完整項目周期的了解。

5.介面測試,這個目前我也不會,需要懂一點http協議,需要會介面測試工具的使用,比如jmeter、findler、postman等等,會一個就OK,大同小異

既然提問問到了怎麼學,那麼當然涉及到了從哪裡獲取學習資料,現在網路發達,很多地方可以學,比如買書、淘寶買視頻教程(比較推薦這個,但一定要會挑,有些教程很差)、慕課網,只有你想不到,沒有你得不到的東西。

懂了上面的,我覺得差不多能幹活了(不過如果做嵌入式測試,以上你都不需要懂!所以遇到嵌入式的公司招測試,我建議你還是別做了)你第一份測試工作對你以後跳槽有很大的影響,比如你做互聯網金融測試,那麼你跳槽到另一家互聯網金融公司比較容易,因為你的測試經驗是建立在你對業務的熟練程度上的。啰嗦幾句,轉行測試的人特別多,不掌握一門編程語言遲早要被淘汰,建議想往技術方面奮鬥的同學學一學Python或Java,懂一門編程語言,你在談薪資的時候底氣就會很足,我覺得開發有點瞧不起測試,bug沒有及早被發現甚至給客戶帶來不好體驗,測試背鍋是家常便飯!會開發的大多不願意做測試,所以開發測試工程師是個很吃香的崗位。轉行之路遠沒有你想像中美好,你得不斷抽空學習,才能不被應屆小妹妹替代!


自學的話,建議選擇開發,開發系統化的資料比較多,抓住一本Python或者其他語言的書,從頭邊看邊敲到尾5遍,肯定能找到開發的工作了,測試知識太龐雜,自學到正經公司的實戰要求,難度較大。


上網找個免費的全套視頻,來回看幾遍。

買本《軟體測試》佩騰的,看幾遍。

再上網各種測試資料找些看看。


大家地熱情簡直無與倫比,資料都要用TB來計算了, ,PS:這次不是群主大大更新的。

我還是連夜用我家小媳婦的扣扣創建一個群吧,不想明早一起來又要發一遍,到群里自取哈,432419895

==================================

我快回不過來了,要不要建個群啊啊啊啊啊啊啊,還可以一起交流啊啊啊啊啊啊啊啊啊啊啊啊

==================================

沒想到還真有要學這些資料的,需要的話直接私信我就可以了,看到了就回。

==================================

來來來,給你看看,我學了測試,工作過後,還有多少要學的......你會不會馬上就不想學了........

我這還只是一部分.......沒截完。


我說點實際的吧~

買本基礎理論書,先把理論過一遍,了解測試是個什麼回事,怎麼個過程,怎麼個流程,每一步出什麼東西,怎麼實施,常用的測試方法,分析思路,文檔要素,等等等等。。。

然後考慮下自己要走哪個方向,做web,app,終端類還是什麼;然後可參考如下方案:

1. 熟悉這類產品的功能,業務,必須使勁玩~表層功能熟悉後,實現邏輯可能需要開發的幫助,但都考慮到這一步應該也算入門了

2. 查對應方向的測試要點(網上很多,例如XXtesting)找別人寫的用例,理解,分析,考慮別人為什麼要這麼

3. 自己寫測試計劃,測試用例,做bug描述,如果你有心,可以將發現的問題與產品方反映溝通確認

差不多入門沒問題了~

如果這些沒做好,建議不要考慮自動化~即使是有開發基礎的,測試基本方法跟思路沒建立起來,即使自動化也會受到局限性~自動化只是手段~


可以看看我在其它問題上寫的答案:

剛入行的測試工程師如何自學軟體測試? - 知乎


就我目前看到的情況來看,想要入行軟體測試行業簡單,但是想要在軟體測試行業干好,那還是挺不易的,目前軟體行業還是蓬勃發展的,想要入行,可以參考一下https://zhuanlan.zhihu.com/p/25294439


自學還是比較難的。可以買幾體基礎類的書看一下。然後找幾個群進去,有問題還可以大家一起討論。


軟體測試職業的屬性正如樓上老徐所說,入門簡單、深入難、需要一定的知識廣度和學習能力。我也大致看了下帖子下面一些朋友的建議,大多數細緻但不實際,試想行都沒入,如何炫酷?

還有就是,單靠自學,性能自動化、介面自動化、GUI自動化、滲透測試等一些很考技術的知識,我覺得單純的靠自學不切實際。在此就講點眼下的,先進門了再說吧。

第一,你確定好了要做軟體測試嗎?

第二,那就開始吧。首先看書學習些理論,在百度傳課、騰訊課堂、網易雲課堂、能力天空等學習平台搜索免費學習資源(基礎的課程都是不收費的,多的是這類資源),邊學習理論邊在自己的電腦操練。另外,加一些技術交流群跟人家多請教,嘴甜一點。

第三,只要認真的跟著在線的資源學習,相信你可以掌握功能測試和性能測試的方法,憑藉這部分能力勉強可以找個四千左右的工作,也許你運氣好也說不準。

第四,如果想技術提升能力拿到更高薪水,做到兩點:工作當中不斷的跟同事們請教摸索,網上購買高級測試開發課程(這一塊就沒免費的麵包吃了,高級課程沒有公司會免費公布的)。

以上是我對你自學的建議,優點:金錢花銷小(如果給我較真說時間也是錢的話,我無話可說),時間比較靈活。缺點是:耗時長,容易鑽牛角尖無法自拔,學習不系統,缺少項目經驗…

還有一種方式就是參加線下的軟體測試開發培訓,此處不多說,說多了就太商業了。希望以上建議可以幫到您!


5年+ 經驗tester .就給你看看我目前的文檔吧


老徐觀點:

測試職業的屬性:入門簡單、深入難、需要一定的知識廣度和學習能力;

如果想入門:

1. 建議,先找本測試理論書籍看,系統的了解下測試的理論知識(也可以去大概判斷下自己是否適合測試職業)

2. 學習過程中,有碰到問題,先百度/Google搜索,實在不懂群職業群,或者問一些職場前輩

3. 還是動手實踐,至少部署過幾個環境、安裝過幾個工具,會簡單的工具使用

4. 然後就是去不停的面試,找到工作後,工作中再學習,才是最快的方式;

---

補充,進入一個職業,先從啃書開始,至少要先了解下是否適合這個職業,大概需要學些什麼東西;

附上書籍推薦:給軟體測試從業者推薦6本專業書籍


請微信搜索iTesting, 軟體測試全乾貨分享,你的軟體測試知識寶藏


摘取自阿里五個崗位的對比
阿里文學-資深測試開發工程師-移動客戶端
阿里健康-測試工程師
淘寶-無線多媒體測試開發工程師/專家
航旅-測試開發工程師-杭州
高德-測試開發專家

語言

語言提及次數類別 Java5開發語言 C/C++3開發語言Objc-c1開發語言

操作系統

  • 熟悉Linux操作系統,熟練使用shell編寫腳本者優先
  • 熟悉Linux操作系統,熟練使用Shell
  • 熟悉Linux操作系統
  • 熟悉Linux操作系統,熟練使用腳本語言(Shell 或 Python/PHP/Perl/Ruby 等)

Linux + Shell 准沒錯
書籍推薦: 〖鳥哥的Linux私房菜 (基礎學習篇 第三版)〗
書籍推薦: 〖Linux命令行與shell腳本編程大全(第3版)〗

測試經驗

  • 熟悉至少一種自動化測試工具,能獨立完成自動化測試優先;
  • 精通測試流程和測試用例設計方法,能主動進行技術鑽研;
  • 測試工作經驗,熟悉軟體研發流程;
  • 熟悉測試用例設計、有比較系統化的測試分析和設計能力
  • 熟練測試理論與方法,對互聯網質量保證領域有強烈的興趣;
  • 有性能、安全、白盒測試等專業測試領域經驗者優先;
  • 軟體開發、自動化測試或白盒測試工作經驗;
  • 具備廣泛的技術視野和很強的技術前瞻性,了解測試技術的發展;

書籍推薦: 〖計算機科學叢書:軟體測試(原書第2版)〗
書籍推薦: 〖軟體工程技術叢書:軟體測試的藝術(原書第3版)〗

能力

  • 有較好的分析問題能力和解決問題能力
  • 很強的學習能力、分析能力和解決問題的能力;
  • 具備很強的邏輯思維能力和較高的分析、處理問題的能力;
  • 對未知領域有一定的學習和研究能力,並持續改進現有流程和方法
  • 具備良好的團隊合作與分享精神,高度的工作熱情和敬業精神,很強的學習能力和技術鑽研能力
  • 善於團隊合作,理解和適應變化,以結果和行動為準則,努力追求成功。

總結

開發語言選擇 Java 或 C/C++

Objc-C作為加分項就好了

Linux+shell黃金組合一定要會,
計算機網路熟練到不能再熟練,資料庫會簡單操作即可


樓上說免費完整的視頻暫時還沒有的,網上免費的資料大多是基礎性的內容,要想深入的學習非常困難,樓主想把這門技術學精通,應用到工作中去,建議你看看孫老師的《零基礎實戰軟體測試工程師就業班(共四階段、快速掌握主流測試工具)》這門課程,132講,零基礎起步,理論結合實戰案例,學完之後可以直接從事相關工作了。可以到網上下載,也可以加我拿教程,1767991082


測試其實入門比開發簡單,但是要學好也比較難,大家都是回答的如何學習,我就來說說要學習什麼,要學習,首先要知道需要學習什麼,就像考試,平時都有學習內容,知道了內容,就可以找書,找機構,找有經驗的人學習,其實對於機構,確實有些機構比較坑,我面試了很多機構出來的童鞋,大家還請謹慎對待,先從我以前面試華為員工和外包員工來說,主要關注的點如下:

1.敏捷迭代下的測試流程以及功能測試。好的測試流程能夠大大提高測試效率,比如什麼時候該做需求分析,用例編寫,用例怎麼維護等等,每個人能夠清楚每個時間節點做什麼事;對於功能測試來說,其實是工作量最大,但是技術含量最低的,騰訊很多測試團隊已經將功能測試外包給外包同學,由一個騰訊員工負責管理這些外包童鞋的測試,但是對於功能測試,能夠100%覆蓋測試場景,用例100%執行的考察還是非常重要的,這些都是基礎,所以要非常詳細掌握。

2.linux 和資料庫以及測試環境搭建。為何要要學習linux ,因為基本所有的服務都是部署在linux 上的,所以要能夠自己在linux 開發人員開發軟體,因為有時候環境不是開發部署,測試也需要進行部署,這就需要對linux 命令,操作非常了解,第二呢由於服務部署在linux 上,性能測試也需要在linux 進行性能瓶頸監控,所以linux 和linux 測試環境搭建必須要掌握,同時測試同學也需要對linux 日誌進行查看,初步定位問題出現在哪裡,而不是一有問題就問開發,這樣問多了開發也會很煩你,第三資料庫學習,大家在web 和app 上看到的數據基本都是報錯在資料庫裡面的,為什麼要學習,舉個簡單的場景,一個新建table 限制只能創建1萬條,你是手工在界面上手工新建一萬條還是直接去資料庫批量參數化新建一萬條?

3.性能測試。這裡說的性能測試不只是工具的使用,性能測試應該包括性能場景分析,工具加壓,性能調優,首先是分析性能場景,每個業務使用人數,比例,每個時間段比例也會變化,比如早晨登陸場景比較多,十點業務比較多,每個時間點都要給出每個業務比例和人數;第二再根據前面分析的場景進行加壓,這裡加壓工具可以是自研工具,也可以是jmeter 或者loadrunner ;第三再根據加壓監控性能瓶頸,比如是加壓工具瓶頸,網路瓶頸如千兆網口非萬兆網口,硬體瓶頸如cpu 和內存,資料庫瓶頸如資料庫命中率等等。很多培訓機構學習性能只學習工具使用,其實遠遠不夠的。

4.自動化.自動化其實就是將功能測試或者性能測試自動化起來,主要是界面自動化和介面自動化,界面自動化主要有web的selenium ,app 的appium,其實appq的自動化騰訊都做的比較少,因為界面比較不穩定,性價比太低。自動化最大的工作量不是寫自動化用例,寫用例可能只佔總工作量的10%,最大的工作量是哪裡?最大的工作量是自動化腳本維護和執行失敗的日誌定位,為何會維護,因為敏捷迭代需求變化很快,需求一變,自動化腳本就不能使用,所以好的自動化平台能夠大大減輕工作量,舉個簡單的例子,每個自動化用例都會先進行先輸入用戶名登陸,如果用戶名變了,是每個用例都改嗎?3000個用例改3000次?能否把用戶名提取出來,每個自動化用例都去調用這個公共的宏,這樣我只需要改這個公共的東西就可以了,同時好的平台能夠快速定位自動化用例失敗的原因,這就是自動化平台的兩個主要的作用,還有自動化持續集成ci 和Jenkins 等等。所以再面試的時候,一般不管你是web 還是app 自動化,主要是要有自動化經驗,因為有經驗就意味著有自動化思想,都是相通的。另外對於腳本語言,如Python ,java ,有些自動化會用到,有些不會,腳本語言也不一定是一定要掌握,而且有些不做自動化的公司也不一定會用自動化,這個優先順序比較低。

5.介面測試。這裡就要對環境部署有了解,cs 架構,bs 架構,json ,xml 等,以及介面測試什麼?什麼工具測試,一般是postman ,jmeter 等等,模擬報文調用後台介面,在對後台返回json 值進行檢驗等等。

最後,掌握了這些知識月薪上萬沒有問題,很多人做了很多年也只會功能測試,連linux 都沒有碰過。


現在主流的測試軟體有JMeter、NeoLoad、selenium QTP、appium、TestLink+Mantisbt等等,每個工具測試的點不同,今天主要介紹一下Jmeter+Jenkins搭配自動化測試的一個超詳細的教程,是我們豈安科技的工程師親身實踐總結下來的,本文略長,保證超干:

Jmeter簡介

Apache JMeter 是 Apache 組織開發的基於 Java 的壓力測試工具。用於對軟體做壓力測試,它最初被設計用於 Web應用測試,但後來擴展到其他測試領域。 它可以用於測試靜態和動態資源,例如靜態文件、Java 小服務程序、CGI 腳本、Java 對象、資料庫、FTP 伺服器, 等等。JMeter 可以用於對伺服器、網路或對象模擬巨大的負載,來自不同壓力類別下測試它們的強度和分析整體性能。另外,JMeter 能夠對應用程序做功能/回歸測試,通過創建帶有斷言的腳本來驗證你的程序返回了你期望的結果。為了最大限度的靈活性, JMeter 允許使用正則表達式創建斷言。

Apache jmeter 可以用於對靜態的和動態的資源(文件,Servlet,Perl 腳本,java 對象,資料庫和查詢,FTP 伺服器等等)的性能進行測試。它可以用於對伺服器、網路或對象模擬繁重的負載來測試它們的強度或分析不同壓力類型下的整體性能。你可以使用它做性能的圖形分析或在大並發負載測試你的伺服器/腳本/對象。

&>&>&>&>

Jmeter安裝

Jmerter 是基於 java的,所以安裝 Jmeter 之前必須先安裝 JDK 依賴,JDK 安裝的方法網上許多這裡就不多介紹了(建議安裝8.0以上版本)。

安裝好 java 後到 Jmeter 官網下載對應系統的壓縮包解壓到本地任意位置就可以使用了,這裡我建議下載3.0以上版本的 Jmeter,因為從3.0開始 Jmeter 可以直接生成可視化的 HTML 報告,不再需要安裝插件來生成。

&>&>&>&>

Jmeter測試組件

(1)負載發生器:用於產生負載,通常以多線程或是多進程的方式模擬用戶行為。

(2)用戶運行器:通常是一個腳本運行引擎,用戶運行器附加在線程或進程上,根據腳本要求模擬指定的用戶行為。

(3)資源生成器:用於生成測試過程中伺服器、負載機的資源數據。

(4)報表生成器:根據測試產生的數據生成報表,提供可視化的數據顯示方式。

Test Plan (測試計劃):用來描述一個性能測試,包含與本次性能測試所有相關的功能。也就說本次的性能測試的所有內容是於基於一個計劃的。

下面看一下一個計划下面都有哪些主要的功能模塊(右鍵單擊「測試計劃」彈出菜單)。

Threads (Users)線程 用戶

雖然有三個添加線程組的選項,名字不一樣, 創建之後,其界面是完全一樣的。之前的版本只有一個線程組的名字。現在多一個 setUp theread Group 與 terDown Thread Group。

setup thread group

可用於執行預測試操作,這種類型的線程執行測試前進行定期線程組的執行。

teardown thread group.

可用於執行測試後動作,這種類型的線程執行測試結束後執行定期的線程組。

thread group(線程組).

這個就是我們通常添加運行的線程。通俗的講一個線程組,,可以看做一個虛擬用戶組,線程組中的每個線程都可以理解為一個虛擬用戶。線程組中包含的線程數量在測試執行過程中是不會發生改變的。

&>&>&>&>

測試片段

測試片段是在2.5版本之後新加的一個選項。

測試片段元素是控制器上的一個種特殊的線程組,它在測試樹上與線程組處於一個層級。它與線程組有所不同,因為它不被執行,除非它是一個模塊控制器或者是被控制器所引用時才會被執行。

組成

&>&>&>&>

控制器

JMeter 有兩種類型的控制器:取樣器(sample)和邏輯控制器(Logic Controller),用這些原件來驅動處理一個測試。

&>&>&>&>

取樣器(Sample)

取樣器(Sample)是性能測試中向伺服器發送請求,記錄響應信息,記錄響應時間的最小單元,JMeter 原生支持多種不同的 sampler ,如 HTTP Request Sampler 、 FTP Request Sample 、TCP Request Sample 、JDBC Request Sampler 等,每一種不同類型的 sampler 可以根據設置的參數向伺服器發出不同類型的請求。

&>&>&>&>

邏輯控制器(Logic Controller)

邏輯控制器,包括兩類元件,一類是用於控制 test plan 中 sampler 節點發送請求的邏輯順序的控制器,常用的有 如果(If)控制器 、switch Controller 、Runtime Controller、循環控制器等。另一類是用來組織可控制 sampler 來節點的,如 事務控制器、吞吐量控制器。

&>&>&>&>

配置元件(Config Element)

配置元件(config element)用於提供對靜態數據配置的支持。CSV Data Set config 可以將本地數據文件形成數據池(Data Pool),而對應於 HTTP Request Sampler 和 TCP Request Sampler 等類型的配置原件則可以修改 Sampler 的默認數據。(例如,HTTP Cookie Manager 可以用於對 HTTP Request Sampler 的cookie 進行管理)

&>&>&>&>

定時器(Timer)

定時器(Timer)用於操作之間設置等待時間,等待時間是性能測試中常用的控制客戶端 QPS 的手段。類似於 python 中的 sleep。JMeter 定義了 Bean Shell Timer、Constant Throughput Timer、固定定時器等不同類型的 Timer。

&>&>&>&>

前置處理器(Per Processors)

用於在實際的請求發出之前對即將發出的請求進行特殊處理。例如,HTTP URL 重寫修飾符則可以實現URL重寫,當 RUL中有 sessionID 一類的 session 信息時,可以通過該處理器填充發出請求的實際的 sessionID 。

&>&>&>&>

後置處理器(Post Processors)

用於對 Sampler 發出請求後得到的伺服器響應進行處理。一般用來提取響應中的特定數據。例如,正則表達式提取器 則可以用於提取響應數據中通過匹配正則表達式獲得的數據。

&>&>&>&>

斷言(Assertions)

斷言用於檢查測試中得到的相應數據等是否符合預期,斷言一般用來設置檢查點,用以保證性能測試過程中的數據交互是否與預期一致。

&>&>&>&>

監聽器(Listener)

監聽器可以用來對測試結果數據進行處理和可視化展示的一系列元件。 圖行結果、查看結果樹、聚合報告。都是我們經常用到的元件。

以上就是 Jmeter 的基本組成元件,我們用到的絕大部分測試計劃就是依靠以上元件完成。


接下來我就根據我們的項目測試實例來實際演示一下以上元件的用法,目前項目的測試需求主要是業務測試,如果需要壓力測試只需要把檢查數據正確性的步驟去掉,簡單的測試流程為向一個介面 get 請求將數據傳輸過去後,檢查日誌和資料庫中是否有正確的數據。

這是我配置好後的測試計劃:


添加線程組

一個測試請求是基於一個線程組完成的。一個測試計劃必須有一個線程組。測試計劃添加線程組非常簡單。在測試計劃右鍵彈出下拉菜單(添加--&>Threads(Users)---&>線程組)中選擇線程組即可。

jmeter 中 每個測試計劃至少需要包含一個線程組,當然也可以在一個計劃中創建多個線程組,多個線程組在測試計划下面是並行執行的,也就是說這些線程組是同時被初始化並同時執行線程組下的 Sampler。

線程組主要包含三個參數:線程數、準備時長(Ramp-Up Period(in seconds))、循環次數。

  • 線程數:虛擬用戶數。一個虛擬用戶佔用一個進程或線程。設置多少虛擬用戶數在這裡也就是設置多少個線程數。
  • 準備時長: 設置的虛擬用戶數需要多長時間全部啟動。如果線程數為20 ,準備時長為10 ,那麼需要10秒鐘啟動20個線程。也就是每秒鐘啟動2個線程。
  • 循環次數:每個線程發送請求的次數。如果線程數為20 ,循環次數為100 ,那麼每個線程發送100次請求。總請求數為20*100=2000 。如果勾選了「永遠」,那麼所有線程會一直發送請求,一到選擇停止運行腳本。

在這裡,因為是檢查數據正確性只需要運行一次,所以全部設置為1。

添加參數

添加參數常用讀取 CSV 文件將文件內容設置為變數,我比較喜歡的是添加Beanshell元件,編寫java腳本直接生成數據。

在線程組上右鍵菜單選擇添加---&>配置元件---&>CSV Data Set Config 就能添加 CSV文 件讀取。

主要設置的參數有:

  • FileName: 填寫被讀取的 CSV 文件地址和文件名。
  • File Encoding: 默認為 ANSI。
  • Varible Names: 定義文本文件中的參數名,以逗號分隔例如 a,b,c,定義後可在腳本在以 Shell 變數的同樣的方式引用。
  • Delimiter: 定義分隔符,用於將變數分開,這裡定義的某個分隔符,則在 Variable Names 用這裡定義的分隔符,例如 a,b,c 那麼分隔符就是「,」。
  • Recycle on EOF: 設置為 True 後,允許循環取值。
  • Stop Thread on EOF: 當 Recycle on EOF 為 false 並且 Stop Thread on EOF為true,則讀完 csv 文件中的記錄後,停止運行。
  • Sharing Mode: 設置是否線程共享。

添加 Beanshell 需要在線程組上右鍵菜單選擇添加---&>Sampler---&>Beanshell Sampler 就能添加 Beanshell 腳本文件讀取。

beanshell 十分強大,除了生成參數外也可以 import java 的包來完成許多複雜的邏輯,這裡就不細說了。

參數設置後可以在後續的元件中以 $ {參數名}的形式調用。

添加HTTP請求

生成參數後在線程組上右鍵菜單(添加---&>Sampler---&>HTTP請求)選擇 HTTP 請求。對於 jmeter 來說,取樣器(Sampler)是與伺服器進行交互的單元。一個取樣器通常進行三部分的工作:

1.向伺服器發送請求

2.記錄伺服器的響應數據

3.記錄相應時間信息

HTTP Sampler 中可以設置的參數很多,這裡就說一下一些經常使用的:

  • 名稱:本屬性用於標識一個取樣器,建議使用一個有意義的名稱。
  • 注釋:對於測試沒有任何作用,僅用戶記錄用戶可讀的注釋信息。
  • 協議:向目標伺服器發送 HTTP 請求時的協議,可以是 http 或者是 https ,默認值為 http 。
  • 伺服器名稱或 IP :HTTP 請求發送的目標伺服器名稱或IP地址。
  • 埠號:目標伺服器的埠號,默認值為80 。
  • 方法:發送HTTP請求的方法,可用方法包括 GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE 等。
  • 路徑:目標 URL 路徑(不包括伺服器地址和埠)。

    Content encoding :內容的編碼方式,默認值為 iso8859。
  • 自動重定向:如果選中該選項,當發送 HTTP 請求後得到的響應是302/301時,JMeter 自動重定向到新的頁面。
  • 同請求一起發送參數 : 在請求中發送 URL 參數,對於帶參數的 URL ,jmeter 提供了一個簡單的對參數化的方法。用戶可以將 URL 中所有參數設置在本表中(如圖中 ${did}就是調用之前生成的參數),表中的每一行是一個參數值對(對應 RUL 中的 key1=value1)。

在這裡添加好參數後就可以進入下一步,檢查數據。

添加資料庫連接與資料庫操作

要連接資料庫首先需要下載不同資料庫對應的 JDBC 驅動包,這裡我使用的是 mysql,所以下載入 mysql-connector-java.jar,下載後將 jar 包放到Jmeter所在目錄的 lib 文件夾中就可以了。

然後選擇配置元件中的 JDBC Connection Configuration 添加資料庫連接配置。

大部分配置讀使用默認就可以,主要配置連接資料庫部分:

  • Variable Name: 變數名稱。需要唯一標識。與 JDBC 取樣器中的相對應,決定 JDBC 取樣的配置。簡單理解就是在 JDBC request 的時候確定去哪個綁定的配置。
  • MaxNumber of Connection: 資料庫最大鏈接數

  • PoolTimeout: 資料庫鏈接超時,單位 ms

  • Idle Cleanup Interval (ms): 資料庫空閑清理的間隔時間,單位 ms

  • Transaction Isolation:

    事務間隔級別設置,主要有如下幾個選項:(對 JMX加解密) TRANSACTION_REPEATABLE_READ 事務重複讀、TRANSACTION_READ_COMMITTED 事務已提交讀 、TRANSACTION_SERIALIZABLE 事務序列化 、TRANSACTION_READ_UNCOMMITTED 事務未提交讀、TRANSACTION_NODE 事務節點 、DEFAULT 默認、編輯
  • Keep-Alive: 是否保持連接
  • Max Connection age (ms):最大連接時長,超過時長的會被拒絕
  • Validation Query:驗證查詢,檢驗連接是否有效(資料庫重啟後之前的連接都失效,需要驗證查詢)
  • Database URL:如 jdbc:mysql://localhost:3306/test 表示本地資料庫,3306 埠,資料庫名稱為 test
  • JDBCDriver Class: JDBC 的類,如 com.mysql.jdbc.Driver ,不同資料庫使用把不同累,可以參考 Jmeter 的文檔。

配置好後就可以配置具體的資料庫操作。

選擇 Sampler 添加 JDBC Request。

  • Variable Name:資料庫連接元件名稱,填寫對應 JDBC Name,
  • Query Type:選擇對應的資料庫操作,路 select,update 等。
  • Query:具體的資料庫查詢語句,可以直接將參數寫道 SQL 語句中,也可以使用佔位符:?,將參數寫到下方的 Parameter velaues 中,
  • Parameter Types: 參數類型
  • variable names: 返回結果的參數名,使用方法與讀取 csv 文件獲得的參數相同

獲取到資料庫查詢結果後就可以檢查數據正確性了

數據檢查

需要檢查的是 JDBC request 回來的數據,所以斷言元件需要在資料庫操作的內層。斷言的種類有許多,這裡就選擇最常用的響應斷言

右鍵 JDBC Request ,選擇添加----&>斷言---&>響應斷言。

斷言的設置是比較簡單的:

  • apply to:是應用範圍,設定匹配的範圍
  • Main sample and sub-samples: 匹配範圍為當前父取樣器,及子取樣器
  • Main sample only :僅當前父取樣器
  • Sub samples only: 僅子取樣器
  • JMeter Variable:變數值進行匹配,這裡需要檢查的是 JDBC Request 返回的值所附的變數,所以選擇這一項,注意:變數名_x的形式意思是取數據返回結果的第x行。

要測試的響應文字:針對響應數據不同部分進行匹配

(1) 響應文本:響應伺服器返回的文本內容,http 協議排除 header 部分

(2) 響應代碼:匹配響應代碼,比如 http 請求中『200』代表成功

(3) 響應信息:匹配響應信息,處理成功返回『成功』或者「ok」字樣

(4) Response Header: 匹配響應頭中的信息

匹配規則:

  • 包括:響應內容包括需要匹配的內容就算成功
  • 匹配:響應內容要完全匹配匹配內容,不區分大小寫
  • equals:完全相等,區分大小寫
  • substring:響應內容包括匹配內容即為成功。

可以通過添加斷言結果來查看斷言的執行情況。

如果介面響應數據可以與斷言匹配上,則測試用例通過,否則不通過。

查看通過結果就需要添加監聽器了(Listener)

添加監聽器

Jmeter 有許多種類型的監聽器,比如查看圖形結果、聚合報告等,因為這個測試是業務測試,所以這裡就選擇查看結果樹,針對每個元件的運行結果進行查看。

選擇監聽器---&>響應斷言

執行測試用例就可以看到測試結果了。

查看結果樹,通過的測試通常為綠色。紅色則代表失敗了。可以查看到取樣器結果,請求,響應數據,或是把測試結果寫入到文件中。

測試計劃配置完成之後,可以選擇左上角的文件---&>保存測試計劃為...,來將測試計劃保存到想要的地方。


以上就是 Jmeter 的大概使用方式與介紹。

我們經常需要 Jenkins 實現一鍵部署,但是有時候我們可能會因為失誤導致部署時的代碼不一定是可用的,這時候就可以使用 Jmeter 添加到 Jenkins 中,保證部署時的代碼是通過了測試用例的。

接下來介紹 Jmeter 與 Jenkins 搭配使用實現自動化測試部署。


使用

在添加 Jmeter 測試任務之前,Jenkins 需要首先安裝兩個插件,以方便我們對 Jmeter 的測試結果進行處理:

  • HTML Publisher plugin:可以讓我們方便的在 Jenkins 中直接打開 Jmeter 的結果進行查看。
  • Performance Plugin:可以將測試結果的 log 以圖表的形式整合到 Jenkins 中,還能根據測試結果的錯誤率與波動率修改 Jenkins 的 job 狀態。

安裝好插件以後就可以添加測試任務了,選擇新建---&>構建一個自由風格的軟體項目。

接下來進入 Jenkins 配置頁面。

根據需要配置好相應的源碼管理,觸發器和環境後,添加構建,這裡 Jmter 運行在 windows 中所以添加 windows shell,如果需要在 Linux 中構建可以選擇對應 Shell,使用的命令如下圖,該命令是跨平台的,不管 win,unix 還是 mac 都可以使用。

  • 命令格式為: -n -t &<測試腳本文件路徑&> -l &<日誌保存路徑&> -e -o
  • -n 非 GUI 模式 -&> 在非 GUI 模式下運行 JMeter
  • -t 測試文件 -&> 要運行的 JMeter 測試腳本文件
  • -l 日誌文件 -&> 記錄結果的文件,文件必須不存在
  • -e 設置測試完成後生成測試報表
  • -o 指定報表生成文件夾,文件夾必須為空或者不存在
  • -r 分散式遠程執行 -&> 指定遠程slave節點執行測試任務
  • -R 設置分散式伺服器列表 -&> 配置遠程伺服器ip列表
  • -H 代理主機 -&> 設置 JMeter 使用的代理主機
  • -P 代理埠 -&> 設置 JMeter 使用的代理主機的埠號

接下來配置構建後操作:

選擇添加構建後操作,在列表中首先是選擇 Publish HTML Reports。

選擇增加。

HTML directory to archive 中指定 Jmeter 生成報告的相對路徑。

剩餘配置一般默認就可以了。

接下來繼續添加構建後操作,選擇 Publish Performance test result report:

  • source data files:日誌文件所在的相對路徑。
  • evaluation mode:選擇判斷模式,一般來說選擇 standard mode (標準模式), 標準模式中可以選擇 relative threshold(相對閥值)或者 error threshold (相對錯誤數),這裡因為是只執行一次的業務測試,所以選擇 error threshold,並在下方配置1次測試失敗就將 job 狀態改為 failed。

如果是測試數量較多,且容忍一定的錯誤率可以選擇 relative threshold,根據錯誤的百分比來修改 job 狀態。

這裡配置好以後就可以添加自己的後續部署任務了,再次選擇增加構建後操作,選擇 trigger parameterized build on other projects。

填寫測試結束後需要部署的項目,並選擇 job 狀態為什麼時才會觸發這個構建。

以上就是一個完整的根據測試結果自動部署任務了,接下來我們保存,選擇立即構建。

構建完成後的結果如圖

選擇 HTML report 可以查看 HTML 報告(如果使用新版本的 Jenkins,因為 Jenkins 的安全策略默認不載入 js,css 等文件,所以需要在 jenkins 設置中執行腳本命令行:System.setProperty("hudson.model.DirectoryBrowserSupport.CSP","sandbox; default-src "self";"),執行完畢後重新構建就可以正常打開 HTML 報告。*這個命令重啟後失效)

在 HTML 報告中可以看到測試結果的詳細信息。

首頁是測試結果的總覽,可以看到測試的錯誤率等,選擇左邊欄可以查看更詳細些的請求時間,吞吐率等信息。


配置一個自動化測試及部署任務就是這麼簡單,希望能夠幫助到各位。

謝謝閱讀。(●"?"●)


推薦閱讀:

測試工程師到底是幹啥的?測試工程師轉開發有多大希望?
测试人员是否有「归纳导致 bug 的范围」的职责?
怎樣用三句話向一個 8 歲小孩解釋什麼是資料庫?

TAG:如何學習X | 信息技術IT | 軟體測試 | IT行業 | 轉行規劃 |