zoukankan      html  css  js  c++  java
  • Loadrunner 场景中实际运行参数化取值实验

    [By:yy]

     

     

    废话不多说了,直接入主题。

    我设置了一个参数化{NewParam}这个参数里面有5个值,分别是12345。使用的Sequential+Each iteration(每次迭代更新参数取值)。也就是说,我在VuGen里面如果迭代5次的话,按F5运行,日志里反馈的值应该是12345。这时,我想知道每次取值消耗了多少秒所以加了一个事务,代码如下:

     

    运行后发现5次迭代分别消耗了0.004~0.006秒之间,取这个中间值0.005作为平均数吧。那么我们在Controller中,1个并发用户,运行1秒的话。会有多少次迭代呢?

     

    Ps:猜想是1/0.005=200迭代,如果按日志反馈的来算的话,0.005秒一次迭代,那么1秒中就会产生200次迭代。

     

    那么我们放到场景里面去运行看看吧。场景配置如下

    在场景中运行了1秒,场景自动停止了,这时我们去F: est estParam eslog查看一下日志

    Ps:我的脚本取名叫testParam放在F盘的test目录中。当时看到日志的txt的时候吓尿了,为什么1秒钟之内,生成的2M多的日志。按照逻辑来说,200次迭代不会有这么大的日志产生的。

    从场景的日志我们可以看到,在1秒中,最后一次迭代开始是3566次。这比猜想的理论值大了17倍。如果这个值是在某个web网站做“注册”的压力测试的话,那么就已经注册了3566次了。跟实际预估的值差距有点大。

     

    问题:为什么会有3566次呢?我到现在都不知道是为什么。如果哪位大神知道呢,请转告小弟了。可以私信我,也可以在博客中留言!

     

    那么如何让取值在掌握范围内呢?于是又想到加个1秒用户思考时间在脚本里。代码如下

    保存一下脚本,再到场景中去运行,查看日志。

    这个时候,日志中就只有1次迭代了。

     

    问题解决,可想而知实际用户思考时间对性能测试多么重要,想想当年为了让服务器的点击率高点,把ThinkTime给去掉了多么无知。以前就是为了想让数据变得好看一点,让服务器压力大一点。真心的为了出报告而出报告。这样违背了性能测试真正意义。所以希望各位能看到此篇文章的能重视到这一点。

     

    这个问题解决了,那么新问题又来了,这时我如果想把并发数增加到5个。也就是说,5个并发执行5秒钟。脚本里有用户思考时间为1秒。那么5个并发分别是怎么取值呢?场景设计如下

    运行后,日志中出现了5个日志,大小都是5K。查看日志中,5个并发在5秒钟之内进行的5次迭代,分别取了123455个值。

    Ps:这样取值不就重复了吗?如果我压测的是“注册”操作,重复注册的话肯定是不成功的,这样不是又无法真实的模拟用户操作的嘛?

     

    现在的问题就是,我5个并发,在5秒种分别注册5个用户。而且每个并发取的值都是不一样的。

    根据上述问题,我把脚本中的参数增加到25个。使用Unique+Each iteration+Abort Vuser(取值唯一,每次迭代取值更新,当参数值不够时忽略当前虚拟用户)Allocate设置的5

    这里解释下Allocate这个选项呢,是指的块。大致意思就是说每个并发能分到的虚拟用户数。我设置的5呢,就是说1个并发能分到5个用户。

    -----------------------------------------------------------------------------------------------------------------------------

    Q&A

    问:那么5个用户分完了怎么办?

    答:这时就要看When out of values选项了。我设置的是Abort Vuser当参数值不够时,忽略当前虚拟用户。意思就是说当我取到5值,后面就不会取值了。这时场景就会开始报错了。

     

    问:好吧1个并发讨论完了,那么第2个并发会取到什么样的值呢?

    答:因为我Abort Vuser分的5个用户,所以第2个并发也会得到5个用户,那么是哪5个用户呢?又因为我使用的是Unique所以用户取值是唯一的。不能重复的。所以呢,理论上来说,第2个并发应该取的是6-105个数。那么我们场景里面运行下看看实际情况吧。

     

    Ps:详细资料可以查阅云层的书《Loadrunner11性能测试进阶指南》,yy我可是云大的死粉!

    ------------------------------------------------------------------------------------------------------------------------------

    脚本代码、参数化设计如下

    那么我们去场景里面运行下看看,场景设计如下

    运行后出现了5log日志,大小都是一样的。

    查看日志后,每次迭代分别取值是

    testParam_1     1-5

    testParam_2     6-10

    testParam_3     11-15

    testParam_4     16-20

    testParam_5     21-25

    这样如果压测“注册”模块的话,取得值就能在我掌握之中了。O(_)O哈哈~

    还有更好的方法来实现参数化来做“注册”的压力测试。敬请期待下次更新!

     

     

     

     

  • 相关阅读:
    redis基本介绍搭建篇
    Percona XtraDB Cluster集群
    path模块
    vue相关
    Vue首页加载过慢 解决方案
    从用户输入url到页面最后呈现 发生了些什么?
    cookie
    javascript中怎么判断对象{}为空
    jquery之stop()的用法
    跨域
  • 原文地址:https://www.cnblogs.com/sgtb/p/3683341.html
Copyright © 2011-2022 走看看