zoukankan      html  css  js  c++  java
  • [性能测试]:关于消费类ISO8583协议脚本的开发

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

    "x01x52"//报文长度338
    "x60x00x24x00x00"//TPDU
    "x60x22x00x17x04x02"//报文头
    "x02x00"//应用数据
    "x70x24x06xC0x20xC0x9Ax31"//位图2,3,4,11,14,22,23,25,26,35,41,42,49,52,53,55,59,60,64
    "x19"//域2长度
    "<借记卡号>"//域2   6225683621000897490 x62x25x68x36x21x00x08x97x49x00
    "x00x00x00"//域3 
    "x00x00x00x00x00x25"//域4
    "<系统跟踪号>"//域11 流水号 x02x02x34
    "x28x08"//域14卡有效期 有效期不校验
    "x05x10"//域22
    "x00x01"//域23
    "x00"//域25
    "x12"//域26
    "x37"//域35长度
    "x62x25x68x36x21x00x08x97x49x3Dx28x08x22x01x47x00x00x01x00"//域35 核心第二磁道是否校验 x62x14x62x21x43x00x00x88x28x3Dx28x08x22x01x47x00x00x01x00
    "x31x31x30x30x30x30x30x31"//域41* 11000001
    "x33x30x36x35x38x38x32x36x33x30x30x30x30x30x31"//域42 306588263000001
    "x31x35x36"//域49
    "x5AxB1xBAxA5xBEx55xC0xCE"//域52 PIN 核心校验
    "x26x00x00x00x00x00x00x00"//域53 2带主账号的加密方式
    "x01x38"//域55长度
    "x9Fx26x08x82xCDxFBx9Fx42xB3x51xF2x9Fx27x01x80x9Fx10x13x07x01"
    "x01x03xA0xA0x04x01x0Ax01x00x00x00x00x00x16xEBxF0x9Bx9Fx37x04"
    "xF4x3Ex4Cx87x9Fx36x02x00xF1x95x05x08x00x04x60x00x9Ax03x17x05"
    "x03x9Cx01x00x9Fx02x06x00x00x00x00x00x25x5Fx2Ax02x01x56x82x02"
    "x7Cx00x9Fx1Ax02x01x56x9Fx33x03xE0xF0xC8x9Fx34x03x02x03x00x9F"
    "x35x01x22x84x08xA0x00x00x03x33x01x01x01x9Fx09x02x00x20x9Fx1E"
    "x08x38x34x36x37x36x39x35x39x9Fx03x06x00x00x00x00x00x00"//域55 ARQC校验 交换校验IC卡芯片是否为伪芯片
    "x00x62"//域59长度
    "x41x32x30x35x37x30x31x30x30x32x30x32x30x32x30x30x38x38x34x36"
    "x37x36x39x35x39x30x33x30x30x36x30x38x38x32x38x33x30x34x30x30"
    "x38x20x20x20x20x20x20x20x20x30x35x30x30x38x31x37x30x34x30x32x20x20"//域59
    "x00x19"//域60长度
    "x22x00x00x05x00x05x03x00x10x00"//域60 x22【x00x00x01批次号每次测试都要改】x00x05x0【3x00x1】0x00  x22x00x00x01x00x05x09x00x10x00
    "x4Dx1Bx8DxD9x04xF2xA7xA8"//域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=0;
    static int quchong=1;
    Action()
    {
    
        int rc = 888;
        int SndBufLen;
        int RecBufLen;
        char *RecBuf;
        double trans_time;
        int opt_value;
        char tmp[30]={0};
        char res[30]={0};
        char ACC[45]={0};
    
        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%1000),(SendTime.millitm+quchong));
              quchong++;
            }
        else
            { sprintf(tmp,"%03d%03d",(SendTime.time%1000),SendTime.millitm);
              quchong=1;
            }
    
        ef_millitm=SendTime.millitm;
        //lr_error_message("SendTime.time = %d",SendTime.millitm);
        //lr_error_message("SendTime.time = %d",SendTime.time%1000);
    
        toHexString(res,tmp,6);
        toHexString(ACC,lr_eval_string("<AC_1>"),20);
        //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 == 0)
        {
            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 = 888;
        //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>10)
        {
            lr_error_message("消费响应时间为:%f,请求流水号为:%s",trans_time,res);
        }
    
        if((rc == 0)||(rc == 9101))
         {
             lrs_get_last_received_buffer(lr_eval_string("<p_Socket>"), &RecBuf, &RecBufLen);
    
            if(RecBufLen == 0) 
            {
                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 != 257)
            {
                lrs_save_param(lr_eval_string("<p_Socket>"),NULL,"rsp_code_1",68,12);
                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, 0, 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",77,2);
            //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>"),"00")==0)
            {
                 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 0;
    }
    
    //将字符串转换成16进制 //855071 变为x85x50x71
       int toHexString(char* OutStr,char* InStr,int len)
       { 
           int i=0;
           for(;i<len;i++)
        {
            if((i==0)||(i%2==0))
            {
                sprintf(OutStr+2*i,"%s%c","\x",(unsigned char)InStr[i]);
            }
            else
            {
                sprintf(OutStr+2*i+1,"%c",(unsigned char)InStr[i]);
            }
        }
          return 0; 
        }
  • 相关阅读:
    电商网站秒杀与抢购的系统架构[转]
    解决sublime无法安装软件的问题
    oracel中decode的使用
    使用Spring进行远程访问与Web服务[转]
    解决maven传递依赖中的版本冲突
    Linux下rz,sz
    spring bean 使用继承
    Java14-ListIterator
    Java13-Iterator的应用
    Java11-ArrayList常用的方法
  • 原文地址:https://www.cnblogs.com/fy--/p/8926976.html
Copyright © 2011-2022 走看看