【性能测试】:关于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 ...
随机推荐
- linux / centos 安装SQL Server 2017 设置默认语言与排序规则Chinese_PRC_CI_AS
安装 安装很简单参照官方教程 https://docs.microsoft.com/zh-cn/sql/linux/quickstart-install-connect-red-hat?view=sq ...
- Caffe 议事(二):从零开始搭建 ResNet 之 网络的搭建(上)
3.搭建网络: 搭建网络之前,要确保之前编译 caffe 时已经 make pycaffe 了. 步骤1:导入 Caffe 我们首先在 ResNet 文件夹中建立一个 mydemo.py 的文件,本参 ...
- MVC和WebApi 使用get和post 传递参数(转)
出处:http://blog.csdn.net/qq373591361/article/details/51508806 我们总结一下用js请求服务器的传参方法. Get方式 Get主要是用来查询,一 ...
- guestfish修改镜像内容
1.安装guestfish yum install libguestfs-tools 注意,如果要修改windows镜像需要安装 yum install libguestfs-winsupport 2 ...
- K8s基于DNS的服务发现(转)
原文地址:https://www.oschina.net/question/2657833_2201246 1.Kubernetes中如何发现服务 ◆ 发现Pod提供的服务 首先使用nginx-d ...
- Haodoop RPC解析
1. 前言 1 2. Hadoop RPC 1 2.1. 总体结构 1 2.1.1. RPC Interface 1 2.1.2. RPC Server 1 2.1.3. RPC Client 1 2 ...
- (转)SQL Server内存遭遇操作系统进程压榨案例
原文地址:http://www.cnblogs.com/zc_0101/p/3592259.html 场景: 最近一台DB服务器偶尔出现CPU报警,我的邮件报警阈(请读yù)值设置的是15%,开始时没 ...
- [leetcode] 11. Same Tree
因为我刷题是难度不是按发布日期,所以就有可能遇到这种情况,比如这个... Given two binary trees, write a function to check if they are e ...
- Android-有序广播明确指定接收者
在上一篇博客,Android-有序广播是可以中断的,介绍了 有序广播是可以中断的,但还有一种例外情况:明确指定接收者的有序广播是无法中断的,一定会发送到指定的接收者 AndroidManifest.x ...
- Firefox mobile (android) and orientationchange
Firefox for Android does not support the orientationchange event but you can achieve the same result ...