一,要发送的报文,转化成16进制的,报文如下

  1. "\x01\x52"//报文长度338
  2. "\x60\x00\x24\x00\x00"//TPDU
  3. "\x60\x22\x00\x17\x04\x02"//报文头
  4. "\x02\x00"//应用数据
  5. "\x70\x24\x06\xC0\x20\xC0\x9A\x31"//位图2,3,4,11,14,22,23,25,26,35,41,42,49,52,53,55,59,60,64
  6. "\x19"//域2长度
  7. "<借记卡号>"//域2 6225683621000897490 \x62\x25\x68\x36\x21\x00\x08\x97\x49\x00
  8. "\x00\x00\x00"//域3
  9. "\x00\x00\x00\x00\x00\x25"//域4
  10. "<系统跟踪号>"//域11 流水号 \x02\x02\x34
  11. "\x28\x08"//域14卡有效期 有效期不校验
  12. "\x05\x10"//域22
  13. "\x00\x01"//域23
  14. "\x00"//域25
  15. "\x12"//域26
  16. "\x37"//域35长度
  17. "\x62\x25\x68\x36\x21\x00\x08\x97\x49\x3D\x28\x08\x22\x01\x47\x00\x00\x01\x00"//域35 核心第二磁道是否校验 \x62\x14\x62\x21\x43\x00\x00\x88\x28\x3D\x28\x08\x22\x01\x47\x00\x00\x01\x00
  18. "\x31\x31\x30\x30\x30\x30\x30\x31"//域41* 11000001
  19. "\x33\x30\x36\x35\x38\x38\x32\x36\x33\x30\x30\x30\x30\x30\x31"//域42 306588263000001
  20. "\x31\x35\x36"//域49
  21. "\x5A\xB1\xBA\xA5\xBE\x55\xC0\xCE"//域52 PIN 核心校验
  22. "\x26\x00\x00\x00\x00\x00\x00\x00"//域53 2带主账号的加密方式
  23. "\x01\x38"//域55长度
  24. "\x9F\x26\x08\x82\xCD\xFB\x9F\x42\xB3\x51\xF2\x9F\x27\x01\x80\x9F\x10\x13\x07\x01"
  25. "\x01\x03\xA0\xA0\x04\x01\x0A\x01\x00\x00\x00\x00\x00\x16\xEB\xF0\x9B\x9F\x37\x04"
  26. "\xF4\x3E\x4C\x87\x9F\x36\x02\x00\xF1\x95\x05\x08\x00\x04\x60\x00\x9A\x03\x17\x05"
  27. "\x03\x9C\x01\x00\x9F\x02\x06\x00\x00\x00\x00\x00\x25\x5F\x2A\x02\x01\x56\x82\x02"
  28. "\x7C\x00\x9F\x1A\x02\x01\x56\x9F\x33\x03\xE0\xF0\xC8\x9F\x34\x03\x02\x03\x00\x9F"
  29. "\x35\x01\x22\x84\x08\xA0\x00\x00\x03\x33\x01\x01\x01\x9F\x09\x02\x00\x20\x9F\x1E"
  30. "\x08\x38\x34\x36\x37\x36\x39\x35\x39\x9F\x03\x06\x00\x00\x00\x00\x00\x00"//域55 ARQC校验 交换校验IC卡芯片是否为伪芯片
  31. "\x00\x62"//域59长度
  32. "\x41\x32\x30\x35\x37\x30\x31\x30\x30\x32\x30\x32\x30\x32\x30\x30\x38\x38\x34\x36"
  33. "\x37\x36\x39\x35\x39\x30\x33\x30\x30\x36\x30\x38\x38\x32\x38\x33\x30\x34\x30\x30"
  34. "\x38\x20\x20\x20\x20\x20\x20\x20\x20\x30\x35\x30\x30\x38\x31\x37\x30\x34\x30\x32\x20\x20"//域59
  35. "\x00\x19"//域60长度
  36. "\x22\x00\x00\x05\x00\x05\x03\x00\x10\x00"//域60 \x22【\x00\x00\x01批次号每次测试都要改】\x00\x05\x0【3\x00\x1】0\x00 \x22\x00\x00\x01\x00\x05\x09\x00\x10\x00
  37. "\x4D\x1B\x8D\xD9\x04\xF2\xA7\xA8"//域64 MAC 卡交换和核心都校验 如上3001此次改造点

ACTION编写的脚本如下:

  1. #include "lrs.h"
  2.  
  3. typedef long time_t;
  4. struct _timeb
  5. {
  6. time_t time;
  7. unsigned short millitm;
  8. short timezone;
  9. short dstflag;
  10. };
  11. struct _timeb SendTime ;
  12. int toHexString(char* OutStr,char* InStr,int len);
  13. static int ef_millitm=;
  14. static int quchong=;
  15. Action()
  16. {
  17.  
  18. int rc = ;
  19. int SndBufLen;
  20. int RecBufLen;
  21. char *RecBuf;
  22. double trans_time;
  23. int opt_value;
  24. char tmp[]={};
  25. char res[]={};
  26. char ACC[]={};
  27.  
  28. ftime(&SendTime);
  29.  
  30. //lr_error_message("time:%d,millitm:%d,ip:%s",SendTime.time,SendTime.millitm,lr_eval_string("<IP_PORT>"));
  31.  
  32. if(ef_millitm==SendTime.millitm)
  33. {
  34. sprintf(tmp,"%03d%03d",(SendTime.time%),(SendTime.millitm+quchong));
  35. quchong++;
  36. }
  37. else
  38. { sprintf(tmp,"%03d%03d",(SendTime.time%),SendTime.millitm);
  39. quchong=;
  40. }
  41.  
  42. ef_millitm=SendTime.millitm;
  43. //lr_error_message("SendTime.time = %d",SendTime.millitm);
  44. //lr_error_message("SendTime.time = %d",SendTime.time%1000);
  45.  
  46. toHexString(res,tmp,);
  47. toHexString(ACC,lr_eval_string("<AC_1>"),);
  48. //lr_error_message("tes = %s",tmp);
  49. lr_save_string(res,"系统跟踪号");
  50. lr_save_string(ACC,"借记卡号");
  51.  
  52. // 建立发送通道连接 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  53. lr_start_transaction("消费");
  54.  
  55. // 发送报文 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  56. lr_start_transaction("消费_发送报文");
  57. rc = lrs_send(lr_eval_string("<p_Socket>"), "SendBuf1", LrsLastArg);
  58. if(rc == )
  59. {
  60. lr_end_transaction("消费_发送报文", LR_PASS);
  61. }
  62. else
  63. {
  64. lr_end_transaction("消费_发送报文", LR_FAIL);
  65. lr_end_transaction("消费", LR_FAIL);
  66. lr_error_message("消费_发送报文失败;错误码是:%d;", rc);
  67. // lrs_disable_socket(lr_eval_string("<p_Socket>"), DISABLE_SEND_RECV);
  68. // lrs_close_socket(lr_eval_string("<p_Socket>"));
  69. lr_exit(LR_EXIT_ITERATION_AND_CONTINUE, LR_FAIL);
  70. }
  71. rc = ;
  72. //RecBuf = (char*)calloc(1024, sizeof(char));
  73. // 接收报文 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++=+++++++++++++++++++++++++
  74. lr_start_transaction("消费_接收报文");
  75. rc = lrs_receive(lr_eval_string("<p_Socket>"), "ReceiveBuf1", LrsLastArg);
  76.  
  77. trans_time=lr_get_transaction_duration("消费");
  78.  
  79. if(trans_time>)
  80. {
  81. lr_error_message("消费响应时间为:%f,请求流水号为:%s",trans_time,res);
  82. }
  83.  
  84. if((rc == )||(rc == ))
  85. {
  86. lrs_get_last_received_buffer(lr_eval_string("<p_Socket>"), &RecBuf, &RecBufLen);
  87.  
  88. if(RecBufLen == )
  89. {
  90. lr_end_transaction("消费_接收报文", LR_FAIL);
  91. lr_end_transaction("消费", LR_FAIL);
  92. //lr_error_message("交易出错!出错的流水号是:%s",lr_eval_string("<DateTime><VuserID><Number>"));
  93. lr_error_message("消费 未接收到返回,卡号:%s,流水号:%s",lr_eval_string("<AC_1>"),tmp);
  94. lr_exit(LR_EXIT_ITERATION_AND_CONTINUE, LR_FAIL);
  95. }
  96. else if(RecBufLen != )
  97. {
  98. lrs_save_param(lr_eval_string("<p_Socket>"),NULL,"rsp_code_1",,);
  99. lr_end_transaction("消费_接收报文", LR_FAIL);
  100. lr_end_transaction("消费", LR_FAIL);
  101. lrs_free_buffer(RecBuf);
  102.  
  103. lr_error_message("消费返回报文不正确,长度:%d,流水号:%s,应答码:%s,ip:%s",RecBufLen,tmp,lr_eval_string("<rsp_code_1>"),lr_eval_string("<IP_PORT>"));
  104. lr_exit(LR_EXIT_ITERATION_AND_CONTINUE, LR_FAIL);
  105. }
  106. lrs_save_param_ex(lr_eval_string("<p_Socket>"), "user", RecBuf, , RecBufLen, "ascii", "NewRecBuf");
  107. //判断卡是否正常 需要删除
  108. // lrs_save_param(lr_eval_string("<p_Socket>"),NULL,"rsp_code_1",74,10);
  109. // if(strcmp(lr_eval_string("<rsp_code_1>"),"00")!= 0)
  110. // {
  111. // lr_error_message("出错报文定位的报文是:%s,卡号:%s,流水号:%s", lr_eval_string("<rsp_code_1>"),lr_eval_string("<AC_1>"),res);
  112. // }
  113. //
  114. lrs_save_param(lr_eval_string("<p_Socket>"),NULL,"rsp_code",,);
  115. //lr_save_var(lr_eval_string("<NewRecBuf>")+182,2,0,"ret");
  116.  
  117. //lr_error_message("======定位的报文是:%s", lr_eval_string("<rsp_code>"));
  118.  
  119. if(strcmp(lr_eval_string("<rsp_code>"),"")==)
  120. {
  121. lr_end_transaction("消费_接收报文", LR_PASS);
  122. lr_end_transaction("消费", LR_PASS);
  123. }
  124. else
  125. {
  126. lr_end_transaction("消费_接收报文", LR_FAIL);
  127. lr_end_transaction("消费", LR_FAIL);
  128. //lr_error_message("交易出错!出错的流水号是:%s",lr_eval_string("<DateTime><VuserID><Number>"));
  129. lr_error_message("交易出错!卡号:%s,流水号是:%s",lr_eval_string("<AC_1>"),tmp);
  130. }
  131. }
  132. else
  133. {
  134. lr_end_transaction("消费_接收报文", LR_FAIL);
  135. lr_end_transaction("消费", LR_FAIL);
  136. lr_error_message("消费_接收报文失败;错误码是:%d,流水号:%s", rc,res);
  137. lrs_free_buffer(RecBuf);
  138. lr_exit(LR_EXIT_ITERATION_AND_CONTINUE, LR_FAIL);
  139. }
  140.  
  141. lrs_free_buffer(RecBuf);
  142.  
  143. return ;
  144. }
  145.  
  146. //将字符串转换成16进制 //855071 变为\x85\x50\x71
  147. int toHexString(char* OutStr,char* InStr,int len)
  148. {
  149. int i=;
  150. for(;i<len;i++)
  151. {
  152. if((i==)||(i%==))
  153. {
  154. sprintf(OutStr+*i,"%s%c","\\x",(unsigned char)InStr[i]);
  155. }
  156. else
  157. {
  158. sprintf(OutStr+*i+,"%c",(unsigned char)InStr[i]);
  159. }
  160. }
  161. return ;
  162. }

[性能测试]:关于消费类ISO8583协议脚本的开发的更多相关文章

  1. [性能测试]:关于MQ协议脚本开发

    消息队列(MQ)是一种应用程序对应用程序的通信方法.应用程序通过写和检索出入列队的针对应用程序的数据(消息)来通信,而无需专用连接来链接它们. 银行脚本使用MQ通信的较多,下面介绍一个MQ的脚本: M ...

  2. Loadrunner 脚本开发-利用loadrunner开发Windows Sockets协议脚本

    脚本开发-利用loadrunner开发Windows Sockets协议脚本 by:授客 QQ:1033553122 欢迎加入软件性能测试交流QQ群:7156436 实践举例 Socket服务端简单实 ...

  3. lr_java user协议脚本开发

    1.准备工作,安装jdk,配置环境变量 lr11 jdk1.6 32位 lr12 jdk1.7 32位 注:若原已安装了jdk1.8,现要安装jdk1.7,若遇到安装好1.7并配置好环境后,在cmd中 ...

  4. 性能测试学习第九天_脚本编写以及controller场景

    创建java脚本 环境配置: 安装jdk(lr11最高支持java1.6) 配置环境变量 在lr选择java Vuser协议 脚本结构: 一般在init中编写初始化脚本,在action中编写业务流程, ...

  5. 性能测试培训:WebSocket协议的接口性能之Jmeter

    性能测试培训:WebSocket协议的接口性能之Jmeter poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.poptest测试开 ...

  6. Loadrunner11中webservice协议脚本总结

    Loadrunner11中webservice协议脚本总结 简介     webservices协议是建立可交互操作的分布式应用程序的新平台,它通过一系列的标准和协议来保证程序之间的动态连接,其中最基 ...

  7. loadrunner之WebServices协议脚本编写(三种请求模式)

    以天气预报网站为例:http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl 一.web_service_call模式 步骤如下 ...

  8. LR回放https协议脚本失败:[GENERAL_MSG_CAT_SSL_ERROR]connect to host "XXX" failed:[10054] Connection reset by peer [MsgId:MERR-27780]

    最近做一个负载均衡项目的性能测试,使用LR录制脚本协议为https协议,回放脚本时出现报错: [GENERAL_MSG_CAT_SSL_ERROR]connect to host "XXX& ...

  9. LoadRunner录制HTTPS协议脚本

    学习LoadRunner录制HTTPS协议脚本,其实是一个意外的收获.当我拿到要测试的URL时,我像以前的步骤一样录制脚本,但是录制结束后,发现并没有生成脚本,开始以为是LoadRunner的原因,我 ...

随机推荐

  1. Java Thread系列(一)线程创建

    Java Thread系列(一)线程创建 Java 中创建线程主要有三种方式:继承 Thread.实现 Runnable 接口.使用 ExecutorService.Callable.Future 实 ...

  2. Java 设计模式系列(十四)命令模式(Command)

    Java 设计模式系列(十四)命令模式(Command) 命令模式把一个请求或者操作封装到一个对象中.命令模式允许系统使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复 ...

  3. c#解决Nullable类型的转换 (包含DataContract的序列化和反序列化以及 该例子应用在反射属性setvalue的时候有用)

    using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Reflect ...

  4. WAMP不能启动, 一直处于红色图标或者橙色图标的解决办法

    WAMP不能启动, 一直处于红色图标(正常启动为绿色吧) 考虑是端口的问题,我找到wamp文件夹中的wamp\bin\apache\apache2.2.22\conf路径下的httpd.conf文件, ...

  5. awk基础05-自定义函数和脚本

        在之前文章中,我们都是在命令行中写一些简短的awk命令,而awk做为一门解释型语言,一样是支持脚本运行的. 基本语法 #!/bin/awk -f # 注释 awk 脚本体 #!:同shell, ...

  6. 凭借对KMP算法的了解,用java实现了一下,结果和java自带的字符串indexOf比,性能差了十倍。。。

    public class KMP { private char[] source = {'a','b','c','b','c','a','b','a','b','d','d','e','f','g', ...

  7. AndroidStudio-Error Please select Android SDK

    这里是×错误信息: 点击运行提示,Error:Please select Android SDK: 网上说了很多解决办法都不靠谱,只有这种方式是可以解决的: 点击:Exit: 红框的感叹号!已经提示了 ...

  8. datetime.date(2014, 4, 25) is not JSON serializable

    # 背景 接口期望返回json格式数据,但数据存储在mysql中,先将mysql的数据转为dict,然后将dict转为json格式,然后就报这个错误了的,原因就是时间格式转换问题 # 解决方法 1. ...

  9. python实现注册登录小程序

    用python 实现模拟注册和登录的程序:用户信息最终以字典的格式储存在一个txt文件里,具体实现如下: users.txt里用户字典格式如下: { '}, '}, '} } # 注册 f = ope ...

  10. ES6——Class的继承

    class 的继承和使用. 子类继承父类,使用extends关键字. 为父类知道那个静态方法,使用 static方法名字super: 在构造函数中,可以当一个函数来使用,相当于调用父类的构造函数. 在 ...