雲智慧壓測實戰分享之JMeter腳本錄製實例

在前面的《雲智慧壓測實戰分享之JMeter工具使用初探》中咱們對JMeter的功能特色和經常使用元件作了簡單介紹,接下來講說JMeter的腳本錄製。JMeter有多種錄製腳本方法,其中最多見的是經過第三方工具Badboy錄製,另外還有JMeter自身設置(Http代理服務器+IE瀏覽器設置)來錄製腳本,下面以壓測寶爲例來介紹下Badboy腳本錄製過程。
 注:使用JMeter的代理或是Badboy進行錄製的時候,操做不能太快,否則容易形成錄製失敗。
一、打開Badboy工具,在地址欄目中輸入被測試項目的地址。注意:Badboy啓動默認是錄製狀態,爲紅色按鈕,如圖:html

1

錄製完成後點擊工具欄旁邊黑色按鈕,結束錄製。 
二、選擇「文件」--Export to JMeter…java

2

 三、打開JMeter工具,選擇「文件」-->「打開」選擇剛纔保存的文件(.jmx類型),將文件導入進來了。正則表達式

3

錄製的腳本必定要添加HTTP Cookie Manager,不然腳本運行失敗。
對於JMeter來講,一個測試計劃只能有一個Cookie管理器,由於當多個Manager存在時,JMeter沒有方法來指定使用哪一個Manager,同時一個Cookie Manager中存儲的Cookie也不能被其餘Cookie Manager所引用,因此同一個測試計劃中不建議使用多個Cookie Manager。apache

JMeter壓測實例

下面咱們用幾個JMeter壓測實例來熟悉一下JMeter的使用。
一、使用JMeter進行http接口測試
Jmter工具設計之初是用於性能測試的,它在實現對各類接口的調用方面已經比較成熟,所以可直接使用JMeter工具來完成對Http接口的測試。
1)、開發接口測試案例的總體方案:瀏覽器

•    第一步:咱們要分析出測試需求,並拿到開發提供的接口說明文檔;
•    第二步:從接口說明文檔中整理出接口測試案例,裏面要包括詳細的入參和出參數據以及明確的格式和檢查點。
•    第三步:和開發一塊兒對接口測試案例進行評審。
•    第四步:結合開發庫,準備接口測試案例中的入參數據和出參數據,並整理成csv格式的文件。
•    第五步:結合接口測試案例文檔和csv格式的數據文檔,作接口測試案例的自動化案例開發。

2)、接口自動化適用場景:
目前設計的自動化接口測試案例有兩個運行場景:服務器

  1. 測試前置、開發自測:一個新的自動化接口測試案例開發完成後,直接發給接口對應的開發,安排在開發本地環境執行,一旦開發確認完成接口開發,就開始執行接口測試案例,基本上能夠實時拿到測試結果,方便開發快速作出判斷。【開發本地運行的方式就是打開JMeter工具,導入JMX文件,開始執行便可。】併發

  2. 迴歸測試:開發本地測試經過後,或整個需求手工測試經過後,把自動化的接口測試案例作分類整理,挑選出須要歸入到迴歸測試中的案例,在持續集成環境從新準備測試數據,並把案例歸入到持續集成的job中來,這些用於迴歸的接口測試案例須要配置到持續集成平臺自動運行。
    3)、接口測試環境準備oracle

    •     Jdk1.6或以上:http://www.oracle.com/technetwork/java/javase/downloads/index.html
    •     JMeter,下載址址:http://jmeter.apache.org/download_jmeter.cgi
    •     插件的下載安裝地址:http://www.jmeter-plugins.org/

    4)、建立工程:分佈式

  a、打開JMeter:下載好JMeter後,雙擊bin目錄下的jmeter.bat文件:
圖片描述工具

  b、添加線程組:在「測試計劃」上點擊鼠標右鍵-->添加-->threads(Users)-->線程組,添加測試場景設置組件,接口測試中通常設置爲1個「線程數」,根據測試數據的個數設定「循環次數」。

5

  c、添加「HTTP Cookie管理器」:

6

  d、添加「Http請求默認值」組件,當被測系統有惟一的訪問域名和端口時,這個組件很好用:

7

  e、在「HTTP 請求默認值」組件配置頁面,填寫被測系統的域名和端口,http請求的實現包版本以及具體協議類型,線程組裏的全部「HTTP Sampler」可默認使用此設置。

8

   f、在「線程組」裏添加「HTTP 請求」的Sampler

9

    g、在HTTP請求設置頁面,錄入被測接口的詳細信息,包括請求路徑,對應的請求方法,以及隨請求一塊兒發送的參數列表:

10

  h、設置檢查點:在被測接口對應的「HTTP 請求」上,添加「響應斷言」

11

  i、在設置頁面上添加對相應結果的正則表達式存在性判斷便可:

12

   j、添加監聽器:方便查看運行後的結果

13

 上述步驟完成了一個簡單測試實例的建立,複雜測試實例均在此基礎上擴展完成。使用JMeter工具開發的接口測試案例,一個子系統建議放在同一個「測試計劃」中,流程測試能夠經過「線程組」來區分,這樣也便於設定不一樣的測試數據個數。比較獨立的接口,能夠統一放在一個線程組內,順序完成測試。 
流程性接口的測試:若是要測試的接口能夠組成一個流程,只須要順序添加多個「HTTP 請求」的Sampler,各請求之間能夠提取須要在上下文傳遞的數據做爲參數,以保證流程中數據的一致性。

二、JMeter分佈式測試

在使用JMeter進行性能測試時,若是併發數比較大(好比最近項目須要支持1000併發),單臺電腦(CPU和內存)可能沒法支持,這時可使用JMeter提供的分佈式測試的功能。
1)、JMeter分佈式執行原理:
JMeter分佈式測試時,選擇其中一臺做爲調度機(master),其它機器作爲執行機(slave)。
執行時,master會把腳本發送到每臺slave上,slave 拿到腳本後就開始執行,slave執行時不須要啓動GUI,我理解它應該是經過命令行模式執行的。
執行完成後,slave會把結果回傳給master,master會收集全部slave的信息並彙總。
2)、執行機(slave)配置:
  a、slave機上須要安裝JMeter,具體如何安裝這裏不詳細介紹了。
  b、添加環境變量:JMETER_HOME=D:B_TOOLSapache-jmeter-2.13,此處爲你JMeter的路徑
  c、啓動bin目錄下的:jmeter-server.bat,啓動成功以下圖:

14

  d、上圖上標紅的IP和端口會在master裏配置時用到。IP就是slave機器IP,端口默認是1099,端口也能夠自定義,這裏我自定義爲1000,這個後面會講。 
  e、多臺slave的話,重複1~4步驟就好。  
3)、調度機(master)配置:
  a、腳本:簡單的一個訪問壓測寶的腳本: 

15

  b、找到JMeter的bin目錄下jmeter.properties文件,修改以下配置,IP和Port是slave機的IP以及自定義的端口(這裏端口我自定義爲100,後面會講如何自定義):
        remote_hosts=10.13.223.202:1000,10.13.225.12:1000
    多臺slave以前用","隔開,我這配置了2臺,能夠看到標紅的這個就是上面截圖slave的IP和Port.
  c、打開JMeter,選擇運行,有運程啓動、運程所有啓動兩個選項:

16

  d、選擇遠程啓動-->10.13.225.12:1000
    a) master結果,這裏我只啓動了10.13.225.12:1000這一臺slave,因此只有一個結果(線程數和循環次數都是1):

17

    b) slave控制檯信息:

18

  e、選擇遠程啓動-->遠程所有啓動:
    a) master結果,所有啓動,我配置了2臺slave,因此有兩次執行結果:

19

4)、自定義端口:
  上面其實已經實現了JMeter的分佈式測試,這部分主要介紹下如何自定義slave端口:
  a、slave:在slave機的JMeter的bin目錄下,找到jmeter.properties文件,修改以下兩個配置項,好比我這裏修改成1888:
      server_port=1888
      server.rmi.localport=1888
  b、啓動slave機上的jmeter-server.bat,以下圖,端口已經修改成:1888

20

  c、master:修改master機器的jmeter.properties文件:
      remote_hosts=10.13.223.202:1000,10.13.225.12:1888
  d、重啓jmeter.bat,以下圖,端口已經變了:

21

5)、其它說明:
  a、調度機(master)和執行機(slave)最好分開,因爲master須要發送信息給slave而且會接收slave回傳回來的測試數據,因此mater自身會有消耗,因此建議單獨用一臺機器做爲mater。
  b、參數文件:若是使用csv進行參數化,那麼須要把參數文件在每臺slave上拷一份且路徑須要設置成同樣的。
  c、每臺機器上安裝的JMeter版本和插件最好都一致。

三、搭建持續集成接口測試平臺

下面介紹最後一個實例,搭建持續集成接口測試平臺(Jenkins+Ant+JMeter)。
1)、環境準備:
JDK:http://www.oracle.com/technet...
Ant:http://ant.apache.org/bindown...
Jenkins:http://jenkins-ci.org/
2)、Jemter腳本準備:
a、腳本目錄:D:B_TOOLSapache-jmeter-2.13demo

22

b、腳本內容:都是訪問壓測寶或google首頁

23

Script_yacebao.jmx   
Script_google.jmx

24

3)、ANT的build.xml代碼準備:
1<?xml version="1.0" encoding="UTF-8"?>
2
3<project name="ant-jmeter-test" default="run" basedir=".">
4<tstamp>
5<format property="time" pattern="yyyyMMddhhmm"/>
6</tstamp>
7
8<property environment="env"/>
9<property name="ReportName" value="TestReport"/>
10<!-- 須要改爲本身本地的JMeter 目錄-->
11<property name="jmeter.home" value="D:B_TOOLSapache-jmeter-2.13"/>
12<!-- jmeter生成jtl、html格式的結果報告的路徑-->
13<property name="jmeter.result.dir" value="${env.WORKSPACE}/results/${env.BUILD_ID}"/>
14<!-- 生成的報告的前綴-->
15<property name="jmeter.result.jtlName" value="${jmeter.result.dir}/${ReportName}.jtl"/>
16<property name="jmeter.result.htmlName" value="${jmeter.result.dir}/${ReportName}.html"/>
17
18<target name="run">
19<echo message="start..."/>
20<antcall target="clean"/>
21<antcall target="test"/>
22<antcall target="report"/>
23</target>
24
25<target name="clean">
26<mkdir dir="${env.WORKSPACE}/results/${env.BUILD_ID}"/>
27</target>
28
29<target name="test">
30<taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask"/>
31<jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}">
32<!-- 聲明要運行的腳本"*.jmx"指包含此目錄下的全部jmeter腳本-->
33<testplans dir="D:B_TOOLSapache-jmeter-2.13demo" includes="*.jmx"/>
34
35<property name="jmeter.save.saveservice.output_format" value="xml"/>
36</jmeter>
37</target>
38
39<target name="report">
40<xslt in="${jmeter.result.jtlName}"
41 out="${jmeter.result.htmlName}"
42 style="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl"/>
43<!-- 由於上面生成報告的時候,不會將相關的圖片也一塊兒拷貝至目標目錄,因此,須要手動拷貝-->
44<copy todir="${jmeter.result.dir}">
45<fileset dir="${jmeter.home}/extras">
46<include name="collapse.png"/>
47<include name="expand.png"/>
48</fileset>
49</copy>
50</target>
51</project>
4)、配置Jenkins Job並運行:
a、job配置以下:

25

b、在job的workspace目錄下會生成結果報告:

26

c、TestReport.html:

27

5)、配置發送郵件功能
a、自已寫一個發送郵件的功能並打成sendmail.jar包,放在job的workspace目錄中

28

b、jenkins增長構建步驟
  a)進入到測試報告的目錄
  b) 調用sendmail.jar命令發送郵件

29

 說明:由build3.xml的第十二、13行可知,報告文件生成目錄爲:${env.WORKSPACE}/results/${env.BUILD_ID},因此這裏要先cd到具體執行的那個build_id目錄下。能夠把上面的兩行命令寫在成一個批處理文件,例如第1步有個sendmail.bat文件就是,而後調用時直接寫sendmail.bat就行了。持續集成接口測試平臺(Jenkins+Ant+JMeter)就此搭建成功,以上是關於Jmeter腳本錄製和壓測的幾個實例,接下來爲您帶來進階的《雲智慧壓測實戰分享之JMeter場景設置與監控》,敬請期待。

相關文章
相關標籤/搜索