原创

【易大师接口自动化测试】如何创建报文处理器?

在有些接口测试场景中,可能需要对入参或者出参报文进行加密,解密,校验,格式化等操作,实际上在易大师接口自动化平台上并没有相关的功能提供,这时就需要我们自己在测试平台代码中增加自己需要的报文处理器来做指定的接口测试前置后置处理了,有点类似Jmeter的BeanShell前置后置处理。

第一步:增加前端报文处理器的选择项

打开项目中webapp/js/globalConstant.js文件,在MESSAGE_PROCESS变量下增加你的处理名称和参数:如下图
file

其中key为处理器名称,为ProcessDemo,params1和params2为处理参数,在使用的时候会要求传入,123和222分别为他们的默认值(为了安全起见,默认值也可以放到后端中),处理器参数可以设置一些诸如公钥私钥加密类型参数等一些配置。

第二步:后端实现MessageProcess抽象父类中的两个方法

yi.master.coretest.message.process包下新建自己的处理器类,继承MessageProcess父类:
file

同时,需要实现其中的两个方法分别为
String processRequestMessage(String requestMessage, Map headers, String processParameter)
String processResponseMessage(String responseMessage, String processParameter)

file

  • processRequestMessage

    此方法可处理入参报文,返回经过处理的入参报文,同时也可以对请求头进行更改,如果你不需要任何操作,请直接return原始的requestMessage

  • processResponseMessage

    此访问可处理出参报文,如果不需要任何操作,请直接return原始的responseMessage

  • 如何获取处理器的参数processParameter

    处理器参数为json串,你可以直接使用fastjson将processParameter转换成JsonObject再去获取其中的参数。

你也可以在yi.master.coretest.message.process.config包下新建你的配置参数类来方便的管理,如下图:
file
然后在processRequestMessage或者processResponseMessage方法中,你可以通过如下方式来获取参数配置实例:

JSONObject jsonObject = JSONObject.parseObject(processParameter);
DemoMessageProcessParameter parameter = JSONObject.toJavaObject(jsonObject, DemoMessageProcessParameter.class);

完整代码如下:

package yi.master.coretest.message.process;

import com.alibaba.fastjson.JSONObject;
import org.apache.log4j.Logger;
import yi.master.coretest.message.process.config.DemoMessageProcessParameter;

import java.util.Map;

/**
 * @author xuwangcheng14@163.com
 * @version 1.0.0
 * @description
 * @date 2021/1/20  16:35
 */
public class DemoMessageProcess extends MessageProcess {
    private static final Logger logger = Logger.getLogger(DemoMessageProcess.class);
    private static DemoMessageProcess demoMessageProcess;

    private DemoMessageProcess(){}

    public static DemoMessageProcess getInstance() {
        if (demoMessageProcess == null) {
            demoMessageProcess = new DemoMessageProcess();
        }

        return demoMessageProcess;
    }

    @Override
    public String processRequestMessage(String requestMessage, Map<String, String> headers, String processParameter) {
        // 获取参数实例
        JSONObject jsonObject = JSONObject.parseObject(processParameter);
        // 如果没有创建配置参数类,可以直接使用上面的jsonObject来获取参数
        DemoMessageProcessParameter parameter = JSONObject.toJavaObject(jsonObject, DemoMessageProcessParameter.class);

        // 对requestMessage做任何操作,包括格式化,加密等
        // do something
        logger.info("使用DemoMessageProcess处理入参报文...");
        logger.info("入参:" + requestMessage);
        logger.info("处理器参数为:" + parameter.toString());
        return requestMessage;
    }

    @Override
    public String processResponseMessage(String responseMessage, String processParameter) {
        // 获取参数实例
        JSONObject jsonObject = JSONObject.parseObject(processParameter);
        // 如果没有创建配置参数类,可以直接使用上面的jsonObject来获取参数
        DemoMessageProcessParameter parameter = JSONObject.toJavaObject(jsonObject, DemoMessageProcessParameter.class);

        // 对responseMessage做任何操作,包括格式化,解密等
        // do something
        logger.info("使用DemoMessageProcess处理出参报文...");
        logger.info("出参:" + responseMessage);
        logger.info("处理器参数为:" + parameter.toString());
        return responseMessage;
    }
}

第三步:添加处理器枚举

在yi.master.constant.MessageKeys中找到MessageProcessType枚举,如图添加
file

保证枚举的name和第一步中定义的处理器名称一样,否则会匹配不上。

第四步:使用报文处理器

完成前三步之后,启动程序,打开平台,按照顺序创建接口和报文,在新建或者编辑报文时可以选择我们刚才新建的处理器DemoProcess
file
点击参数也能设置对应的两个参数:
file

第五步:测试报文处理器

在接口场景调试处对使用了该报文处理的场景进行测试:
file
查看后端日志,可以看到报文处理器打印出的对应log:
file

正文到此结束