51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

楼主: lsekfe

【你来问我来答第53期】:Fin助你锁定性能测试切入点(已结束)

[复制链接]

该用户从未签到

发表于 2014-12-15 19:44:25 | 显示全部楼层
hhyghr 发表于 2014-12-15 15:47
如何快捷判断性能瓶颈?
在测试中通常关注并发数,事务响应时间,吞吐量,点击率。已知随着时间递增,响 ...

@hhyghr 您好!

根据你描述的情况,我分析有如下几种可能:

随着时间递增(压力不变的条件下),有两种可能性,① 是否存在后端系统(是否用挡板隔离),后端系统服务器(包括数据库)。因为CPU小号较小,GC未见异常,I/O未知,磁盘空间未知,我觉得如果压力时间很长,考虑一下是否磁盘空间会逐渐占满的现象,有的时候是这个原因导致。
② 压力发起端本身的问题, 最近项目上面有一个朋友用WEBSERVICE协议做稳定性压力测试,和你的现象基本相同,经过分析,我们把WEBSERVICE协议改写成WEB/HTTP协议脚本,持续发送后,响应时间不再增大,点击率持续稳定。这个原因在于LR的webService协议有BUG,有些时候,压力机发送延迟。 但是有一点和你的不同,就是响应时间不变。
从上面的两种出发点分析,我觉得第一点更像你描述的情况。

解决方法:

一个业务/交易/接口 到后台可能会分为很多步处理。

比如一个付款交易可分为:
      
    1.查询卡号信息。
    2.卡内可使用金额查询。
    3.付款方信息查询。
    4.手续费试算。
    5.支付。
    6.查询支付后月余额变动。

调用了6步不同的接口, 每个接口都要调用后台模块, 6步整合为一个付款业务. 那我们就需要对每一步的调用进行分解分析, 响应时间总合是2s.我们可以在前期压力阶段把这6步的时间分片取出, 然后压力中期取一次,压力后期取一次, 如果顺利的话, 很可能只有1个 或者 2个 服务响应时间比前期压力时响应时间大。 那么范围缩小了,接下来就针对这些服务进行调优而最终锁定问题。

希望能帮到你
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2014-12-16 09:52:20 | 显示全部楼层
你好 最近遇到一个问题:领导希望模拟整个系统流程操作下来,我录制了所以关联接口,问题是:这么多个接口中涉及到三个自增长的ID;这三个ID都是每迭代一次脚本自增长1;我在运行场景的时候,设置如5个用户并发,这三个ID同时增长,但是脚本中分别取的ID与数据库中的ID不对应。如:A.B.C 三个ID,分别从1开始增长。场景运行后,发现日志中A  \ B \ C分别取值为1.2.1  但是数据库中为  1、2、2.   这个问题怎么解决呢 ?
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2014-12-16 09:55:58 | 显示全部楼层
julyzd123 发表于 2014-12-2 15:35
十分感谢,还是有一个问题,带宽测试听人说只要算一下就行了啊,是这样的吗?

你带宽测试怎么做的呢?
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2014-12-16 14:53:06 | 显示全部楼层
您好,请问怎么设置Loadrunner在特定的时间自动运行脚本。例如性能测试经常在晚上进行,是否可以设置LR在晚上10点自动运行场景。早上过来直接看跑的结果数据据说好像可以。但不晓得怎么设。
回复 支持 反对

使用道具 举报

  • TA的每日心情
    奋斗
    2017-2-21 09:43
  • 签到天数: 10 天

    连续签到: 2 天

    [LV.3]测试连长

    发表于 2014-12-17 09:23:49 | 显示全部楼层
    请问您们平常做性能测试,一般都是用Loadrunner么?Jmeter或其他性能测试工具常用么?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2014-12-17 19:32:49 | 显示全部楼层
    maweihuizi 发表于 2014-12-16 09:52
    你好 最近遇到一个问题:领导希望模拟整个系统流程操作下来,我录制了所以关联接口,问题是:这么多个接口 ...

    @maweihuizi 您好

    我看了10分钟, 真没看懂你描述的情况。 可否再描述的详细一些。
    我有些疑问,
    1. 数据库中 自增长ID 是随机给数据库中 A B C 任意的吗 ?
    2. 如过一套流程下来 ABC 都要+1 那么5用户并发一次应该是 5 5 5吧?
    3. ID 可否在 接口1执行之后关联到. 然后送到接口2.
    4. 你的脚本中 自增长参数是怎么设置的, 顺序,还是每次迭代+1 分块?
    5. 希望吧例子描述的尽可能详细一些, 因为术语不一样, 可能我会错误理解。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2014-12-17 19:39:33 | 显示全部楼层
    唯一的色彩 发表于 2014-12-16 14:53
    您好,请问怎么设置Loadrunner在特定的时间自动运行脚本。例如性能测试经常在晚上进行,是否可以设置LR在 ...

    @maweihuizi 您好
    有相关的网络测试工具, 针对你的不同需求选取不同的工具, 当然功底强的可以自己写代码,但是不推荐自己写,毕竟我们的目的是测试带宽,而不是写工具。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2014-12-17 19:47:45 | 显示全部楼层
    唯一的色彩 发表于 2014-12-16 14:53
    您好,请问怎么设置Loadrunner在特定的时间自动运行脚本。例如性能测试经常在晚上进行,是否可以设置LR在 ...

    @唯一的色彩 您好!

    我在游戏机器上面做解答, 为了性能,这台机器没有安装Loadrunner, 从网上找了一个解答,贴给你:

    充分利用LRController里面Group的功能。新建一个场景把3个脚本都添加进来,在EditSchedule中选择“SchedulebyGroup”的方式,在StartTime中设置3个脚本的运行顺序为“StartwhenGroupxxxfinished”,并在“ScenarioStartTime”中设定场景在晚上的运行启动时间。设定完定时执行场景后,点击StartScenario按钮,会出现一个倒计时窗口,这样在固定的某个时间上,测试场景中的3个脚本将乖乖的按照设定的先后顺序进行测试。注意,如果没有点击StartScenario按钮激活测试,是不会真正进行测试的。

    一般上面的方法即可。如果批量做的话, 可以把每个场景保存好,然后自己写一个批处理(*.bat)运行,大概代码如下:
    cls
    SET M_ROOT="D:\Program Files\MI\Mercury LoadRunner\bin\"

    %M_ROOT%\wlrun.exe -TestPath "D:\Program Files\MI\Mercury LoadRunner\scenario\Test\TestScen_1.lrs" -Run

    %M_ROOT%\wlrun.exe -TestPath "D:\Program Files\MI\Mercury LoadRunner\scenario\Test\TestScen_2.lrs" -Run

    %M_ROOT%\wlrun.exe -TestPath "D:\Program Files\MI\Mercury LoadRunner\scenario\Test\TestScen_3.lrs" -Run


    两种方法都可, 根据需求选择。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2014-12-17 19:53:17 | 显示全部楼层
    cooltom 发表于 2014-12-17 09:23
    请问您们平常做性能测试,一般都是用Loadrunner么?Jmeter或其他性能测试工具常用么?

    @cooltom 您好

    我们一般是LOADRUNNER 比较用的多。Jmeter 也会用到,但是不多。一般JM能做的LR都能做了, LR做不了的,JM估计也够呛了。
    比如说测试 DNS 这种承载并发量要达到百万级的TPS,这种测试不是基于应用层了,我们会基于链路层进行并发,两种办法 1. 自己写工具。 2.采用TestCenter 这种工业级数据电缆线交互(而不是网线)的工具进行压力发送。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2014-12-18 09:32:31 | 显示全部楼层
    Fin 发表于 2014-12-17 19:32
    @maweihuizi 您好

    我看了10分钟, 真没看懂你描述的情况。 可否再描述的详细一些。

    嗯嗯  谢谢您花这么长时间来回复我的问题哦, 这个问题我昨天已经解决了,就像您说的使用了关联;

    但是我之前的方法还是有一个问题我不太明白。同样是三个ID,在脚本中 我初始化了这三个ID的值,并且写了循环:int a=1012,;
            int b=10131;
            int c=2012
            int count;

            lr_save_int(a,"orderID");

            lr_save_int(b,"FDID");

            lr_save_int(c,"chID");

            lr_eval_string("{orderID}");

            lr_eval_string("{FDID}")

            lr_eval_string("{chID}");
       
            a=a++;
            b=b++;
            c=c++;

    以上在设置多次迭代时,比如设置5迭代,三个参数的取值是正确的 ,并且是按序增长的--

    但是我设置1次迭代,在运行场景中设置5个用户并发运行,这三个参数每次的取值都是我初始化时的值。  我想知道怎么才能让设置1次迭代,多个用户并发时,这个参数的增长可以按循环条件来增值
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2014-12-18 09:34:36 | 显示全部楼层
    本帖最后由 maweihuizi 于 2014-12-18 09:47 编辑
    Fin 发表于 2014-12-17 19:39
    @maweihuizi 您好
    有相关的网络测试工具, 针对你的不同需求选取不同的工具, 当然功底强的可以自己写代 ...

    可以推荐一款吗?可以测试在固定带宽下支持的并发用户数。 现在需要测试在固定带宽下的并发用户数,一点头绪也没有
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2014-12-19 17:08
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    发表于 2014-12-18 17:12:57 来自手机 | 显示全部楼层
    刚接触自动化测试,目前在学习,但是不知道该什么时候做自动化测试,不知道整个自动化测试流程,希望能够得到帮助,指导,谢谢
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2014-12-18 20:42:31 | 显示全部楼层
    maweihuizi 发表于 2014-12-18 09:32
    嗯嗯  谢谢您花这么长时间来回复我的问题哦, 这个问题我昨天已经解决了,就像您说的使用了关联;

    但 ...

    @maweihuizi 您好!

    我大概理解你的意思了, 是不是想多用户共享一个递增数? 比如:
    用户1(第一次迭代) -> 1; 用户1(第二次迭代)-> 6;
    用户2(第一次迭代) -> 2; 用户2(第二次迭代)-> 7;
    用户3(第一次迭代) -> 3; 用户3(第二次迭代)-> 8;
    用户4(第一次迭代) -> 4; 用户4(第二次迭代)-> 9;
    用户5(第一次迭代) -> 5; 用户5(第二次迭代)-> 10;
    ....
    --------------------------------------------
    如果我理解的对,那么接着往下看:
    先讲一下 并发原理, LoadRunner 并发机制是 每一个用户,模拟一个线程(5个用户就是5个线程)或进程,他们彼此之间没有任何联系。
    • 无法进行交互式识别此数字已经被使用,然后去选用别的数字。如果做到智能识别,那么就会涉及一些,因等待其它进程处理影响压力发送时间片等等一些问题。
    • LR场景在执行是进行预编译,也就是说 根据已设定的并发用户数建立线程或进程,把每个用户需要的参数化都进行预编译,进程或线程之间彼此独立,无法进行相互通信,也不知道其它用户执行到哪里了。因为预编译了才可以高速循环发送压力,这个也是和LR回放脚本编译模式不同的地方。
    • 文件锁,参数无法共享的另一个原因就是文件锁了,这也是场景结果为什么每次都生成和并发用户数相同数量的日志文件,如果几个用户同时在一个文件里面进行读写,会出错,也会遇到文件锁,那么,创建一个文件,每个用户都时时去同一个文件中读数字,然后改写+1的方法也不合适。(所以压根没给你推荐这个土办法
    这个如果你能理解了,就会考虑这样做是否和我们的并发思路相互违背。
    -------------------------------------------
    上面的话理解了,那么知道了利弊,我们换个思路,可不可以绕过这个大坑? 答案是可以!

    提供两种思路解决该问题或者可以结合使用:
    • LR参数化中提供了一种自动生成参数模式:<Unique Number> 即多用户共享自动递增,并且所有用户都是不重复的数字! 是不是感觉这个参数和我上面说的相矛盾?其实不然,Mercury 是一个 NB 的公司,这些问题早已经考虑到了。 它给出的策略是 分块 ,什么是分块,就比如你要 5用户并发, 共享25个数字。 那么在LR场景运行前编译中,就把这25个数字参数按块的方式每个用户分了一块(例如用户1->1,2,3,4,5; 用户2->6,7,8,9,10;)
        用户1(第一次迭代) -> 1; 用户1(第二次迭代)-> 2; 3; 4; 5;
        用户2(第一次迭代) -> 6; 用户2(第二次迭代)-> 7; 8; 9; 10;
        用户3(第一次迭代) -> 11; 用户3(第二次迭代)-> 12; 13; 14; 15;
        用户4(第一次迭代) -> 16; 用户4(第二次迭代)-> 17; 18; 19; 20;
        用户5(第一次迭代) -> 21; 用户5(第二次迭代)-> 22; 23; 24; 25

        注意: 和上面的顺序不同。
        这样就解决了 5个用户每个用户执行5次,每次参数都不同,但是都在范围之内。
        上面的策略是:
    • 使用参数 <Unique Number>
    • 设置 Start = 1;(从1开始,每次递增1)   
    • Block = 5;(每个块里面5个参数)   
    • Updata value = Each iteration;(每次Action循环变参)   
    • When out of Values = about Vuser; (参数用完自动宕掉Vuser)     
       把数字设置的大一些,就可以规避 down vuser 的问题了。

       2. 如果上面的方法可以完全解决你的问题,那么最好不过了, 如果数据库中必须按照顺序递增,(也就是 VU1必须对1,VU2,必须对应2),不可以跳跃递增,那么考虑用 参数取模计算的方法去做. . 这样可以合理的让VUSER1执行 -> 1,5,10,15,20,25.  vuser2-> 2,6,12,16....

       3. 把5只交易整合成一个脚本, 5个Action , 脚本执行时是按照顺序执行Action 1-5 的。

       希望能帮到你
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2014-12-18 20:46:42 | 显示全部楼层
    maweihuizi 发表于 2014-12-18 09:34
    可以推荐一款吗?可以测试在固定带宽下支持的并发用户数。 现在需要测试在固定带宽下的并发用户数,一点 ...

    @maweihuizi 您好!

    带宽就是bit位数的承载量, 你完全可以用一个脚本发送压力,然后用网络监控工具查看网络流量大小,然后换算你的带宽。 就好比windows 的 启动任务管理器-> 网络都可以监控你的带宽流量啊...
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2014-12-18 21:16:52 | 显示全部楼层
    Echo_Rocky 发表于 2014-12-18 17:12
    刚接触自动化测试,目前在学习,但是不知道该什么时候做自动化测试,不知道整个自动化测试流程,希望能够得 ...

    @Echo_Rocky 您好!

    我是做性能测试, 对于自动化测试研究的不是很深,我说一下我的理解,自动化测试我认为, 意在回归。在接口或者界面变化不是很频繁的情况下做自动化测试是比较合适的。
    比如有几种做法:
    • 基于界面端, 对象匹配的方式,把界面UI各对象以及对应的属性获取到,保存到对象库中, 然后自动化执行过程中,按照步骤和对象属性去页面抓取相互匹配成功的唯一对象,对其进行事件操作。这样的方法适合界面变化不大,或者基本没变化的情况下,回归次数越多越有价值。(在互联网一天一变脸的今天,这种方式逐渐被淘汰,因为维护对象库是一个非常繁琐的事情)
    • 基于界面端,对象描述的方式,没有对象库,通过代码描述一个对象,以及该对象中有什么属性,然后去页面上过滤筛选到唯一对象,并对其进行事件操作。这种方法
    • 接口类自动化,模版与数据匹配的方式。接口自动化现在被越来越重视,许多公司都自己构建了自己的接口自动化平台,需要维护接口类模版、测试案例、测试数据准备 三大类工作。 对于接口较多的大型企业(金融、电信)会做针对接口的自动化。
    • 数据驱动方式,所有的方法都已经封装好,根据方法组合,自动去数据库中进行抽取匹配数据,自动进行测试。做到这一步是自动化测试最爽的了,基本注重自动化测试的公司都有这个梦想。 在移动电信行业、小米公司有类似的自动化规模。


    说的不专业,别笑话
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2014-12-18 21:18:44 | 显示全部楼层
    Echo_Rocky 发表于 2014-12-18 17:12
    刚接触自动化测试,目前在学习,但是不知道该什么时候做自动化测试,不知道整个自动化测试流程,希望能够得 ...

    哦对了,云层大侠 这两天做自动化课程进阶讲座, 多向他取经,经验很丰富。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2014-12-22 08:55:59 | 显示全部楼层
    Fin 发表于 2014-12-18 20:42
    @maweihuizi 您好!

    我大概理解你的意思了, 是不是想多用户共享一个递增数? 比如:

    恩恩  学习了  非常感谢您~

    问题解决了

    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2014-12-22 09:19:08 | 显示全部楼层
    Fin 发表于 2014-12-18 20:42
    @maweihuizi 您好!

    我大概理解你的意思了, 是不是想多用户共享一个递增数? 比如:

      谢谢谢谢 您的耐心讲解 受益匪浅  真的收获不小 ,我想在问下关于带宽的压力测试:我们在web端访问前台页面,每一个请求需要加载的内容是占用的服务器的带宽还是本地的带宽呢?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2014-12-22 14:31:02 | 显示全部楼层
    你好 我想问一个运行场景的问题:

    在运行场景中 人工场景 中两种加载用户的方式:Start Vusers -- 1 Simulaneously 2 每多少时间增加几个用户。

    我的问题是:同一个脚本  分别使用这两种方式测试响应时间3s以内的并发用户数;我分别运行后,得到的结果是第一种方式只有8个用户,第二种方式可以支持300用户。我想知道这样的结果正确吗 ?如果正确的话,那这差别为什么会这么大?另外这两种方式的运行原理是什么呢?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2014-12-22 19:44:25 | 显示全部楼层
    maweihuizi 发表于 2014-12-22 09:19
    谢谢谢谢 您的耐心讲解 受益匪浅  真的收获不小 ,我想在问下关于带宽的压力测试:我们在web ...

    @maweihuizi 您好!
    首先恭喜你成功解决问题~

    一般带宽指的是 网络带宽, 也就是 IE浏览器 与 服务器 之间的 带宽(中间可能会经过N个路由,不同网段等等, 这些我们暂时不考虑),  我们在做带宽测试时也是看我们的压力一共占用了多少带宽,比如 某IE A端 ---- WEB服务器 B端  , 我们在页面点击一下触发表单提交, IE会组织表单集的内容转换为一个字符串传递给后端, 后端接收到字符串进行解析处理。 分析这步单向事物,A->B 提交表单字符串时,占用了N个kb, 那么事物成功了后我们在特定时间片中占用了这么多带宽, 那么我们借助批量压力对其带宽进行压力测试, 并且通过监测考察网络接收带宽达到了多少成为瓶颈。 一般都是这样测试。 发送压力不一定是明确的业务,可能是一个洪水式攻击也可以。 带宽测试有明确的指标, 和无规则的压力内容特点。
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-3-29 21:31 , Processed in 0.076622 second(s), 20 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表