51Testing软件测试论坛

标题: 最近用loadrunner实战了一把,遇到了一些问题,附上我的解决方法。 [打印本页]

作者: 木暖    时间: 2012-12-15 17:35
标题: 最近用loadrunner实战了一把,遇到了一些问题,附上我的解决方法。
边学便用,用loadrunner实战了一把,遇到了一些问题,有些解决了,有些还是比较迷糊。附上我的解决方法,希望和大家讨论一下,主要想确认这样解决到底对不对。
项目背景:每个开发用dubbo做了一个简单的登陆及注册的小项目,而我通过高并发来测试是否可以达到提高效率缓解服务器压力的目的。
遇到问题一:脚本录制,打开第一个页面是不是应该放在init()中。虽然这这次我是放在里面了,但是我发现按实际情况应该是放在action中,因为来一个用户注册一个,而不是一个用户来了之后反复在一个页面注册(这个地方我和迭代有点分不太清了)。不知道这样放在action中这样对不对?
遇到问题二:参数化。1、用户名和密码登陆的时候分别怎样才能关联起来,成功登陆。这个地方我参考了这个http://www.cnblogs.com/fnng/archive/2012/06/22/2558900.html,很快就解决了。但是有人说参数化的文件必须放在根目录下才能正确运行,实际我就放在了桌面,注册的时候用户也进来了。未发现有什么异常,我用的是LR11,不知道这样是不是正确。
                   2、生成随机参数。注册的时候想用不同的用户去登陆,想通过不同的数字来区分。这个我参考了http://blog.csdn.net/ghj1976/article/details/6117150,但是随机生成英文我还是不会,因为本人的C语言实在学的太烂了,如果有人可以指点一二那就太好了。
遇到问题三:设置pacing后,Controller 不产生响应时间及TPS图表,或者其他图表因为重点关注了这俩所以发现没有。百思不得其解。没解决。
遇到问题四:事务响应时间太高,和在负载测试时实际操作页面的感觉很不一样。一开始我用lr_start_transaction和lr_end_transaction封装了事务,后来发现时间虽然有降下去但是还是很高,我猜测是和将集合点放在了事务中,于是我将集合点放在了封装事务之外,果然响应时间一下就降下来了。但是我觉得这样的时间可能还是不太准,因为这只但看了提交或者注册的时间,实际整个页面的响应时间还是不准确。这块纠结了好久,还是觉得很玄。
遇到问题五:分析结果时,我重点关注了吞吐量,TPS,响应时间,发现有些人的响应时间特别低,但是同时吞吐量及TPS也特别低。同样的环境下有的人响应时间稍高,但是吞吐量及TPS特别高。不知道这几者之间的关系是怎样的。
作者: lsekfe    时间: 2012-12-17 10:06
边学便用,用loadrunner实战了一把,遇到了一些问题,有些解决了,有些还是比较迷糊。附上我的解决方法,希 ...
木暖 发表于 2012-12-15 17:35


内容很不错,支持下!
作者: 云层    时间: 2012-12-17 11:10
事务里面不能带集合点因为事务会等集合点导致误差
作者: 木暖    时间: 2012-12-17 16:28
事务里面不能带集合点因为事务会等集合点导致误差
云层 发表于 2012-12-17 11:10



    今天买了一本你的书唉。作为你的粉丝,你能帮我解决一下其他没解决的问题么。我翻了下暂时还不能只管的解决我的问题。
作者: 木暖    时间: 2012-12-17 16:36
今天买了一本你的书唉。作为你的粉丝,你能帮我解决一下其他没解决的问题么。我翻了下暂时还不能 ...
木暖 发表于 2012-12-17 16:28

这是一整个action,然后我用事务函数给封装了,我这样定义事务对么?有没有可能我事务响应时间特别好,可是因为并发原因整个页面响应时间很长?
    login()
{

        web_url("login.jsp",
                "URL=http://10.10.18.9:8080/constumer/login.jsp",
                "Resource=0",
                "RecContentType=textml",
                "Referer=http://10.10.101.9:8080/constumer/registerRegister.action",
                "Snapshot=t7.inf",
                "Mode=HTML",
                LAST);
     lr_think_time(6);
        lr_rendezvous("degnl");
        lr_start_transaction("dengl");
        web_submit_form("loginLogin.action",
                "Snapshot=t8.inf",
                ITEMDATA,
                "Name=username", "Value={username}", ENDITEM,
                "Name=password", "Value={pwd1}", ENDITEM,
                LAST);
        lr_end_transaction("dengl", LR_AUTO);
        return 0;
}
作者: 云层    时间: 2012-12-17 17:06
代码要做手工事务检查,不要直接用事务
作者: 木暖    时间: 2012-12-18 16:50
代码要做手工事务检查,不要直接用事务
云层 发表于 2012-12-17 17:06



    根据性能测试进阶指南第208页及你说“代码要做手工事务检查,不要直接用事务”,我可以理解为
1、如果要封装事务,可以在录制的时候直接进行,这样比较准确可靠?
2、不管是在录制是封装事务还是在在脚本中插入事务,都要用web_reg_find()检查点函数来检查页面是否正确返回,才能得到真正的pass的事务响应时间。
是么?
希望我没翻错地方。。。
作者: 云层    时间: 2012-12-18 18:32
1.其实我个人不推荐你录制的时候加事务因为这样可能会包含多的请求
2.没错就是这样
作者: 木暖    时间: 2012-12-19 14:53
本帖最后由 木暖 于 2012-12-19 17:04 编辑
1.其实我个人不推荐你录制的时候加事务因为这样可能会包含多的请求
2.没错就是这样
云层 发表于 2012-12-18 18:32


感谢赐教。今天在学习的时候又遇到了两个问题:
1、今天学习了参数化,发现在用数据向导的时候没有连接oracle的步骤,搜了搜网上的资料,总是报“使用已输入的文件数据源不能生成一个连接”。对比了两个操作步骤,书的mySQL是要建立系统DNS,网上连接oracle是要建立文件DNS,总之两种方法我都试过了,都不成功。
2还有一个问题就是,迭代或者设置pacing之后我的事务响应时间和每秒事务数跑起来又没图了。。。。
3、是不是除了参数化的地方用{},其他的地方都只用双引号?像这个lr_free_parameter释放参数值就应该是这样?
{
lr_save_string("http://10.10.10.9","9");
web_url("9","url={9}",LAST);
lr_free_parameter("9");return 0;
}

求方法啊。。




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2