【性能测试】:关于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 ...
随机推荐
- [Groovy]SoapUI怎样在Groovy脚本中读取变量的值
def saveFilePath = context.expand( '${#Project#saveFilePath}' ) def myOutFile = saveFilePath+"t ...
- 静态HTML服务器
主要代码 #pragma once#include "pre.h"#include <thread> NAMESPACE(DEF) class Socket {publ ...
- HDU 1060 Leftmost Digit (数学log)
题意:给定一个数n,让你求出n的n次方的第一位数. 析:一看这个n快到int极限了,很明显不能直接做,要转化一下.由于这是指数,我们可以把指数拿下来. 也就是取对数,设ans = n ^ n,两边取以 ...
- Linux守护进程编写方法及原理
什么守护进程? 守护进程是运行在后台的一种用来提供服务的进程,他脱离控制台独立运行,守护进程是一种很有用的进 程. Linux的大多数服务器就是用守护进程实现的.比如,Internet服务器inetd ...
- 微信小程序 tp5上传图片
test.wxml页面 <view class="title">请选择要反馈的问题</view> <view> <picker bindc ...
- win7更改路由器wifi 密码
1.有线.无线都能进入192.168.1.1路由设置界面 (也可能是192.168.0.1看路由底面IP) ps: 无线(笔记本与路由没使用网线相连)情况下必须开启wifi连接上该路由才能进入. 无法 ...
- (转)【javascript基础】原型与原型链
原文地址:http://www.cnblogs.com/allenxing/p/3527654.html 前言 原型是什么 理解原型对象 原型对象 isPrototypeOf hasOwnProper ...
- 23 DesignPatterns学习笔记:C++语言实现 --- 2.1 Bridge
23 DesignPatterns学习笔记:C++语言实现 --- 2.1 Bridge 2016-07-22 (www.cnblogs.com/icmzn) 模式理解
- 神器与经典--DMVsinSQLServer
前言: 在不经意间发现这个SQL,正能量瞬间饱满,赶紧向周边的人分享,私藏是罪过啊! 请复制粘贴然后F5,经典无须多说! /************************************** ...
- Solr中的概念:分析器(analyzer)、字符过滤器(character filter)、分词器(Tokenizer)、词元过滤器(Token Filter)、 词干化(Stemming)
文本中包含许多文本处理步骤,比如:分词,大写转小写,词干化,同义词转化和许多的文本处理. 文本分析既用于索引时对一文本域的处理,也用于查询时查询字符串的文本处理.文本处理对搜索引擎的搜索结果有着重要的 ...