使用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/

时间: 2024-10-27 23:50:06

使用LoadRunner进行服务器性能测试的相关文章

mysql服务器性能测试怎么做

问题描述 mysql服务器性能测试怎么做 本人新搭建好一个mysql服务器,它的性能和处理能力该怎样来测试呢?包括用哪个工具,关注哪些性能参数? 解决方案 有很多这样的工具,比如说 mysqlslap Super-smack MySQL Benchmark loadrunner 但是不是说用工具就能准确度量出你的服务器性能了,因为工具仅仅是工具,压力测试仅仅是模拟测试. 真实场景下业务是多种多样的,用户的真实访问,真实的数据和查询请求不是简单靠工具能模拟出来的,dba的经验在这里非常关键. 解决

利用LoadRunner编写socket性能测试脚本

一.概述 Loadrunner拥有极为丰富的工具箱,供予我们制造出各种奇妙魔法的能力.其中就有此次要讨论的socket套接字操作. 二.socket概述 socket是操作系统中I/O系统的网络延伸部分,它扩展了操作系统的基本I/O到网络通信,使进程和机器之间的通信成为可能.如果想完全地理解socket在Loadrunner中如何工作的,熟悉一些关于它的历史会很有帮助. 当前常用的socket,最早起源于BSD UNIX类的操作系统.在UNIX系统上,比如BSD,把对网络的支持加入操作系统,以一

基于linux的Web服务器性能测试

一.基于linux的Web服务器性能测试的重要性 linux作为一种免费的开源操作系统,正越来越受到人们的重视.随着稳定的Linux 2.4内核发布日期的临近和Intel IA-64构架的推出,Linux在服务器操作系统市场所占的份额会继续扩大,那么基于Linux的应用也就会日益丰富.而在Internet时代,操作系统最广阔的市场空间就是Web服务器,正是遍布全球的千千万万的Web服务器才构成了因特网信息资源的基础,而Web服务器性能的优劣直接关系到人们对信息资源的利用效率,因此对Web服务器性

Gatling:新一代服务器性能测试工具

21世纪是云的世纪, 大规模云网已经出现了,而且在未来几年内会得到高速发展,从而使得基于云的系统也会越来越多.如果要开发一款高性能的云系统,服务器性能测试是一个必不可少的环节.今天,就来介绍一款新一代服务器性能测试工具Gatling. 一,什么是Gatling Gatling是一款基于Scala 开发的高性能服务器性能测试工具,它主要用于对服务器进行负载等测试,并分析和测量服务器的各种性能指标.Gatling主要用于测量基于HTTP的服务器,比如Web应用程序,RESTful服务等,除此之外它拥

抵御百万级在线用户强压,服务器性能测试就该这么做!

导读    大量用户登录游戏产生的"洪荒之力"往往会对游戏服务器产生巨大的压力,游戏上线之前对服务器的承载能力做测试是必须要做的事.本文从腾讯游戏服务器性能测试的经历出发,对服务器性能测试的原理.指标和方法进行了介绍,并介绍了内部目前流行的一些工具和使用技巧.   在四年磨一剑的奥运会,要想成功,必须顶住压力,在0.13秒错失400米自由泳金牌之后,孙杨在200米自由泳比赛中后来居上,夺回冠军:傅园慧靠着自己的"洪荒之力",反复刷新自己的最好成绩.     那么,同

服务器性能测试 测试工具 如何测试?

问题描述 服务器性能测试 测试工具 如何测试? 服务器性能测试有哪些方法? 测试工具有哪些? 如何测试? 服务器压力测试怎么做? 解决方案 1.衡量服务器性能,通常有以下指标:吞吐量,连接建立速率,并发连接数: 2.测试服务器性能通常采用专门的测试工具来测试,硬件工具有smartbit,ixia等,价格通常不菲,软件测试工具由http_load, web_load, opensta等. 3.要测试服务器性能的话,首先需要搭建一个测试环境,如果使用硬件测试器的话(性能好,功能强),一般都有很好的手

新一代服务器性能测试工具Gatling

21世纪是云的世纪, 大规模云网已经出现了,而且在未来几年内会得到高速发展,从而使得基于云的系统也会越来越多.如果要开发一款高性能的云系统,服务器性能测试是一个必不可少的环节.今天,就来介绍一款新一代服务器性能测试工具Gatling. 一,什么是Gatling Gatling是一款基于Scala 开发的高性能服务器性能测试工具,它主要用于对服务器进行负载等测试,并分析和测量服务器的各种性能指标.Gatling主要用于测量基于HTTP的服务器,比如Web应用程序,RESTful服务等,除此之外它拥

谈服务器性能测试 域名的查询和注册

服务器http://www.aliyun.com/zixun/aggregation/14356.html">性能测试 1.服务器探针测试 服务器探针应该是使用最为广泛的测试虚拟主机性能的程序,根据所支持的脚本不同,又分为ASP探针.PHP探针.JSP探针等.顾名思义,如果你是ASP的空间,就要使用ASP服务器探针进行空间的测试.这里我们以一款阿江ASP探针程序为例,说明服务器探针的使用方法. 第一步:下载探针源程序,一般是网页程序如.asp后缀的文件,解压缩后将其上传到网站任一目录. 第

Laravel/Lumen搭建服务器性能测试

背景和目的 一个最简单的服务器,我们至少也要关心服务器的吞吐量.cpu使用率.内存消耗.这篇文章会在上篇文章的基础上,使用搭建好的环境测试这个几个基本指标,分析性能瓶颈,给出可能的解决的方法.最终的目的是在服务器环境中测试oss php sdk的性能. 准备 利用上一篇搭建好的环境(参见 https://yq.aliyun.com/articles/173260?spm=5176.8091938.0.0.ZkrjGo ) 我们写一个最简单的测试代码, #修改routes/web.php为 Rou