Fiddler+Jmeter+斷言詳細教程

Fiddler+Jmeter+斷言詳細教程 html

1、Fiddler抓包工具的配置和使用

在編寫網關自動化腳本以前,得先學會如何抓包,這裏以Fiddler爲例。會抓包的同窗能夠跳過這一步,固然看看也是沒壞處的……git

局域網絡配置

    將要進行抓包的手機與電腦連入同一局域網,電腦纔可以抓到手機APP的請求,這裏介紹一種咱們在使用的網絡配置方法。web

    首先使用電腦A佈置一個咱們抓包須要的局域網。下載獵豹WiFi(網上有不少這種工具360免費WiFi、百度WiFi等,隨意下載一個就好,這裏咱們以獵豹WiFi爲例),安裝完後建立一個WiFi便可。正則表達式

    而後使用抓包的電腦B鏈接剛剛創建的WiFi,鏈接好後查看電腦B的IP地址。express

    用測試手機鏈接剛剛創建的WiFi,在局域網設置中將其代理改成電腦B的IP地址,端口號:8888,保存便可。apache

Fiddler配置

    Fiddler的安裝,在網上下載最新的版本就能夠,這裏給出一個我安裝的4.5版本的連接http://sq.jd.com/bFPg1z ,下載安裝,步驟就省略了,下一步..下一步便可。數組

    安裝完成後打開Fiddler,在菜單欄Tools->Fiddler Options->Connections,勾選Allow remote computers to connect,默認的端口號爲8888,這裏不須要修改,在修改手機代理設置時注意與這裏一致。網絡

    由於咱們所須要抓取的基本上都是京東到家有關的請求,因此咱們能夠設置只抓取咱們所須要的請求,如圖,選中右方Filters,在下方Hosts設置中選擇Show only the follow Hosts,而後填入咱們所須要抓取請求的Host,好比這裏填入的是京東到家Android線上和預發佈的Host。數據結構

    到這裏Fiddler的基本配置就完成了,接下來就能夠開始抓包啦。app

Fiddler抓包實例

  1. 開啓Fiddler,肯定本機網絡鏈接,查看本機IP、Fiddler端口號。

    本機IP:192.168.191.2

    Fiddler端口號:8888

  2. 手機鏈接同一局域網,設置代理。

  1. 打開手機京東到家應用,清空電腦Fiddler遺留抓取結果,點擊如圖所示按鈕,點擊第一個Remove all便可。

  2. 下拉刷新京東到家首頁,抓取其HTTP請求。

  3. 分析Fiddler抓包數據。在右上方結果框中選擇Inspectors->Raw便可看到請求的URL、Cookie和Host等有關信息。在右下方結果框中選擇JSON就能看到請求返回的JSON字符串。這裏的JSON字符串是咱們判斷請求是否成功的重要依據。

提示:在每次抓取時重複下步驟3中清空結果列表的操做,能夠更容易地找到須要抓取的請求。

 

2、Jmeter的基本使用

Jmeter的安裝配置

  1. 下載Jmeter。咱們使用的Jmeter版本是2.1.3,你們能夠在\\192.168.202.207\share\pengyun 中直接下載apache-jmeter-2.13.zip便可,裏面已經安裝了須要的jar包和插件。
  2. 安裝JDK。Jmeter2.1.3須要安裝JDK 6或以上版本,沒有安裝的同窗記得安裝,仍是給你們一個連接吧,http://sq.jd.com/VaGwoP ,須要的同窗能夠下載,安裝完成後配置環境變量便可,參考連接http://jingyan.baidu.com/article/6dad5075d1dc40a123e36ea3.html
  3. 安裝Jmeter。解壓便可,無需多言。

第一個Jmeter腳本

    這裏很難對Jmeter作一個全面的介紹,並且我也只是瞭解了一些皮毛,因此就在實例中一一介紹吧,全部配置齊全以後,就開始咱們的第一條腳本吧。下面的步驟說得比較詳細,比較囉嗦,請勿急躁。

  1. 抓取須要的請求。這一步是在Fiddler中完成的,若是你是從頭看到這的,那麼這一步的內容就能夠省略了。這裏咱們就之前面抓到的京東到家首頁的請求爲例。下圖那個很重要的結果等會要用到。

  2. 運行Jmeter。在安裝目錄下的bin文件夾裏打開jmeter.bat,後面的黑框可以輸出一些斷言結果。在右面的名稱那裏能夠修改你要建立的測試腳本的名稱,默認是測試計劃。

  3. 建立線程組。測試計劃右鍵選添加->Threads->線程組。

  4. 修更名稱。修改線程組名稱並不重要,根據本身的須要修改就行。因爲咱們執行腳本通常在須要的時候執行一次就能夠,並不須要其餘的配置,因此下方的線程屬性就保持默認值便可(在進行壓力測試的時候就須要進行配置了)。

  5. 添加HTTP請求。右鍵線程組選擇HTTP請求。

  6. 填寫HTTP請求相關信息。這一步是關鍵,須要根據步驟1中Fiddler裏那段很重要的信息去填寫。名稱自行修改,Host、協議、請求方法、請求路徑都可以在抓取到的信息中獲取,拷貝過來就行。

    注意:HTTP請求有GET和POST兩種,不一樣的請求記得選擇不一樣的請求方法!!!

  7. 添加Cookie管理器。右鍵線程組選擇Cookie管理器。將抓取到的信息添加至Cookie管理器中。

     

  8. 添加結果樹。到這裏這條Case就算是編寫完成了,在運行以前咱們還須要添加一個結果樹,來查看Case運行的結果。右鍵線程組選擇查看結果樹添加。

  9. 運行。在上方找到運行按鈕運行便可。注意,若是有多個線程組或者多個HTTP請求,點擊運行後都會所有一塊兒運行。

  10. 結果分析。點擊結果樹便可查看運行結果,綠色爲成功,紅色爲失敗。在右邊點擊相應數據就可以看到返回的JSON字符串了。

這樣咱們的第一條Jmeter腳本就基本完成了,基本全部的HTTP請求都是大同小異,多練習寫幾條基本就能手到擒來了。結果樹和Cookie管理器每一個線程組添加一個就夠用了。

3、Jmeter使用標準化

    實際上,完成上面兩個步驟並不算是真正學會了腳本的編寫,由於腳本中最重要的一部分是它的斷言,斷言是來判斷網關返回JSON結果是否正確和完整的重要手段。下面的內容寫得比較囉嗦,麻煩你們必定要耐心點,別睡着!

參數化

一、簡介

在寫過一些腳本以後你們可能就會發現,所謂的寫腳本無非就是不停地複製,粘貼,複製,粘貼……因而你們確定會想一些讓本身能更快複製粘貼的方法。參數化的方法就能在簡化這個過程的同時讓你們更清晰地認識到URL的結構。

URL其實就是不少個參數組成的,而裏面的參數通常是會加密的,爲了更好地瞭解URL的結構,能夠對URL進行解碼,這個百度一下大把解碼工具能夠用,都是在線的,非常方便。這裏給個參考的連接http://meyerweb.com/eric/tools/dencoder/ ,URL粘進去點Decode便可。

 

解碼結果以下:

    從解碼後的URL裏能夠看出其中不少參數的值,appName、signKey、screen、body等都是。通過對大量URL的分析,發現全部京東到家請求URL中有不少參數是不變的。更具體來講,根據請求的不一樣,只有signKey、body和functionId這三個參數是發生改變的,其他的參數,在帳號和手機設備不變的狀況下是不會發生變化的。這樣的話,咱們把那些不變的參數放在一塊兒統一管理,每次在寫新的腳本的時候,只須要改變那三個不一樣的參數就能夠了。

二、實現方法

1)設置參數。在線程組右鍵選擇添加->配置原件->用戶定義的變量。

    而後在定義變量的頁面點擊下方添加按鈕進行URL參數的添加,這裏參考解碼後的URL,將其中的參數逐一進行添加。從下圖中能夠看到,除了signKey、body和funtionId這三個參數外,其與參數都被添加。咱們也可以發現這些參數大都是和手機型號、系統、app名稱版本等信息有關的,只要手機設備不更換、到家版本不更新,這套參數是能夠一直用下去的。固然你們在使用本身設備和帳號的時候記得更新下這些參數。

2)給請求添加參數。回到到家首頁的HTTP請求,這時候咱們已經不須要在路徑的框裏粘貼上那條很長很長的URL了。那麼怎麼使用上一步中的參數呢?看了下面這張圖就明白了。這裏引用參數的方法是${參數名}。能夠看到下面的表中的參數是通請求一塊兒發送的參數,也就是說是這些參數組成了原來的那條很長很長的URL。

    注意下圖表中框出的三個參數,就是前面一直在提到的每一個請求都不一樣的那三個參數,signKey、body、functionId。那麼之後再寫新的腳本的時候,只須要改這三個參數,其餘的地方都不須要改動。注意:下面的body參數是通過解碼的,因此應當勾選後面的編碼框。

 

三、實例

說了這麼多,你們確定會以爲沒有必要這麼麻煩,直接複製粘貼不就行了麼,那麼下面就舉一個例子來體現下參數化的好處。按照上面的步驟設置添加好參數後,首頁的腳本應當是能夠運行了,下面咱們以首頁爲基準,來寫一條新的腳本,以秒殺頁面爲例。

第一步:使用Fiddler抓取秒殺頁面的請求,對URL進行解碼。注意標記的三個參數一會要用。

第二步:選擇"首頁"腳本,右鍵點擊選擇複製,選擇"京東到家"線程組,右鍵點擊粘貼,其實就是把首頁的腳本複製一份。因而線程組裏又出現了一個新的首頁。

第三步:選擇新複製的首頁腳本,將其名稱改成"秒殺頁面",而後把參數列表中的那三個參數改成第一步中對應的值,而後Ctrl+S保存就能夠啦。

是的,只須要這三步,就能夠完成一個腳本,整個過程不超過一分鐘。之後寫每一個腳本均可以用這三步實現。固然,後續給腳本加上斷言以後還須要改動斷言。

響應斷言

    若是你是從開頭一步一步讀過來的,那麼你如今必定可以很快地寫出一條腳本,這時候就有一個問題出現了,腳本寫完了,能夠運行了,也能夠看到運行返回的結果了,那怎麼能知道返回的結果是否是正確呢?是否是完整呢?這裏先介紹一種簡單的判斷方式:響應斷言。
    右鍵點擊HTTP請求添加->斷言->響應斷言。

    這裏的響應斷言主要是針對HTTP請求返回的JSON字符串的,咱們通常使用的是包括斷言,就是返回的結果是否包含咱們須要的信息。斷言文本的截取能夠在運行結果樹裏進行,將結果顯示類型改成Text(固然也能夠JSON格式和Text格式對比着找),找出須要斷言的信息。

須要注意的是響應斷言支持正則表達式,這能夠對一些常常變化但格式固定的內容作一些斷言。下圖中最後一條斷言就是正則表達式,其內容表達的是秒殺剩餘時間是否大於0小於3600秒。這個能夠根據檢測點的須要去添加。想學習正則表達式的同窗能夠戳連接:http://deerchao.net/tutorials/regex/regex.htm

固然,響應斷言的缺點很明顯,它的格式過於固定,不能知足一些檢查點的需求操做,好比比較大小,檢查字段值是否爲空。還有就是正則表達式會將全部符合格式的內容都篩選出來,不容易具體查出咱們須要的內容。

它的優勢就是比較簡單,對於一些固定的內容能夠起到很好的判斷做用,好比下面第一條斷言,這個能夠基本斷言出請求是成功的,另外對於首頁樓層之類的信息也很適合用響應斷言。

    在寫完正則斷言後,要驗證它的正確與否,能夠在結果樹中,將結果顯示類型改成RegExp Tester,而後將斷言複製到下方的Regular expression中,點擊Test就能夠看到匹配的結果。

Bean Shell斷言

    使用了響應斷言以後,可能可以解決一部分的檢查點,可是確定還有不少檢查點是經過響應斷言覆蓋不了的。這裏給你們介紹另一種斷言的方式,Bean Shell斷言,說白了也就是經過寫代碼來解析返回的JSON字符串,提取有用的信息,進行相應的檢測。我對於Bean Shell的腳本語言也沒有什麼瞭解,基本都是使用簡單的JAVA代碼來實現的(真的是很簡單的代碼,除了if仍是if,連else都沒有)。在響應斷言裏實現不了的功能,也基本均可以經過代碼來實現。

一、JSON的基礎結構

    要解析JSON字符串,就要對JSON作必定的瞭解,實際只要知道JSON的基礎結構就能夠。JSON有兩種結構,對象和數組,經過這兩種結構能夠表示各類複雜的結構。但願你們可以本身百度瞭解下JSON的結構,下面大概對JSON的基礎結構介紹一下,僅供參考。

 

    對象:表示爲用"{}"括起來的內同,其數據結構爲{name1:value1,name2:value2,…}的鍵值對的結構,name爲屬性名,value爲對應的屬性值,這個屬性值的類型有數字、字符串、對象、數組幾種。以下圖的例子,返回的JSON字符串中,result就是一個對象,其中的city、address、title等都是對象的屬性值。

    數組:表示爲用"[]"括起來的內容,其數據結構爲[object1,object2,…],其中object是JSON對象。以下圖中的例子,result表示的是一個數組,它的第0個和第1個元素分別是一個對象,對象中又有各自的屬性。

    通過對象、數組的組合就能夠組成複雜的數據結構了,明白了上面兩點,就基本夠用了,JSON的解析就是一個不斷深刻尋找所需信息的過程。

二、Bean Shell斷言編寫

    Bean Shell斷言實際上就是經過對JSON字符串的解析找到須要檢測的數據進行相應的檢測比對的過程。下面經過一個例子來具體說明下其編寫方式。

    由於手機APP上會顯示商店名稱、商店圖片、營業時間、商店評分和滿免運費的信息,因此這裏咱們對這些信息作一下檢查,在請求返回的JSON結果中找到對應的字段:storeName、imgUrl、serviceTimes、shopFreeFreight和scoreAvg。

在HTTP請求點擊右鍵,選擇Bean Shell斷言,添加Bean Shell元件。

添加完成後就能夠開始編寫Bean Shell腳本了,這裏的代碼就是對上方JSON返回串的解析,其中JSONObject是前面所說的對象,JSONArray就是數組了。裏面輸出的錯誤信息會輸出到Jmeter剛打開時後面的那個黑框裏。其他的JAVA語句都是很經常使用的if、for語句,相信只要明白了JSON結構,編寫這裏就很easy啦!

     固然了,爲何不用一些更復雜的代碼實現更強大的功能呢,緣由有兩個,一個是個人編碼水平還頗有限,之後會不斷學習增長代碼實現的功能,另外一個緣由就是Jmeter裏的Bean Shell感受比較low,若是代碼出現錯誤(語法錯誤之類的),很難定位到是什麼地方出現了問題,因此簡單的代碼可以讓你更容易地運行和維護代碼。

4、網關腳本

這個教程可能仍是會漏掉不少東西,你們在一開始編寫腳本的時候可能還會遇到一些不懂的地方,這個能夠去git上下載我最新上傳的腳本以供參考,或者直接來問我就好,腳本地址:

1.4.1線上地址:http://source.jd.com/app/gateway-auto-ant141

1.4.1預發地址:http://source.jd.com/app/gateway-auto-ant141-pre

由於腳本常常會Cookie過時或者有新的更新,因此git上的腳本會實時更新,當發現腳本出現大量錯誤的時候,試試去git上下載份新的腳本試試看。

相關文章
相關標籤/搜索