使用LoadRunner进行服务器性能测试

简介:
由于项目进入尾声,需要进行 性能测试,没有专业的性能测试工程师,只好自己动手,研究一下loadrunner.
  发现loadrunner对 web测试介绍比较多,牵涉到winsocket测试的资料极少,不过到处找一找,研究一下,也是可行的.
  先说一下我们的协议,采用tcp协议,与客户端采用自定义二进制流的方式进行通信.遵从普通的自定义协议的方式,即协议结构采用包头+包体的形式,包头为固定大小的长度,并在包头中加入包体总长度的字段.
  好了,下面可以用loadrunner进行协议测试了.首先想法在PC上实现一个简单的协议生成软件,我采用python进行编制,将协议跑一遍,然后用loadrunner进行录制.由于是针对单个的协议录制,因而在loadrunner中生成的脚本一目了然.考虑到同一条协议根据不同的条件,返回的数据是不一样的,因此脚本稍有点复杂.
  录制的脚本默认采用函数lrs_receive()来接收脚本,根据loadrunner的匹配规则,默认用data.ws中recv buf 中指定的长度来进行匹配,这样,由于同一个协议返回的数据总是不断变化的,就必然导致测试不通过的情况.在网上查到,可以通过某个设置使得每次达到录制时的数据量即可,但这样做有个明显的缺陷,每次读到到指定的数据后就不读取了,针对短连接,或是只测试一次的还可以,要是长连接,需要不停发送和接收的,必然出现测试不准确的问题.
  以下为解决方法,将lrs_receive改为lrs_receive_ex,并将一次读取改为两次读取,第一次读取固定大小的包头,读完包头后,解析出包体的大小,然后再读取包体.
  此方法适用所有自定义winsocket协议,附上相关脚本.
/********************************************************************* * Created by Mercury Interactive  Windows Sockets Recorder * * Created on: Fri Jul 13 16:08:19 *********************************************************************/
#include "lrs.h"
vuser_init()
{
lrs_startup(257);
lr_start_transaction("create_socket");
lrs_create_socket("socket0", "TCP", "RemoteHost=127.0.0.1:110",  LrsLastArg);
lr_end_transaction("create_socket", LR_AUTO);
return0;
}
/********************************************************************* * Created by Mercury Interactive Windows Sockets Recorder * * Created on: Fri Jul 13 16:08:19 *********************************************************************/
#include "lrs.h"long getNextRecvLen(char* socketID)
{
int NumberOfBytes = 0;
int NextRecvLen = 0;
char *Buffer;
lrs_get_last_received_buffer(socketID, &Buffer, &NumberOfBytes);
memcpy((char*)&NextRecvLen, Buffer+20, 4);
lr_log_message("last_received:%d, NextRecvLen:%d", NumberOfBytes, NextRecvLen);
return NextRecvLen;
}
int receive_ex(char* socketID, char* buf)
{
long NextRecvLen = getNextRecvLen(socketID);//getNextRecvLen("socket0");char flag[50];
memset(flag, 0, sizeof(flag));
sprintf(flag, "NumberOfBytesToRecv=%d", NextRecvLen);
lr_log_message(flag);
lrs_receive_ex(socketID, buf, flag, LrsLastArg);
}
void doOneThing(int index)
{
char sendbuf[50];
char recvbuf1[50];
char recvbuf2[50];
char transbuf[50];
memset(transbuf, 0, sizeof(transbuf));
sprintf(transbuf, "one_send_recv_%d", index);
lr_start_transaction(transbuf);
memset(sendbuf, 0, sizeof(sendbuf));
memset(recvbuf1, 0, sizeof(recvbuf1));
memset(recvbuf2, 0, sizeof(recvbuf2));
sprintf(sendbuf, "buf%d", 2*index);
sprintf(recvbuf1, "buf%d", 2*index+1);
sprintf(recvbuf2, "dbuf%d", index);
lrs_send("socket0", sendbuf, LrsLastArg);
lrs_receive_ex("socket0", recvbuf1, "NumberOfBytesToRecv=32", LrsLastArg);
receive_ex("socket0", recvbuf2);
lr_end_transaction(transbuf, LR_AUTO);
}
Action()
{
lr_rendezvous("read_all_req_0");
doOneThing(0);
}
/********************************************************************* * Created by Mercury Interactive Windows Sockets Recorder * * Created on: Fri Jul 13 16:08:19 *********************************************************************/
#include "lrs.h"
vuser_end()
{
lrs_close_socket("socket0");
lrs_cleanup();
return0;
}
  由于是分两次读取数据,必然读取的内容与录制的会稍有不同,幸好我们判断成功与否不是用返回的数据进行比较,而只是核对一下数据的大小,因此完全可以手动修改数据脚本,以下为在录制的基础上手工修改的脚本(注意,只是更改了接收端)
send  buf0 28
"Test"
"\x00\x1b\x00\x00\x00"
"\x00\x00\x00\x00"
"\x12\x01\x00\x00\x00\x01\x00\x00\x00"
"\x02\x00\x01\x00\x01\x00"
recv  buf1 -1
recv rbuf0 -1

最新内容请见作者的GitHub页:http://qaseven.github.io/
相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
相关文章
|
2月前
|
网络协议 安全 测试技术
手撕测试tcp服务器效率工具——以epoll和io_uring对比为例
手撕测试tcp服务器效率工具——以epoll和io_uring对比为例
41 2
|
2月前
|
存储 弹性计算 运维
阿里云服务器ECS经济型e实例详细介绍_性能测试和租用价格
阿里云服务器ECS经济型e实例详细介绍_性能测试和租用价格,阿里云服务器ECS推出经济型e系列,经济型e实例是阿里云面向个人开发者、学生、小微企业,在中小型网站建设、开发测试、轻量级应用等场景推出的全新入门级云服务器,CPU采用Intel Xeon Platinum架构处理器,支持1:1、1:2、1:4多种处理器内存配比,e系列性价比优选
|
1月前
|
弹性计算 分布式计算 DataWorks
DataWorks报错问题之ecs自建数据库连通性测试报错如何解决
DataWorks是阿里云提供的一站式大数据开发与管理平台,支持数据集成、数据开发、数据治理等功能;在本汇总中,我们梳理了DataWorks产品在使用过程中经常遇到的问题及解答,以助用户在数据处理和分析工作中提高效率,降低难度。
|
1月前
|
弹性计算 缓存 测试技术
阿里云2核4g服务器(费用价格/性能测试/支持人数)
阿里云2核4g服务器能支持多少人访问?2核4G服务器并发数性能测试,阿小云账号下的2核4G服务器支持20人同时在线访问,然而应用不同、类型不同、程序效率不同实际并发数也不同,2核4G服务器的在线访问人数取决于多个变量因素
|
1月前
|
弹性计算 缓存 测试技术
2核4g服务器能支持多少人访问?阿里云2核4G服务器并发数测试
2核4g服务器能支持多少人访问?阿里云2核4G服务器并发数测试,2核4G服务器并发数性能测试,阿小云账号下的2核4G服务器支持20人同时在线访问,然而应用不同、类型不同、程序效率不同实际并发数也不同,2核4G服务器的在线访问人数取决于多个变量因素
|
2月前
|
存储 负载均衡 监控
epoll服务器百万并发测试
epoll服务器百万并发测试
31 1
|
2月前
|
弹性计算 数据中心
阿里云香港服务器详细介绍_BGP多线精品测试_CN2高速网络
阿里云香港服务器中国香港数据中心网络线路类型BGP多线精品,中国电信CN2高速网络高质量、大规格BGP带宽,运营商精品公网直连中国内地,时延更低,优化海外回中国内地流量的公网线路,可以提高国际业务访问质量。阿里云百科来详细介绍阿里云香港云服务器
|
2月前
|
弹性计算 测试技术 数据中心
阿里云香港服务器BGP多线精品网络_CN2性能测试_中国香港主机测试
阿里云香港服务器BGP多线精品网络_CN2性能测试_中国香港主机测试,阿里云香港服务器中国香港数据中心网络线路类型BGP多线精品,中国电信CN2高速网络高质量、大规格BGP带宽,运营商精品公网直连中国内地,时延更低,优化海外回中国内地流量的公网线路,可以提高国际业务访问质量
|
3月前
|
SQL 安全 测试技术
项目迁移到云服务器,如何做迁移测试?
项目迁移到云服务器,如何做迁移测试?
|
7月前
|
关系型数据库 MySQL Java
【JMeter】(3)---MySQL压测
【JMeter】(3)---MySQL压测
174 0