Loadrunner性能监测tomcat9实践

对于性能测试,只看数据库服务器和应用服务器的一些指标似乎毫无头绪。直接对数据库和中间件进行监控势在必行。今天实践一则通过loadrunner脚本实现对tomcat的监控。(属于重复造轮子)

Loadrunner监控tomcat9实践

一、首先需要配置一个tomcat用户,manager-gui角色

1、配置Tomcat登录用户,找到tomcat9目录下的/conf/ tomcat-users.xml,添加配置如下:

<role rolename="manager-gui"/>

<user username="name" password="password" roles="manager-gui"/>

注意:其中namepassword 分别为设置的用户名和密码;且不应向具有管理GUI角色的用户授予管理脚本的角色。

2、tomcat9同时还需要修改,如无新建conf/Catalina/localhost/manager.xml 内容如下:

<Context privileged="true" antiResourceLocking="false"

         docBase="${catalina.home}/webapps/manager">

    <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="^.*$" />

</Context>

无须重启tomcat即可生效。

3、在http://IP:port/页面验证下能不能登录

主要保证能访问http://IP:port/manager/status

Loadrunner监控tomcat9实践

说明:IP 为本机IP地址;port 为tomcat端口号,默认为8080,可以在Tomcat的conf文件下server.xml中修改:

<Connector port="8080" protocol="HTTP/1.1"
 
               connectionTimeout="20000"
 
               redirectPort="8443" />

二、准备脚本

1、在原Acion()后面新建一个Action(),自行命名,如Action_tomcat()。

2、通过web_set_user()函数设置tomcat登录用户信息并使用web_url()模拟登录后打开status页面。

web_set_user("name","password","IP:port");

web_url("status",

            "URL=http://IP:port/manager/status",

            "Resource=0",

            "Referer=",

            "Snapshot=t1.inf",

            "Mode=HTML",

            LAST);

3、利用关联函数web_reg_save_parm()动态地捕获想要的数据(字符串格式),例如获取MaxThreads点值:

web_reg_save_param("HTTP_MaxThreads",

                   "LB=Max threads: ",

                   "RB= ",

                   "Ord=1",

                   LAST);

注意:放置 web_reg_save_parm() 在获取动态值的步骤之前;即此函数,应该放在上面登录步骤( web_set_user )之前。

4、使用atof()函数将获取的字符串数据转化为浮点数形式

double atof(const char * string);

5、使用lr_user_data_point()函数自动记录一个自定义的数据标识,以MaxThreads为例:

lr_user_data_point("Tomcat_HTTP_MaxThreads",atof(lr_eval_string("{HTTP_MaxThreads}")));

说明:lr_user_data_point()函数 用来记录一条自定义的Vuser运行数据,并将其输出到测试结果中,最后可以通过分析工具Analysis来分析数据采集情况。

6、考虑增加thinktime(思考时间),视情况自行斟酌多少。(这个是采集时间间隔,一定要加

完整的Loadrunner Action 脚本如下:

Action_tomcat()
{
    //显示申明atof函数
    //该函数功能:把字符串转换成浮点数
    //返回值:每个函数返回 double 值,此值由将输入字符作为数字解析而生成.如果该输入无法转换为该类型的值,则返回值为 0.0
    double atof(const char * string);
 
    //手动关联保存剩余内存值在变量 "FreeMemory"中
    web_reg_save_param("FreeMemory",
                      "LB=Free memory: ",
                      "RB= MB",
                      "Ord=1",
                      LAST);
					  
    //手动关联保存总的内存值在变量 "TotalMemory"中
    web_reg_save_param("TotalMemory",
                      "LB=Total memory: ",
                      "RB= MB",
                      "Ord=1",
                      LAST);
    //手动关联保存最大内存值在变量 "MaxMemory"中
    web_reg_save_param("MaxMemory",
                      "LB=Max memory: ",
                      "RB= MB",
                      "Ord=1",
                      LAST);
    //手动关联保存最大http请求最大线程值在变量 "MaxThreads"中
    web_reg_save_param("MaxThreads",
                      "LB=Max threads: ",
                      "RB= ",
                      "Ord=1",
                      LAST);
    //手动关联保存最大http请求最大进程值在变量 "MaxProcessingTime"中
    web_reg_save_param("MaxProcessingTime",
                      "LB=Max processing time: ",
                      "RB= s",
                      "Ord=1",
                      LAST);
    //手动关联保存http请求数在变量 "RequestCount"中
    web_reg_save_param("RequestCount",
                      "LB=Request count: ",
                      "RB= ",
                      "Ord=1",
                      LAST);
    //手动关联保存http接收的字节数在变量 "BytesReceived"中
    web_reg_save_param("BytesReceived",
                      "LB=Bytes received: ",
                      "RB= MB",
                      "Ord=1",
                      LAST);
    //用户登录tomcat
    web_set_user("root","123456","127.0.0.1:8080");
 
    //设置思考时间为3秒
    lr_think_time(3);
 
    //根据函数中的URL属性加载对应的URL,不需要上下文,并登陆
    web_url("status",
            "URL=http://127.0.0.1:808/manager/status",
            "Resource=0",
            "Referer=",
            "Snapshot=t1.inf",
            "Mode=HTML",
            LAST);
    /*
     int lr_user_data_point (const char *sample_name, double value);
     函数名:lr_user_data_point
     参数列表:onst char *sample_name, double value
     功能:用来记录一条自定义的Vuser运行数据,并将其输出到测试结果中,最后可以通过分析工具Analysis来分析数据采集情况
    */
	
    lr_user_data_point("Tomcat_FreeMemory",atof(lr_eval_string("{FreeMemory}")));
 
    lr_user_data_point("Tomcat _TotalMemory",atof(lr_eval_string("{TotalMemory}")));
 
    lr_user_data_point("Tomcat_MaxMemory",atof(lr_eval_string("{MaxMemory}")));
 
    lr_user_data_point("Tomcat_MaxThreads",atof(lr_eval_string("{MaxThreads}")));
 
    lr_user_data_point("Tomcat_MaxProcessingTime",atof(lr_eval_string("{MaxProcessingTime}")));
 
    lr_user_data_point("Tomcat_ProcessingTime",atof(lr_eval_string("{ProcessingTime}")));
 
    lr_user_data_point("Tomcat_RequestCount",atof(lr_eval_string("{RequestCount}")));
 
    lr_user_data_point("Tomcat_BytesReceived",atof(lr_eval_string("{BytesReceived}")));
 
    return 0;
}

三、场景运行验证

1、正常运行一个场景

2、生成场景分析文件

3、添加Graphs,选择用户定义的数据点

Loadrunner监控tomcat9实践

4、查看生成的结果

(Average)

Loadrunner监控tomcat9实践

(Sum)

Loadrunner监控tomcat9实践

5、最后就是将结果和tomcat配置/应用程序进行结合分析啦~



留言