【前言】
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左右,如下圖所示;

