java模拟报文

为了以后节约时间,记录下模拟报文的实现

模拟报文思路:就是后台把接口数据先写在文档里面写死,接口地址不变,在每个接口里面控制是访问的模拟报文还是数据库里面的数据,

对于前端来说所有都是不变的,就是说我们如果把一个接口从模拟报文数据切换到数据库相关的数据,对于前端来说没有任何的影响

基于的技术平台: spring boot1.5.3 + maven + jdk1.8_112 (不过我觉得没什么关系)

1.写一个模拟报文处理的类Message,也可以写完后封装成jar包后面方便用

public class Message {

  private final Logger logger = Logger.getLogger(getClass());

  public String sendMessage(HttpServletRequest request, Object inputContent){

  //得到URI
  String uri = request.getRequestURI();

  //获取request的json数据,取出所有的键
  String requestContent = JSON.toJSONString(inputContent);
  JSONObject jsonObject = JSON.parseObject(requestContent);
  Set set = jsonObject.keySet();
  //读取事先写在request的txt内容
  String fileRequestPath = "message" + uri +".json";

  String fileContent="";
  try{
  File file = new File(fileRequestPath);
  fileContent=txt2String(file);
  }catch (Exception e){
  return "请求接口地址错误或文件内部数据不是json";
}
  logger.info(fileContent);
  //获取txt的json数据,取出所有的键
  JSONObject jsonFile = JSON.parseObject(fileContent);
  Set setFile = jsonFile.keySet();

  //比较输入的键是不是合乎规范
  boolean check = isSetEqual(set,setFile);
  if(check){
  //如果输入的格式和字段都正确,返回写好的txt报文json格式数据
  String fileResponsePath = "message" + uri +"Response"+".json";
  String rightFile = "";
  try{
  File fileResponse = new File(fileResponsePath);
  rightFile=txt2String(fileResponse);
  }catch (Exception e){
  return "响应报文地址错误或文件内部数据不是json";
}
  JSONObject rightResponse = JSON.parseObject(rightFile);
  return rightResponse.toString();
}else {
  //如果输入的格式或字段不正确,返回写好的错误数据
  String fileResponsePath = "message/error/requestError.json";
  String errorFile = "";
  try{
  File fileResponse = new File(fileResponsePath);
  errorFile=txt2String(fileResponse);
}catch (Exception e){
  return "响应报文地址错误或文件内部数据不是json";
}
  JSONObject errorResponse = JSON.parseObject(errorFile);
  return errorResponse.toString();
}
}

  //读取txt文件的内容,输出String格式
  public String txt2String(File file){
    StringBuilder result = new StringBuilder();
    try{
    BufferedReader br = new BufferedReader(new FileReader(file));//构造一个BufferedReader类来读取文件
    String s = null;
    while((s = br.readLine())!=null){//使用readLine方法,一次读一行
    result.append(System.lineSeparator()+s);
}
  br.close();
}catch(Exception e){
  e.printStackTrace();
}
  return result.toString();
}

//获取request请求的内容
public String readRequestBody(HttpServletRequest request){
  InputStream inputStream = null;
  BufferedInputStream buf = null;
  StringBuffer requestJsonBuffer = null;
try {
  inputStream = request.getInputStream();
  buf = new BufferedInputStream(inputStream);
  byte[] buffer = new byte[1024];
  requestJsonBuffer = new StringBuffer();
  int a = 0;
  while ((a = buf.read(buffer)) != -1){
  requestJsonBuffer.append(new String(buffer, 0, a, "UTF-8"));
  }
} catch (Exception e) {
  e.printStackTrace();
}finally{
  //关闭连接
  if (null != buf){
  try {
  buf.close();
} catch (IOException e) {
  e.printStackTrace();
  }
}
if (null != inputStream){
  try {
    inputStream.close();
} catch (IOException e) {
  e.printStackTrace();
}
}

}
  return null == requestJsonBuffer ? null : requestJsonBuffer.toString();
}

  //用来比较两个Set是否相等,用来比较request内容的键是不是一样的
  public boolean isSetEqual(Set set1, Set set2) {

  if (set1 == null && set2 == null) {
  return true; // Both are null
}

  if (set1 == null || set2 == null || set1.size() != set2.size()
  || set1.size() == 0 || set2.size() == 0) {
  return false;
}

  Iterator ite2 = set2.iterator();
  boolean isFullEqual = true;

  while (ite2.hasNext()) {
  if (!set1.contains(ite2.next())) {
  isFullEqual = false;
  }
}

  return isFullEqual;
  }

}

Meaasge类的原理:写一个request相关的文档,一个response相关的文档,调用接口的时候拿请求的数据和request里面的数据进行比较,如果参数都对,

我们就返回response中的内容,如果参数有问题,我们就返回特地的错误信息

2.在跟目录下新建message目录,message目录下新建test和error文件,两个文件夹下面再建具体的request和response的json文件

(目录和文件名字可以自己定,不过要跟message中对应好)

3.在具体的接口中使用模拟报文

    在类的前面声明

   @Autowired
   private HttpServletRequest request;

    然后在接口中写:

 

一句话调用Message类的sendMessage函数就可以实现模拟报文了,后面我们要改过来改下return就可以了,对于前端来说是感觉不到任何改变的,可以加快项目的开发

转载于:https://www.cnblogs.com/waterlufei/p/6941766.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本软件可以模拟不同类型的交易,可以对交易测试案例进行统一管理,并可以进行简单时间统计和成功率统计。 使用本软件可以减轻传统测试过程中的修改-编译-测试-的循环等待时间,在测试过程中可以根据需要随时更改内容。 本软件支持任意格式的,可以模拟不同格式的,如定长,变长,XML,8583等。每个域的内容可以是常量,也可以支持约定的表达式。 本软件可以根据需要设置对应答相关域进行合法性检查,可以校验应答和请求的匹配关系,可以校验域的长度,校验域的内容等。 本软件支持MAC的生成、校验以及PIN加密处理,同时可以根据需要调整是否需要进行MAC和PIN加密。 支持服务端功能,根据不同的设置不同的应答。 本软件运行程序无需安装,只需将相关程序和测试案例件拷贝到相应的件夹下即可执行。 Version 1.7.0 521 修正一些BUG,增加服务端的设置。 Version 1.6.4.405 增加了应答服务的交易码解析,根据解析后的交易码匹配应答案例。 增加了再次接收长度,对于特殊,可先读取一定长度的内容,再根据此配置读取指定长度。 Version 1.6.4.317 增加了应答的处理,配置案例件如:_resp.txt(以_开头),按该本内容格式发出。 增加了服务配置的接收长度属性,指明长度(如96:按96长度位固定接收),或者(a4-按4位长度位接收,b2-按2位BCD码长度位接收)。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值