zoukankan      html  css  js  c++  java
  • 【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_HOMEin

    #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_HOMEin

    #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

  • 相关阅读:
    Object-Oriented Programming Summary Ⅱ
    Object-Oriented Programming Summary Ⅰ
    自己查与写的批量比较bash
    C#可为空引用类型 -0007
    C#类型系统 -0006
    C#类型 -0005
    C# Main方法返回值 -0004
    C# Main方法参数 -0003
    C# Main方法 -0002
    C# Hello World -0001
  • 原文地址:https://www.cnblogs.com/python-test001/p/12530468.html
Copyright © 2011-2022 走看看