Jmeter_RabbitMQ性能測試


【前言】

  RabbitMQ消息的傳遞並非使用HTTP協議,而是AMQP協議,因此除非開發暴露一個HTTP請求接口出來,否則無法直接使用HTTP請求發送json串數據,實現數據publish到MQ中。

【測試方法】

  前提:有可視化的RabbitMQ管理頁面;

  方法:利用Jmeter,錄制RabbitMQ管理頁面的publish message操作請求,在不經過上游調度系統的情況下將數據壓入MQ中,供結算系統消費。

RabbitMQ實例】

  (1)操作頁面及流程

    操作頁面:登錄Rabbit,進入createDetailRecord的Queue頁面;

    操作流程:

  (2)Json串的獲取

    對於兩個系統之間的消息傳遞,接收方在接收到消息后,一般會在日志里打印消息體,我們可以利用此,先從調度系統中手動推送一條消息到結算系統,然后查看結算系統的服務器實時日志,獲取消息體。

    當然,對於接口測試,開發都會提供接口文檔,但是對於有100+個字段的接口,若無json形式的接口文檔,那接口字段變成測試可識別的文檔尚需要一些時間。

    注:

    ①調度到運力結算的詳單數據,是調度生成一條則推送一條,因此此處模擬的也是單條數據推送的json串格式;但是如果兩個系統中推送消息的方式是:一次推送多條,則相應的json串格式也會隨之調整,由對象變成對象數組,且一般會在尾部有數量的說明。

    ②有時,需要修改消費者方唯一性字段的值,例如某些自增長Id;

    從運力結算的服務器日志中,我們可以得知消息體的json格式串,如下所示:

  (3)Jmeter腳本准備

    ①錄制:采用Jmeter代理錄制的方式,錄制上文“(1)操作頁面及流程” 對應的操作即可;

    ②關於登錄:RabbitMQ的登錄認證采用HTTP基本認證,因此從登錄請求(/api/whoami)中並不能直接找到用戶名和密碼,而是在該請求的HTTP信息頭中的authorization字段,該字段值為: "用戶名+冒號+明文密碼"用BASE64算法加密后的字符串。在后續的資源請求中,都會攜帶該字段,用於用戶身份標識。

    驗證方法:http://www1.tc711.com/tool/BASE64.htm

 

    ③對請求的json字段進行參數化,即可對MQ及consumer進行壓力測試。

    所遇問題1:CSV Data Set Config的Variable Names中聲明參數 " OWNER_NAME ",但是在publish請求中將變量ownerName的值參數化為" ${owner_Name}",執行腳本時,服務器報JsonParseException異常,具體為: " Unrecognized token ‘$’ : was expecting"。

    解決方法1:在publish請求中將變量ownerName的值參數化為" ${OWNER_NAME}"。

    經驗總結1:Jmeter的參數是大小寫敏感的

 

    所遇問題2:服務器端中文顯示亂碼

    解決方法2:Jmeter→CSV Data Set Config→“File encoding”指定為“UTF-8”。

 

    所遇問題3:參數文件中,日期格式不正確,不正確格式形如:19-6月 -17 06.35.10.463000 下午。

    解決方法3:開發同學重新拉取生產數據,利用數據庫操作將reg_date的格式修改為YYYY-MM-DD HH:MM:SS。

 

4)本次測試結果

    壓測使用的數據量:利用腳本不間斷的向MQ中壓入1w條數據,從第一條數據進入MQ到最后一條數據被運力結算consumer,共耗時1小時左右,consumer處理速度為3個/s左右,如下圖所示;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM