51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 1752|回复: 0
打印 上一主题 下一主题

性能测试工具JMeter的使用技巧

[复制链接]
  • TA的每日心情
    奋斗
    2021-8-6 16:14
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    跳转到指定楼层
    1#
    发表于 2019-2-12 16:51:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 一纸荒年 于 2019-2-12 16:52 编辑

    在这此对新版本jmeter的学习+温习的过程,发现了一些以前不知道的功能,所以,整理出来与大分享。本文内容如下。
    1、如何使用英文界面的jmeter
    2、如何使用镜像服务器
    3、Jmeter分布式测试
    4、启动Debug 日志记录
    5、搜索功能
    6、线程之间传递变量

    如何使用英文界面的JMeter
      Jmeter启动时会自动判断操作系统的locale 并选择合适的语言启动,所以,我们启动jmeter后,其会出现一个倍感亲切的中文界面。但由于jmeter本身的汉化工作做得不好,你会看到有未被汉化的选项及元件的参数。而且部分翻译并不准确,因此对于英文比较好的牛人来说更喜欢纯正的英文界面。
      强制以英文方式启动jmeter的方法如下:
      在windows环境下,打开jmeter解压目录,bin目录下的jmeter.bat文件,也就是jmeter程序的启动文件,选择记事本方式打开。做以下修改:
    1. set HEAP=-Xms512m -Xmx512m
    2. set NEW=-XX:NewSize=128m -XX:MaxNewSize=128m
    3. set SURVIVOR=-XX:SurvivorRatio=8 -XX:TargetSurvivorRatio=50%
    4. set TENURING=-XX:MaxTenuringThreshold=2
    5. set RMIGC=-Dsun.rmi.dgc.client.gcInterval=600000 -Dsun.rmi.dgc.server.gcInterval=600000
    6. set PERM=-XX:PermSize=64m -XX:MaxPermSize=64m
    7. set LOCALE=-Duser.language=en  -Duser.region=rem
    8. set DEBUG=-verbose:gc -XX:+PrintTenuringDistribution

    9. .........
    10. rem Server mode
    11. rem Collect the settings defined above
    12. set ARGS=%DUMP%  %HEAP%  %NEW%  %SURVIVOR%  %TENURING%  %RMIGC%  %PERM%  %DDRAW%  %LOCALE%
    复制代码
    晕死,当我上面介绍了那么多后,在最新的2.8版本,我无意中发现了这个功能。


    如何使用镜像服务器

    在调试和修改测试计划的过程中,通常会为采样器增加一些额外的设置,例何设置额外的HTTP头、cookie管理器或认证管理器等,但当设置了这些内容后,sampler发出的请求是否就与预期的完全一支呢?
      当然用户可以通过添加监听器来看查采样器发出的HTTP请求,但如果调试过程中并不想真正地把请求发送给被测应用,如何解决这个问题呢?
      Jmeter 提供了一个名叫HTTP Mirror Server的组件,HTTP Mirror Server可以启动一个镜像的服务器,该服务器把所有接收到的请求原封不动地返回,这样就可以看到发出请求的具体内容了。
      添加HTTP Mirror Server的方式:
      右键点击“工作台”--->非测试元件--->HTTP Mirror Server

    如果有必要的话需要修改端口号,点击“启动”按钮来启动Server。
    采用JMeter 远程模式并不会比独立运行相同数目的非GUI 测试更耗费资源。但是,如果使用大量的JMeter 远程服务器,可能会导致客户端过载,或者网络连接发生拥塞。
      使用多台机器产生负载的操作步骤如下:
      (1)在所有期望运行jmeter作为 负载生成器的机器上安装jmeter, 并确定其中一台机器作为 controller ,其他的的机器作为agent 。然后运行所有 agent 机器上的jmeter-server 文件(假定使用两台机器192.168.0.100 和192.168.0.101 作为agent)
      (2)在controller机器的jmeter的bin目录下,找到jmeter.properties 文件,编辑该文件:
    1. 查找:
    2. remote_hosts=127.0.0.1
    3. 修改为:
    4. remote_hosts=192.168.0.100:1099,192.168.0.101:1099
    复制代码
    这里要特别注意端口后,有些资料说明端口1644为jmeter的controller 和agent 之间进行通信的默认RMI端口号,但是在测试时发现,设置为1644运行不成功,改成1099后运行通过。另外还要留意agent的机子是否开启了防火墙等。
      (3)启动controller 机子上的jmeter应用,选择菜单“运行”--->“远程启动”,来分别启动agent ,也可以直接选择“远程全部启动”来将所有的agent启动。


    启动Debug 日志记录


    大多数测试元件都支持Debug 日志记录。如果通过 GUI 运行测试计划,那么在选中测试元件后,可以通过“帮助”菜单enable debug或者disable debug。在“帮助”菜单 中有一个选项“What’s this node? ”,
    通过它可以查看GUI 和测试元件的类名,如图 11 -7 所示。通过它们,测试人员可以决定修改哪一项JMeter 属性,以便修改日志级别。
    例如:我们可以点击一个HTTP请求,选择菜单栏“帮助”--->what's this node ?
    在jmeter的bin\目录下,找到jmeter.properties 文件,关于日志级别的属性如下:
    1. #Logging levels for the logging categories in JMeter.  Correct values are FATAL_ERROR, ERROR, WARN, INFO, and DEBUG
    2. # To set the log level for a package or individual class, use:
    3. # log_level.[package_name].[classname]=[PRIORITY_LEVEL]
    4. # But omit "org.apache" from the package name.  The classname is optional.  Further examples below.

    5. log_level.jmeter=INFO
    6. log_level.jmeter.junit=DEBUG
    7. #log_level.jmeter.control=DEBUG
    8. #log_level.jmeter.testbeans=DEBUG
    9. #log_level.jmeter.engine=DEBUG
    10. #log_level.jmeter.threads=DEBUG
    11. #log_level.jmeter.gui=WARN
    12. #log_level.jmeter.testelement=DEBUG
    13. #log_level.jmeter.util=WARN
    14. #log_level.jmeter.util.classfinder=WARN
    15. #log_level.jmeter.test=DEBUG
    16. #log_level.jmeter.protocol.http=DEBUG
    17. # For CookieManager, AuthManager etc:
    18. #log_level.jmeter.protocol.http.control=DEBUG
    19. #log_level.jmeter.protocol.ftp=WARN
    20. #log_level.jmeter.protocol.jdbc=DEBUG
    21. #log_level.jmeter.protocol.java=WARN
    22. #log_level.jmeter.testelements.property=DEBUG
    23. log_level.jorphan=INFO
    复制代码

    搜索功能

    这是在使用一个变量或含有一定的URL或参数测试计划树和元素有时很难找到。现在一个新的特点是从2.6开始,你可以访问它的菜单搜索。它提供了搜索与下列选项:
      * 使搜索区分大小写区分大小写:
      * 正则表达式是一个正则表达式搜索文本,如果有的话将被搜索的正则表达式树的组件,例如“\ BTEST \ b”将匹配任何组件,包含测试组件的搜索元素


    线程之间传递变量

    JMeter 变量作用域局限于所属线程。这样设计是经过深思熟虑的,目的是让测试线程能够独立运转。有时候用户可能需要在不同线程间(可能属于同一个线程组,也可能不属于同一个线程组)传递变量。

    其中一种方法就是使用属性。属性为所有 JMeter 线程所共享,因此当某个线程设置一个属性后,其他线程就可以读取更新后的值。

    如果存在大量数据需要在线程间传递,那么可以考虑使用文件。例如,测试人员可以在一个线程中使用监听器,保存响应到文件(Save Responses to a file)或者 BeanShell PostProcessor 。而在另外一个线程中使用HTTP 采样器的“file: ”协议来读取文件,接着使用一个后置处理器或者BeanShell 测试元件提取信息。

    如果在测试启动前测试人员就能获得测试数据,那么最好将数据保存到文件中,使用CSV Dataset读取。

    这最后一个技巧,操作较为麻烦,暂时不给详细的例子。算是提供个思路吧!知道有这当子事儿就行了。日后有机会再实践^_^

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

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

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

    GMT+8, 2024-4-26 10:50 , Processed in 0.068717 second(s), 24 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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