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

"\x01\x52"//报文长度338
"\x60\x00\x24\x00\x00"//TPDU
"\x60\x22\x00\x17\x04\x02"//报文头
"\x02\x00"//应用数据
"\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
"\x19"//域2长度
"<借记卡号>"//域2 6225683621000897490 \x62\x25\x68\x36\x21\x00\x08\x97\x49\x00
"\x00\x00\x00"//域3
"\x00\x00\x00\x00\x00\x25"//域4
"<系统跟踪号>"//域11 流水号 \x02\x02\x34
"\x28\x08"//域14卡有效期 有效期不校验
"\x05\x10"//域22
"\x00\x01"//域23
"\x00"//域25
"\x12"//域26
"\x37"//域35长度
"\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
"\x31\x31\x30\x30\x30\x30\x30\x31"//域41* 11000001
"\x33\x30\x36\x35\x38\x38\x32\x36\x33\x30\x30\x30\x30\x30\x31"//域42 306588263000001
"\x31\x35\x36"//域49
"\x5A\xB1\xBA\xA5\xBE\x55\xC0\xCE"//域52 PIN 核心校验
"\x26\x00\x00\x00\x00\x00\x00\x00"//域53 2带主账号的加密方式
"\x01\x38"//域55长度
"\x9F\x26\x08\x82\xCD\xFB\x9F\x42\xB3\x51\xF2\x9F\x27\x01\x80\x9F\x10\x13\x07\x01"
"\x01\x03\xA0\xA0\x04\x01\x0A\x01\x00\x00\x00\x00\x00\x16\xEB\xF0\x9B\x9F\x37\x04"
"\xF4\x3E\x4C\x87\x9F\x36\x02\x00\xF1\x95\x05\x08\x00\x04\x60\x00\x9A\x03\x17\x05"
"\x03\x9C\x01\x00\x9F\x02\x06\x00\x00\x00\x00\x00\x25\x5F\x2A\x02\x01\x56\x82\x02"
"\x7C\x00\x9F\x1A\x02\x01\x56\x9F\x33\x03\xE0\xF0\xC8\x9F\x34\x03\x02\x03\x00\x9F"
"\x35\x01\x22\x84\x08\xA0\x00\x00\x03\x33\x01\x01\x01\x9F\x09\x02\x00\x20\x9F\x1E"
"\x08\x38\x34\x36\x37\x36\x39\x35\x39\x9F\x03\x06\x00\x00\x00\x00\x00\x00"//域55 ARQC校验 交换校验IC卡芯片是否为伪芯片
"\x00\x62"//域59长度
"\x41\x32\x30\x35\x37\x30\x31\x30\x30\x32\x30\x32\x30\x32\x30\x30\x38\x38\x34\x36"
"\x37\x36\x39\x35\x39\x30\x33\x30\x30\x36\x30\x38\x38\x32\x38\x33\x30\x34\x30\x30"
"\x38\x20\x20\x20\x20\x20\x20\x20\x20\x30\x35\x30\x30\x38\x31\x37\x30\x34\x30\x32\x20\x20"//域59
"\x00\x19"//域60长度
"\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
"\x4D\x1B\x8D\xD9\x04\xF2\xA7\xA8"//域64 MAC 卡交换和核心都校验 如上3001此次改造点

ACTION编写的脚本如下:

#include "lrs.h"

typedef long time_t;
struct _timeb
{
time_t time;
unsigned short millitm;
short timezone;
short dstflag;
};
struct _timeb SendTime ;
int toHexString(char* OutStr,char* InStr,int len);
static int ef_millitm=;
static int quchong=;
Action()
{ int rc = ;
int SndBufLen;
int RecBufLen;
char *RecBuf;
double trans_time;
int opt_value;
char tmp[]={};
char res[]={};
char ACC[]={}; ftime(&SendTime); //lr_error_message("time:%d,millitm:%d,ip:%s",SendTime.time,SendTime.millitm,lr_eval_string("<IP_PORT>")); if(ef_millitm==SendTime.millitm)
{
sprintf(tmp,"%03d%03d",(SendTime.time%),(SendTime.millitm+quchong));
quchong++;
}
else
{ sprintf(tmp,"%03d%03d",(SendTime.time%),SendTime.millitm);
quchong=;
} ef_millitm=SendTime.millitm;
//lr_error_message("SendTime.time = %d",SendTime.millitm);
//lr_error_message("SendTime.time = %d",SendTime.time%1000); toHexString(res,tmp,);
toHexString(ACC,lr_eval_string("<AC_1>"),);
//lr_error_message("tes = %s",tmp);
lr_save_string(res,"系统跟踪号");
lr_save_string(ACC,"借记卡号"); // 建立发送通道连接 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
lr_start_transaction("消费"); // 发送报文 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
lr_start_transaction("消费_发送报文");
rc = lrs_send(lr_eval_string("<p_Socket>"), "SendBuf1", LrsLastArg);
if(rc == )
{
lr_end_transaction("消费_发送报文", LR_PASS);
}
else
{
lr_end_transaction("消费_发送报文", LR_FAIL);
lr_end_transaction("消费", LR_FAIL);
lr_error_message("消费_发送报文失败;错误码是:%d;", rc);
// lrs_disable_socket(lr_eval_string("<p_Socket>"), DISABLE_SEND_RECV);
// lrs_close_socket(lr_eval_string("<p_Socket>"));
lr_exit(LR_EXIT_ITERATION_AND_CONTINUE, LR_FAIL);
}
rc = ;
//RecBuf = (char*)calloc(1024, sizeof(char));
// 接收报文 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++=+++++++++++++++++++++++++
lr_start_transaction("消费_接收报文");
rc = lrs_receive(lr_eval_string("<p_Socket>"), "ReceiveBuf1", LrsLastArg); trans_time=lr_get_transaction_duration("消费"); if(trans_time>)
{
lr_error_message("消费响应时间为:%f,请求流水号为:%s",trans_time,res);
} if((rc == )||(rc == ))
{
lrs_get_last_received_buffer(lr_eval_string("<p_Socket>"), &RecBuf, &RecBufLen); if(RecBufLen == )
{
lr_end_transaction("消费_接收报文", LR_FAIL);
lr_end_transaction("消费", LR_FAIL);
//lr_error_message("交易出错!出错的流水号是:%s",lr_eval_string("<DateTime><VuserID><Number>"));
lr_error_message("消费 未接收到返回,卡号:%s,流水号:%s",lr_eval_string("<AC_1>"),tmp);
lr_exit(LR_EXIT_ITERATION_AND_CONTINUE, LR_FAIL);
}
else if(RecBufLen != )
{
lrs_save_param(lr_eval_string("<p_Socket>"),NULL,"rsp_code_1",,);
lr_end_transaction("消费_接收报文", LR_FAIL);
lr_end_transaction("消费", LR_FAIL);
lrs_free_buffer(RecBuf); lr_error_message("消费返回报文不正确,长度:%d,流水号:%s,应答码:%s,ip:%s",RecBufLen,tmp,lr_eval_string("<rsp_code_1>"),lr_eval_string("<IP_PORT>"));
lr_exit(LR_EXIT_ITERATION_AND_CONTINUE, LR_FAIL);
}
lrs_save_param_ex(lr_eval_string("<p_Socket>"), "user", RecBuf, , RecBufLen, "ascii", "NewRecBuf");
//判断卡是否正常 需要删除
// lrs_save_param(lr_eval_string("<p_Socket>"),NULL,"rsp_code_1",74,10);
// if(strcmp(lr_eval_string("<rsp_code_1>"),"00")!= 0)
// {
// lr_error_message("出错报文定位的报文是:%s,卡号:%s,流水号:%s", lr_eval_string("<rsp_code_1>"),lr_eval_string("<AC_1>"),res);
// }
//
lrs_save_param(lr_eval_string("<p_Socket>"),NULL,"rsp_code",,);
//lr_save_var(lr_eval_string("<NewRecBuf>")+182,2,0,"ret"); //lr_error_message("======定位的报文是:%s", lr_eval_string("<rsp_code>")); if(strcmp(lr_eval_string("<rsp_code>"),"")==)
{
lr_end_transaction("消费_接收报文", LR_PASS);
lr_end_transaction("消费", LR_PASS);
}
else
{
lr_end_transaction("消费_接收报文", LR_FAIL);
lr_end_transaction("消费", LR_FAIL);
//lr_error_message("交易出错!出错的流水号是:%s",lr_eval_string("<DateTime><VuserID><Number>"));
lr_error_message("交易出错!卡号:%s,流水号是:%s",lr_eval_string("<AC_1>"),tmp);
}
}
else
{
lr_end_transaction("消费_接收报文", LR_FAIL);
lr_end_transaction("消费", LR_FAIL);
lr_error_message("消费_接收报文失败;错误码是:%d,流水号:%s", rc,res);
lrs_free_buffer(RecBuf);
lr_exit(LR_EXIT_ITERATION_AND_CONTINUE, LR_FAIL);
} lrs_free_buffer(RecBuf); return ;
} //将字符串转换成16进制 //855071 变为\x85\x50\x71
int toHexString(char* OutStr,char* InStr,int len)
{
int i=;
for(;i<len;i++)
{
if((i==)||(i%==))
{
sprintf(OutStr+*i,"%s%c","\\x",(unsigned char)InStr[i]);
}
else
{
sprintf(OutStr+*i+,"%c",(unsigned char)InStr[i]);
}
}
return ;
}

[性能测试]:关于消费类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. jFinal render为什么不跳转到指定的页面

    jFinal render为什么不跳转到指定的页面 1:需要在你自己的主配置文件里面配置所有页面的文件前缀,没配置默认是项目的根目录 //配置页面访问主路径 me.setBaseViewPath(&q ...

  2. typedef char int8; 这样定义的好处?

    用typedef定义int8代表char:然后用int8去定义其他变量.一旦系统中char不再是占8位的数据时,可重新typedef新的占8位的类型为int8,而所有的用int8定义的8为类型数不用再 ...

  3. windows下Apache的虚拟主机配置

    1.Apache虚拟主机: 在Apache上有关于虚拟主机的具体说明,具体可以参考Apache手册,这里简单的说一下虚拟主机主要分为两种: 1.基于主机名的虚拟主机(一个IP地址,多个网站) 2.基于 ...

  4. HBase-1.2.1和Phoenix-4.7.0分布式安装指南

    目录 目录 1 1. 前言 2 2. 概念 2 2.1. Region name 2 3. 约定 2 4. 相关端口 3 5. 下载HBase 3 6. 安装步骤 3 6.1. 修改conf/regi ...

  5. Google Tango初学者教程

    Getting Started with the Tango Java API In this tutorial, we'll go through setting up your build env ...

  6. zabbix监控cpu jumps

    cpu监控图形分为三种 cpu jumps cpu突发 包含 context switches per second 进程线程切换 interrupts per second 每秒的中断次数 cpu ...

  7. linux清理磁盘

    https://blog.csdn.net/u012660464/article/details/78923011 有时候,服务突然挂了,再次启动却启动不了.一看,原来是磁盘空间被占满啦,那么,怎么清 ...

  8. .net图表之ECharts随笔08-bar柱状图

    之前一直都是跟着修改demo,感觉用得很吃力,现在结合上配置手册就好很多了,其实说到底就是参数的配置,所以配置手册尤为重要. 当然,这其中还是很多坑,希望可以找到对应的解决方案吧!!! 1. tool ...

  9. Beginning Asp.Net Security 读书笔记-----XSS

    几个月前通过Veracode对代码进行动态和静态安全扫描,扫出了数以千计的安全bug,基本上都是top 10的,安全漏洞. 其中CWE80,CWE601数量最多.具体CWE的定义可参考http://c ...

  10. 了解什么是版本控制 & 用tortoiseSVN 建立本地版本库来管理自己的代码

    什么是版本控制 版本控制系统(Version Control System,简称VCS)广泛地应用于程序开发等领域,它可以协助你将某个指定的文件(甚至是一整个项目)返回至某个之前记录的状态,查看发生了 ...