Loadrunner性能测试学习经历-2

上一篇 / 下一篇  2009-03-30 14:01:32 / 个人分类:性能测试学习

问题概述:

部门的一个重要系统随着用户量的不断增加,系统架构各个部分的性能瓶颈都在不断显现,比如:WEB服务器的IIS当机(并发连接用户数过大)、数据库死锁、签核引擎调用失败等等。因此现阶段该系统的开发团队在从各个不同角度提升性能,但困难处在于无法准确地获知性能提升的状况如何。由于前期的扩展性方面的欠缺,后期性能的提升是个艰巨而痛苦的过程。

WEB服务器的IIS当机(并发连接用户数过大)问题目前正在解决中,由于第一次使用负载均衡技术,一切实施及其效果都在摸索过程中,而由于没有直接参与,因此我就不做细说,如果后期对其有进一步的了解,我再加以整理公布。我这里主要介绍的是另一个问题,即签核引擎调用失败的问题。

该系统的签核引擎是一个WEB Servers服务,系统在签核单据时调用该服务以达到证书签核的目的,而现在的问题就是在这个过程中,由于用户并发量过大,经常会有部分用户在部分单据签核过程中出现签核失败的情况。开发人员对签核引擎的程序及其服务器配置均进行了调整,为了验证其是否目前的性能状况,需要对其进行性能测试

解决过程:

原本以为这个测试过程很简单,只要请开发人员写一个简单的HTML页面调用签核引擎,记录其成功与失败数及其相关的各方面性能数据就可以了。而事实证明性能测试光知道工具使用是远远不够的,因为我最终没有找到如何记录成功与失败数的办法,其中尝试了加文本检查点(无法同时检查两种状态的页面,而我又不知道其是否可以抓取到非静态文本内容多次尝试后均失败),也想过在录制的脚本中加入计数变量(发现我并不知道如何在录制的函数内插入语句,也许根本就不能插)。

通过了以上的失败之后,我苦恼了好几天,最后我不得不找寻自己撰写脚本代码的方法(前面之所以没有直接用这种办法是因为我对其一无所知),最终通过这种方法解决了以上的脚本问题,而且比录制更为的简单明了。

解决办法:

寻找.NET的脚本撰写插件(不要在网上到处找,因为它就在LR9.1的安装包里有),安装后,在VS2005环境中使用C#语言撰写脚本

usingSystem;

usingSystem.Runtime.InteropServices;

usingCom.Foxconn.Ca.Esign;

usingCom.Foxconn.Ca.Esign.PdfSigner;

 

namespaceLoadRunnerUser2

{

   ///<summary>

   ///Summary description for VuserClass.

   ///</summary>

   [ClassInterface(ClassInterfaceType.AutoDual)]

   publicclassVuserClass

   {

       LoadRunner.LrApilr;

 

       publicVuserClass()

       {

           // LoadRunner Standard API Interface ::            DO NOT REMOVE!!!

           lr =newLoadRunner.LrApi();

       }

 

       // ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

       publicintInitialize()

       {

                      returnlr.PASS;

       }

// ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

       publicintActions()

       {

           stringID;

 

           PdfSigner signer =newPdfSigner();

           ID = lr.eval_string("{username}");

//    这里的参数化曾花费了我近一天的时间,因为网上资料实例中用"<>"而我在LR中一直用的是“{}”,而其中我来去折腾了很多次,过程基本记不清了,只不过确定了这里用“{}”才真正起到参数化的效果

           stringtemp0 = signer.SignByName2(ID,"Sign1","熊罡","FOXCONN CA");

           if(temp0 ==false)

           {

               lr.end_transaction("ttt", lr.PASS);

           }

           else

           {

               lr.end_transaction("ttt", lr.FAIL);

           }

//    这里并没有真正起到统计成功与失败总数的作用,这个问题需要进一步通过摸索去验证实现方式(在函数中使用变量计数显然存在问题,因为会有很多虚拟用户同时调用这个脚本)

           returnlr.PASS;

       }

       publicintTerminate()

       {

                      returnlr.PASS;

       }

   }

}

 

经验与教训:

1.     永远都不要去害怕未知的事物,勇敢地去做起来,碰到问题就去解决问题,人人都是这么过来的。

2.     要做好性能测试,仅仅是知道工具如何使用是远远不够的,只有真正了解其工作方式、原理及其执行后的结果,你才算是熟悉了工具的使用。

 

注:如果有人知道如何解答我上文中的问题的,请务必赐教。谢谢!


TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

Open Toolbar