LoadRuner轻松测试(.Net,C++,JAVA)后端服务,组件性能,压力测试
上一篇 /
下一篇 2012-07-18 15:47:57 / 天气: 热
/ 心情: 平静
/ 精华(1)
/ 置顶(3)
/ 个人分类:性能测试
大型网站的基础数据流都是通过后端的服务以及组件维护处理,前端站点获取需要的数据并且显示或者2次处理,比较常见的后端架构是一组服务维护后面的db或者nosql数据,再提供对应的客户端组件和服务端通讯提供增删改查数据实现,对于后端这种服务或者组件对其评估测试性能的需求,常规测试性能可以自己写开线程并发调用客户端组件测试,不过然后最后统计数据和写比较好的多线程测试代码的质量相对来说麻烦。LR可以直接调用dll(.net/c++)或者jar(java)包对应的方法直接测试,当然最好的地方是负载和统计LR都做掉了(专业的东西做专业的事),我们只要关心测试数据就OK.(并非广告,真心好用)直接看例子:1.解决.net的dll调用测试
根据.net版本3.5之前的包括3.5使用LR11可以很好的解决,并且带了VS2008的插件可以直接在VS中创建LR工程如图:创建好工程后我们可以看下生成的默认代码样子public class VuserClass
{
LoadRunner.LrApi lr;
public VuserClass()
{
// LoadRunner Standard API Interface :: DO NOT REMOVE!!!
lr = new LoadRunner.LrApi();
}
// ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
public int Initialize()
{
// TO DO: Add virtual user's initialization routines
return lr.PASS;
}
// ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
public int Actions()
{
// TO DO: Add virtual user's business process actions
return lr.PASS;
}
// ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
public int Terminate()
{
// TO DO: Add virtual user's termination routines
return lr.PASS;
}
}
类里面主要有3大部分: 1.Initialize() 主要是做一些初始化的动作,比如打开db,网络连接等。2.Action() 被测试的主要内容放在这边,LR负载主要是针对对这块负载处理,这也是我们需要的结果3.Terminate() 清理动作,对应打开做关闭的动作。这是默认生成的框架结构,之外我们可以完全当成是.net的普通工程一样引用需要的dll,加上using,一切照旧。如果在Action内添加好需要的测试代码后,保存,我们就可以到LR里面了,在生成的项目下面会有个后缀为usr的LR工程文件(当然需要本机上安装了LR),双击打开就行,打开后,如下图:
和VS中的代码一样,F5运行,我顺便做了一句输出“Hello,Season”,当然可以在具体的测试代码前后加上Transtion,为了后面统计TPS,后面就可以直接使用LR的Control进行负载(具体并发数量和业务换算等指标,以及监控资源等这些基础就不多说明了)
然后我们可以看到TPS的曲线:
当然判断性能是否ok需要综合从多个方面去考虑的(缓存,数据基数,内存,网络,磁盘,CPU),这个只是方便处理负载的一种途径,呵呵,总结下来其实这个只是加了个负载的壳,也就是说负载和结果统计完全不要操心,只需要关注具体测试的内容才是核心。
上面的方式是通过VS插件完成工程创建,如果没有插件其实也可以,LR支持的.net工程可以直接创建,只是创建好之后,工程目录下面会自动生成VS工程,直接用VS工程打开,引用dll,编写测试代码,编译完成,再回到LR中运行也是一样的(不过这样必须注意的是在LR中任何编辑必须要到VS中编译通过后才可以在LR中运行)
附加.net4.0需要LR11.5开始才支持,貌似已经放出评估板,试用下来比较ok。
2.解决C++的Dll调用测试
其实和.net处理基本一致,创建如下图:
具体工程类结构如下:
// -----------------------------------------------------------------------------------
extern "C" DLLEXPORTED int Initialize()
{
return 0;
}
// -----------------------------------------------------------------------------------
extern "C" DLLEXPORTED int Actions()
{
return 0;
}
// -----------------------------------------------------------------------------------
extern "C" DLLEXPORTED int Terminate()
{
return 0;
}
处理和.net一致,就不重复了。
3.处理JAVA的jar包API测试
首先 在LR中创建Java Vusr的项目,如下图:
我们可以看下创建完项目后的默认代码结构
import lrapi.lr;
public class Actions
{
public int init() throws Throwable {
return 0;
}//end of init
public int action() throws Throwable {
return 0;
}//end of action
public int end() throws Throwable {
return 0;
}//end of end
}
其实和.net和C++的结构基本类似,init,action,end不具体解释了,接下来我们需要做的就是把需要调用的JAR包文件放到工程的根目录下,然后就当成是Eclispe一样写测试代码就ok了,这边写了个小例子,我在eclispe里面随便编了类方法然后打个jar包出来:
package season.test;
public class TestLrClass {
public void funtest()
{
System.out.println("Hello,Season");
}
}
只是简单输出“Hello,Season”,然后把这个jar放到LR的java工程的根目录下,接着看下LR中的使用方式:
我们可以看到import包下面的类,然后在action里面直接调用了funtest(),同样输出了“Hello,Season”,呵呵,So easy,后面负载就不再罗嗦了,一样的了。
总结:LR不光针对录制页面http强大简单,而且对于没有的页面的服务,组件等照样轻松应付,在大的系统中往往需要2者结合来评估系统的性能情况,从后到前,从下到上的方式对整个系统进行全方面的测试排查。
收藏
举报
TAG: