【性能测试】:关于Sockets协议的脚本的开发
一,关于Sockets协议的脚本,首先对报文的解析是一个关键,
报文的解析一般对着接口文档,弄清楚每个字段代表什么意思,如下一段报文,放在data.ws中
"\x00\x00\x01\x5C" // 报文长度348=15c,加上自己总长度
""
""
""
""
"AUMS"
"IBS "
"" // 发起方流水,22位
"" // 发起方日期,8位
"" // 发起方时间,6位
"G50704" //交易代码 6位
"" //网关错误标识2
" " // 网关错误代码 7
" " //编码1
" " //重发标志1
" " //保留位1 6
"" //交易码5
"" //交易发生日期8
"12:12:12" //交易发生时间8
"17982790034 " //交易流水号22
"" //交易日8
"" //代理标志1
"" //联网行编号4
"8888 " //交易网点10
" " //柜员10
" " //出纳员号4
" " //授权柜员1 10
" " //授权柜员2 10
"" //交易渠道 1
"0000 " //终端号 10
" " //返回码类型 1
"T" //请求类型 1
"" //授权级别 2
"1 " //当前第几页 8
"10 " //每页记录数 8
" " //备用1 20
" " //备用2 20
" " //备用3 20
" " //备用4 20
"6225683528000346164 " //银行账号 32
"Au99.99 " //合约代码 10
"" //交易类型 4
"" //委托价格 8 2
"1 " // 委托手数 6
"" // 指令类型 1
二,是关于Sockets通信协议,有必要了解一下长链接,短链接的区别
sockets报文如下
#include "lrs.h"
Action()
{
int rc = ;
int RecBufLen; // 接收报文长度
char *RecBuf = NULL; // 接收报文内容
RecBuf = (char*)calloc(, sizeof(char));
lrs_set_connect_timeout(, );
lr_start_transaction("01_50704_委托报单"); // 完整事务
lr_start_transaction("01_50704_委托报单_建立发送通道连接");
rc = lrs_create_socket("MySocket","TCP","RemoteHost=21.96.22.56:14000",LrsLastArg); // 黄金系统ip:端口
if(rc == )
{
lr_end_transaction("01_50704_委托报单_建立发送通道连接", LR_PASS);
}
else
{
lr_end_transaction("01_50704_委托报单_建立发送通道连接", LR_FAIL);
lr_error_message("01_50704_委托报单_建立发送通道连接失败,错误码是:%d", rc);
lr_end_transaction("01_50704_委托报单", LR_FAIL);
lrs_free_buffer(RecBuf); // 释放空间
lrs_disable_socket("MySocket", DISABLE_SEND_RECV); // 关闭接口
lrs_close_socket("MySocket");
lr_exit(LR_EXIT_ITERATION_AND_CONTINUE, LR_FAIL);
}
lrs_set_send_timeout(, );
lrs_set_recv_timeout(, );
lrs_set_recv_timeout2(, );
lr_start_transaction("01_50704_委托报单_发送报文");
rc = lrs_send("MySocket", "SendBuf", LrsLastArg);
if(rc == )
{
lr_end_transaction("01_50704_委托报单_发送报文", LR_PASS);
}
else
{
lr_end_transaction("01_50704_委托报单_发送报文", LR_FAIL);
lr_error_message("01_50704_委托报单_发送报文失败;错误码是:%d;", rc);
lr_end_transaction("01_50704_委托报单", LR_FAIL);
lrs_free_buffer(RecBuf); // 释放空间
lrs_disable_socket("MySocket", DISABLE_SEND_RECV); // 关闭接口
lrs_close_socket("MySocket");
lr_exit(LR_EXIT_ITERATION_AND_CONTINUE, LR_FAIL);
}
// 接受报文=====================================================================
lr_start_transaction("01_50704_委托报单_接收报文");
rc = lrs_receive("MySocket", "ReceiveBuf", LrsLastArg);
if((rc == )||(rc == ))
{
lrs_get_last_received_buffer("MySocket", &RecBuf, &RecBufLen);
if(RecBufLen>)
{
lrs_save_param_ex("MySocket", "user", RecBuf, , RecBufLen, "ascii", "NewRecBuf"); // 接收的完整报文
lrs_save_param_ex("MySocket", "user", RecBuf, , , "ascii", "RetStatus"); // 接收的交易状态
lrs_save_param_ex("MySocket", "user", RecBuf, , , "ascii", "RetCode"); // 接收的返回码
lrs_save_param_ex("MySocket", "user", RecBuf, , , "ascii", "RetMsg"); // 接收的返回信息
lrs_save_param_ex("MySocket", "user", RecBuf, , , "ascii", "RetID"); // 接收返回的流水号
//lr_error_message("======接收的完整报文是:%s", lr_eval_string("<NewRecBuf>"));
//lr_error_message("======发送的流水号是:%s", lr_eval_string("<DateTime><VuID><Num>"));
//lr_error_message("======接收的流水号是:%s", lr_eval_string("<RetID>"));
if (strcmp(lr_eval_string("<RetCode>"),"HJ0000 ") == )
//if (strcmp(lr_eval_string("<RetStatus>"),"N") == 0) // N-交易成功;E-交易失败;A-需要授权,交易未成功;W-警告(交易成功,返回提示信息);U-表示超时
{
if (strcmp(lr_eval_string("<RetID>"),lr_eval_string("<DATE><TIME><VUER><UNIQ>")) == ) // 发送流水号和接收流水号相同,防止串包
{
lr_end_transaction("01_50704_委托报单_接收报文", LR_PASS);
lr_end_transaction("01_50704_委托报单", LR_PASS);
}
else
{
lr_end_transaction("01_50704_委托报单_接收报文", LR_FAIL);
lr_end_transaction("01_50704_委托报单", LR_FAIL);
lr_error_message("01_50704_委托报单接收报文串包了!!!发送流水号是:%s,接收流水号是:%s,接收的完整报文是:%s", lr_eval_string("<DateTime><VuID><Num>"),lr_eval_string("<RetID>"),lr_eval_string("<NewRecBuf>"));
}
}
else
{
lr_end_transaction("01_50704_委托报单_接收报文", LR_FAIL);
lr_end_transaction("01_50704_委托报单", LR_FAIL);
lr_error_message("01_50704_委托报单接收报文出错!交易状态是:%s,返回码是:%s,返回信息是:%s,接收的完整报文是:%s", lr_eval_string("<RetStatus>"),lr_eval_string("<RetCode>"),lr_eval_string("<RetMsg>"),lr_eval_string("<NewRecBuf>"));
}
}
else
{
lr_end_transaction("01_50704_委托报单_接收报文", LR_FAIL);
lr_end_transaction("01_50704_委托报单", LR_FAIL);
lr_error_message("01_50704_委托报单接收报文为空!发送流水号是:%s", lr_eval_string("<DateTime><VuID><Num>"));
}
}
else
{
lr_end_transaction("01_50704_委托报单_接收报文", LR_FAIL);
lr_error_message("01_50704_委托报单_接收报文失败;错误码是:%d;", rc);
lr_end_transaction("01_50704_委托报单", LR_FAIL);
}
lrs_free_buffer(RecBuf); // 释放空间
lrs_disable_socket("MySocket", DISABLE_SEND_RECV); // 关闭接口
lrs_close_socket("MySocket");
return ;
}
【性能测试】:关于Sockets协议的脚本的开发的更多相关文章
- Loadrunner 脚本开发-利用loadrunner开发Windows Sockets协议脚本
脚本开发-利用loadrunner开发Windows Sockets协议脚本 by:授客 QQ:1033553122 欢迎加入软件性能测试交流QQ群:7156436 实践举例 Socket服务端简单实 ...
- JMeter5.1开发Java协议接口脚本【待完成】
JMeter5.1开发Java协议接口脚本
- LoadRunner录制Web协议的脚本 (by网络)
LoadRunner录制Web协议的脚本 http://itindex.net/detail/50530-loadrunner-web-脚本
- ESP8266 LUA脚本语言开发: 准备工作-LUA开发是怎么来的
前言 当前8266有各种开发 1.在官方已经封装好的C库上开发(SDK开发) 2.官方在SDK的基础上封装的AT指令程序(AT指令开发) 3.在SDK的基础上嵌入脚本语言(Lua,Python等开发方 ...
- shell编程系列26--大型脚本工具开发实战
shell编程系列26--大型脚本工具开发实战 大型脚本工具开发实战 拆分脚本功能,抽象函数 .function get_all_group 返回进程组列表字符串 .function get_all_ ...
- [性能测试]:关于消费类ISO8583协议脚本的开发
一,要发送的报文,转化成16进制的,报文如下 "\x01\x52"//报文长度338 "\x60\x00\x24\x00\x00"//TPDU "\x ...
- [LoadRunner]性能测试实践_Hessian协议脚本编写
第一步,新建LR的脚本,选择Java Vuser协议: 第二步,编写hessian测试脚本,如下: import lrapi.lr; import java.net.MalformedURLExcep ...
- [LoadRunner]性能测试实践_Hessian协议脚本编写2
协议选取和运行配置请参考:http://www.cnblogs.com/whylaughing/p/5430821.html 这次直接贴代码让大家参考: import lrapi.lr; import ...
- 使用LR编写windows sockets协议xml报文格式脚本实战
以下是测试脚本Demo: #include "lrs.h" Action() { char * resultCode;//结果代码 char * time; //系统时间 char ...
随机推荐
- [Jmeter]如何才能通过ant运行jmeter
在开始运行build.xml之前,还有一步必须要做,那就是将JMeter所在目录下extras子目录里的ant-JMeter-1.1.1.jar复制到Ant所在目录lib子目录之下,这样Ant运行时才 ...
- Mybatis的select查询的三种方式
1.首先建立一个测试的dao public interface IStudentDao { // 根据姓名查询 List<Student> selectStudentsByName(Str ...
- linux每天一小步---mkdir命令详解
1 命令功能 mkdir命令用于创建单个目录或者多级目录,但前提在于用户对于当前目录有写权限. 2 命令语法 mkdir [选项] [目录名] 3 命令参数 -m 在创建目录的同时设定目录权限(而 ...
- SDWebImage从缓存中获取图片
if ([[SDImageCache sharedImageCache] imageFromKey:sort.imageUrl]) { [cell.photoImageView s ...
- (字符串) Hidden String -- HDU -- 5311
链接: http://acm.hdu.edu.cn/showproblem.php?pid=5311 Time Limit: 2000/1000 MS (Java/Others) Memory ...
- HttpClient Timeout
1. Overview This tutorial will show how to configure a timeout with the Apache HttpClient 4. If you ...
- ZOJ1648 Circuit Board 2017-04-18 20:31 34人阅读 评论(0) 收藏
Circuit Board Time Limit: 2 Seconds Memory Limit: 65536 KB On the circuit board, there are lots ...
- Python WebDriver + Firefox 文件下载
firefox可以通过 在地址栏输入:about:config 或about:aupport 来查看或修改配置信息. 这里有两种解决方式, 1.设置自动保存下载 如下图勾选:以后自动采用相同的动作处理 ...
- scala中Nil用法
http://www.runoob.com/scala/scala-lists.html 即Nil是空List 双冒号是追加进入 package com.yjsj.spark object scala ...
- Gluster 常用命令
Gluster 常用命令1 服务器节点# gluster peer status //查看所有节点信息,显示时不包括本节点 # gluster peer probe NODE-NAME //添加节点 ...