【jmeter】dubbo接口測試 ,規則類型和入參填寫規范


 

 paramType和paramValue參數

 

 

 paramType:里面的參數類型,可以是對象,也可以是基本數據類型

1、如果是基本數據類型,paramValue里面是不需要填寫class類名

2、如果參數類型是對象,那么paramValue里面需要填寫對應的class類名:class": "com.midea.jr.shuffle.model.SupplyChainRuleInfoBO",

運行Jmeter時,響應數據中文亂碼問題

修改jmeter.properties中的sampleresult.default.encoding,文件位置:JMETER_HOME\bin\

#sampleresult.default.encoding=ISO-8859-1
改為
sampleresult.default.encoding=UTF-8

When running Jmeter, the response data Chinese garbled problem

Modify sampleresult.default.encoding in jmeter.properties, file location: JMETER_HOME\bin\

#sampleresult.default.encoding=ISO-8859-1
Change to
sampleresult.default.encoding=UTF-8

空參使用案例

如果參數類型是基礎類型或基礎類型的包裝類

  • paramType: 必須填寫,基礎類型名稱 或 包裝類完全名(含包名)
  • paramValue: 填寫nullNULL或不填寫值(空),不要填寫 """"表示后端接收到雙引號字符串並非空串),例如下圖:

如果參數類型為復雜類型,例如MapList、自定義JavaBean

  • paramType: 必須填寫,類完全名(含包名)
  • paramValue: 必須是合法的json格式數據,需要掌握json知識,比如說集合、數組、map這些使用什么json格式體現,json格式在線驗證可以使用工具bejson
  • paramValue: 填寫nullNULL或不填寫值(空),不要填寫 """"表示后端接收到雙引號字符串並非空串)
  • paramValue: 填寫{}表示new一個空對象所有屬性都為空
  • 如果只想給對象中的某幾個屬性傳值其余屬性不傳值,參考下面示例:
    • 示例:對象中分別有三個屬性 attr1attr2attr3
      • paramValue: 填寫{"attr1":"val1"} 表示對象中attr1屬性值為val1,其余兩個屬性attr2attr3的值均為null
  • paramValue: 填寫{"attr1":"null"}表示后端接收到非null參數對象,對象中attr1屬性值是一個"null"字符串,並不是null引用
  • paramValue: 填寫{"attr1":""}表示后端接收到非null參數對象,對象中attr1屬性值是一個空字符串
  • paramValue: 填寫{"attr1":}這是一個錯誤的json格式,表示后端接收到null引用
  • paramValue: 填寫[]表示集合、數組類的參數

復雜參數使用案例

參數示例類

io.github.ningyu.MyClassVo

package io.github.ningyu;
import java.io.Serializable;
public class MyClassVo implements Serializable {
    private static final long serialVersionUID = 2833248590539596892L;
    private String name;
    public void setName(String name) {
        this.name= name;
    }
    public String getName() {
        return name;
    }
}

io.github.ningyu.RequestVo<T>

package io.github.ningyu;
import java.io.Serializable;
public class RequestVo<T> implements Serializable {
    private static final long serialVersionUID = -5111447619170259174L;
    private T items = null;
    public RequestVo(T items) {
        super();
        this.items = items;
    }
    public T getItems() {
        return items;
    }
    public void setItems(T items) {
        this.items = items;
    }
}

泛型參數示例

  • 參數類型為:io.github.ningyu.MyClassVo

    • paramType: io.github.ningyu.MyClassVo
    • paramValue: {"name":"123456"}
  • 參數類型為:io.github.ningyu.MyClassVo[]

    • paramType: io.github.ningyu.MyClassVo[]
    • paramValue: [{"name":"123456"}]
  • 參數類型為:io.github.ningyu.RequestVo<MyClassVo>

    • paramType: io.github.ningyu.RequestVo
    • paramValue: {"items": {"class": "io.github.ningyu.MyClassVo","name": "123456"}}
  • 參數類型為:io.github.ningyu.RequestVo<MyClassVo>[]

    • paramType: io.github.ningyu.RequestVo[]
    • paramValue: [{"items": {"class": "io.github.ningyu.MyClassVo","name": "123456"}}]
  • 參數類型為:java.util.List<MyClassVo>

    • paramType: java.util.List
    • paramValue: [{"class": "io.github.ningyu.MyClassVo","name":"123456"}]
  • 參數類型為:java.util.List<MyClassVo>[]

    • paramType: java.util.List[]
    • paramValue: [[{"class": "io.github.ningyu.MyClassVo","name":"123456"}]]
  • 參數類型為:java.util.Map<String, MyClassVo>

    • paramType: java.util.Map
    • paramValue: {"key":{"class": "io.github.ningyu.MyClassVo","name":"123456"}}
  • 參數類型為:java.util.Map<String, MyClassVo>[]

    • paramType: java.util.Map[]
    • paramValue: [{"key":{"class": "io.github.ningyu.MyClassVo","name":"123456"}}]

調用RPC報錯:java.lang.RuntimeException: Failed to set pojo XXVO property timestamp value 2018-09-13 10:00:00(class java.lang.String), cause: argument type mismatch

問題描述

這個問題是我們反序列化的對象中使用了java.sql.timestamp類型,傳入的json的值是“2018-09-13 10:32:00”,走泛化類型反序列化的時候出現錯誤。 而且還有個奇怪現象是使用jmeter-dubbo-plugin-1.2.x的版本是不會出現錯誤的,使用jmeter-dubbo-plugin-1.3.x的版本會出現錯誤。

問題分析

其實這個問題的原因是:1.2.x需要jmeter的classpath下引入業務api jar包,1.3.x走泛化類型不需要引用api jar包,所以在類型轉換是不一樣的處理邏輯。

解決方法

jmeter-dubbo-plugin在調用rpc之前會進行一次反序列化,反序列化的時候會優先找本地classpath下jar包中的類型,因此只需要將api-jar加入到jmeter的classpath即可,也就是說v1.3.x版本支持客戶端無api-jar的調用,也支持客戶端有api-jar的調用。 

調用RPC報錯:No such extension com.alibaba.dubbo.common.serialize.Serialization by name kryo

請查看服務端使用的序列化類庫是什么?插件只打包了默認序列化和fst,其余的序列化類庫需要使用者手動將jar包放入JMETER_HOME/lib/ext

拿kryo舉個例子,比如這個配置:

<dubbo:protocol name="dubbo" port="30001" serialization="kryo"/>

這個配置說明序列化用到了kryo,那么就要將kryo的jar包放入JMETER_HOME/lib/ext,jar包版本可以看服務端的依賴的版本

DUPLICATE_CONFIGCENTERCONFIG

重復的配置中心,這個問題是因為config center初始化后不允許修改並且只允許存在一個,我們在jmeter中反復修改config center中屬性值后運行就會出現這個錯誤,由於目前ConfigCenterConfig對象無法銷毀和重新刷新,因此只能重新打開jmeter,建議設置好配置中心的屬性后試運行一下進行預熱,如果要修改配置中心值需要重開jmeter后生效

MISS_INTERFACE

沒有設置接口信息

RETRIES_ERROR

retries不是一個數字

TIMEOUT_ERROR

timeout不是一個數字

CONNECTIONS_ERROR

connections不是一個數字

GENERIC_SERVICE_IS_NULL

沒有找到泛化接口,可能是group、version不匹配

MISS_METHOD

方法為空

MISS_ADDRESS

配置中心或注冊中心地址為空

UNKNOWN_EXCEPTION

未知異常

RpcException

參考Dubbo的錯誤編碼,http://dubbo.apache.org/docs/2.7.x/api/com/alibaba/dubbo/rpc/RpcException.html

引入地址:https://github.com/thubbo/jmeter-plugins-for-apache-dubbo/wiki/FAQ


免責聲明!

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



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