问题概述:
部门的一个重要系统随着用户量的不断增加,系统架构各个部分的性能瓶颈都在不断显现,比如:WEB服务器的IIS当机(并发连接用户数过大)、数据库死锁、签核引擎调用失败等等。因此现阶段该系统的开发团队在从各个不同角度提升性能,但困难处在于无法准确地获知性能提升的状况如何。由于前期的扩展性方面的欠缺,后期性能的提升是个艰巨而痛苦的过程。
WEB服务器的IIS当机(并发连接用户数过大)问题目前正在解决中,由于第一次使用负载均衡技术,一切实施及其效果都在摸索过程中,而由于没有直接参与,因此我就不做细说,如果后期对其有进一步的了解,我再加以整理公布。我这里主要介绍的是另一个问题,即签核引擎调用失败的问题。
该系统的签核引擎是一个WEB Servers服务,系统在签核单据时调用该服务以达到证书签核的目的,而现在的问题就是在这个过程中,由于用户并发量过大,经常会有部分用户在部分单据签核过程中出现签核失败的情况。开发人员对签核引擎的程序及其服务器配置均进行了调整,为了验证其是否目前的性能状况,需要对其进行性能测试。
解决过程:
原本以为这个测试过程很简单,只要请开发人员写一个简单的HTML页面调用签核引擎,记录其成功与失败数及其相关的各方面性能数据就可以了。而事实证明性能测试光知道工具使用是远远不够的,因为我最终没有找到如何记录成功与失败数的办法,其中尝试了加文本检查点(无法同时检查两种状态的页面,而我又不知道其是否可以抓取到非静态文本内容—多次尝试后均失败),也想过在录制的脚本中加入计数变量(发现我并不知道如何在录制的函数内插入语句,也许根本就不能插)。
通过了以上的失败之后,我苦恼了好几天,最后我不得不找寻自己撰写脚本代码的方法(前面之所以没有直接用这种办法是因为我对其一无所知),最终通过这种方法解决了以上的脚本问题,而且比录制更为的简单明了。
解决办法:
寻找.NET的脚本撰写插件(不要在网上到处找,因为它就在LR9.1的安装包里有),安装后,在VS2005环境中使用C#语言撰写脚本
using System;
using System.Runtime.InteropServices;
using Com.Foxconn.Ca.Esign;
using Com.Foxconn.Ca.Esign.PdfSigner;
namespace LoadRunnerUser2
{
/// <summary>
/// Summary
description for VuserClass.
/// </summary>
[ClassInterface(ClassInterfaceType.AutoDual)]
public class
VuserClass
{
LoadRunner.LrApi lr;
public VuserClass()
{
//
LoadRunner Standard API Interface ::
DO NOT REMOVE!!!
lr = new
LoadRunner.LrApi();
}
//
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
public int
Initialize()
{
return
lr.PASS;
}
//
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
public int
Actions()
{
string
ID;
PdfSigner signer = new PdfSigner();
ID = lr.eval_string("{username}");
// 这里的参数化曾花费了我近一天的时间,因为网上资料实例中用"<>"而我在LR中一直用的是“{}”,而其中我来去折腾了很多次,过程基本记不清了,只不过确定了这里用“{}”才真正起到参数化的效果
string temp0 = signer.SignByName2(ID, "Sign1", "熊罡", "FOXCONN
CA");
if
(temp0 == false)
{
lr.end_transaction("ttt", lr.PASS);
}
else
{
lr.end_transaction("ttt", lr.FAIL);
}
// 这里并没有真正起到统计成功与失败总数的作用,这个问题需要进一步通过摸索去验证实现方式(在函数中使用变量计数显然存在问题,因为会有很多虚拟用户同时调用这个脚本)
return lr.PASS;
}
public int
Terminate()
{
return
lr.PASS;
}
}
}
经验与教训:
1.
永远都不要去害怕未知的事物,勇敢地去做起来,碰到问题就去解决问题,人人都是这么过来的。
2.
要做好性能测试,仅仅是知道工具如何使用是远远不够的,只有真正了解其工作方式、原理及其执行后的结果,你才算是熟悉了工具的使用。
注:如果有人知道如何解答我上文中的问题的,请务必赐教。谢谢!