• 性能测试06:性能测试工具JMeter


    JMeter 4.0风格默认为黑色背景:Options选项下的 Look and Feel 还有多种风格可以选

    JMeter的组成:

    测试计划  -> (线程组, 它还包括 断言,定时器,监听器,配置元件, 后置处理器,前置处理器,逻辑控制器,Sampler)

    Jmeter实现多并发

    线程组:负载发生器,用多线程或者多进程的方式来模拟用户的使用行为。JMeter是以线程的方式来进行模拟用户的并发访问的。

    JMeter实现逻辑分支控制:

    逻辑控制器:用来控制测试脚本的逻辑判断,也可以理解为如何控制脚本的运行。例如,如果控制器,就是当满足什么样的条件后执行哪一步操作。

    JMeter实现配置管理:

    配置元件:用来提供一些配置相关的信息,如HTTP请求头、cookie管理,提供参数化数据。还可以进行用户自定义 变量等配置,用来定义常量等。

    JMeter实现关联:

    后置处理器:用于对Sampler发出的请求后得到的服务器响应进行处理。一般用来提取响应中的特定数据。
    System.out.println("${title}");   - 如果使用Bean Shell去提取字符串的话,那么一定记得加上引号

    JMeter实现数据预判

    断言:断言用于检查测试中得到的相应数据是否符合预期,断言一般用来设置检查点,用以保证性能测试过程中的数据交互是否与预期一致。

    Jmeter断言失败的时候会打印断言,成功的话不会打印断言。 一般断言用户功能测试验证。响应断言基本能满足大部分需求。

    JMeter监控数据可视化

    监听器:这个监听器不是用来监听系统资源的组件。它是用来对测试结果数据进行处理和可视化的一系列组件。例如:查看结果树、聚合报告。

    JMeter函数助手例子:注意对于结果是字符串的函数,必须用引号括起来

    随机数(__Ramdom):           例如 System.out.println(${__Random(0,99,rad)});

    参数化助手(__CSVRead)  :注意文件列号从0开始, 循环的时候,一个线程会读取银行,如果某行已经被一个线程读取了,那么当前现成不会去读取它,但是如果线程数大于csv中的文件行数,那么多余的线程会循环读取csv中的行。

                                      例如: System.out.println("${__CSVRead(E:Guweipingsoftwareapache-jmeter-2.10myJmetercsvData.csv,0)}");

    计数器(__counter):            例如 System.out.println("False = " + ${__counter(False,counter)});

    唯一数(__UUID):               例如 System.out.println("UUID = " + "${__UUID}");

    JMeter实现分布式并发:一般在大并发量的情况下,一台电脑不至于支撑压力的时候,使用分布式

    1) Master(主压力机器)在jmeter.properties中添加remote_hosts,e.g. remote_hosts=127.0.0.1,172.19.248.248:1099

    2) Slave(从压力机器)在jmeter.properties中添加server_port, e.g. server_port=1099

    3) Slave启动jmeter-server, e.g.  ./jmeter-server  (这里假设Slave机器是Ubutu)

    4) 重启Master机器的Jmeter

    操作:

    (1)   如在windows机器上(Master),进入jmeter bin 目录(E:Guweipingsoftwareapache-jmeter-2.10in), 编辑jmeter.properties文件, 去掉remote_hosts前面的注释符号#, 改成remote_hosts=127.0.0.1,172.19.248.248:1099       (注意:如果slave是linux 机器,首先在其上使用ifconfig查看其ip地址)

    (2)   在Linux机器上(Slave),进入jmeter bin 目录(/opt/apache-jmeter-4.0/bin), 编辑jmeter.properties文件, 去掉server_port前面的注释符号#, 成为server_port=1099

    (3)   在Linux机器上(Slave),进入jmeter bin 目录(/opt/apache-jmeter-4.0/bin), 运行 ./jmeter-server 去启动Slave.

    (4)   在Master机器上,重启JMeter, 检查菜单Run -> Remote Start,可以看到上面配置的Slave机器ip和port显示出来了 (改示例中是172.19.248.248:1099 )

    注意:有时候如果失败,那么检查一下防火墙是否关闭,可能的失败原因:

    1) 启动 ./jmeter-server 失败,错误为:

    Server failed to start: java.rmi.server.ExportException: Listen failed on port: 0; nested exception is:
    java.io.FileNotFoundException: rmi_keystore.jks (No such file or directory)

    解决方法: 修改jmeter.properites: server.rmi.ssl.disable=true (实际检测结果是,Master和Slave机器上的jmeter.properites中都必须对此项做同一修改)

    看到如下信息,表示成功启动了:

    root@agu:/opt/apache-jmeter-4.0/bin# ./jmeter-server
    Created remote object: UnicastServerRef2 [liveRef: [endpoint:[172.19.248.248:40385](local),objID:[-3a930e1f:16416c9ce6d:-7fff, 4070085255494437772]]]

  • 相关阅读:
    日期时间格式或封装,已经互相转换,抽出来日后方便自己开发,之前用作在mpvue的框架开发小程序中
    微信小程序授权方法全能,当用户拒绝或者首次进来的,都可以弹起授权提示,主要是用wx.getSetting,还有wx.authorize,最后的wx.openSetting
    JavaScript封装自己的一个弹窗,是双按钮的,比较简单一些 ,其中引用了jQuery来写的方法,最后暴露出去,有更好的建议欢迎评论 。。。。
    最近学习mpvue框架开发微信小程序,把wepy框架的项目实现到mpvue中,知道其中的一些两者之间的区别
    JavaScript中历史搜索记录的实现,在h5页面,引用jQuery写法,使用localStorage存储
    vue中实现双向数据绑定原理,使用了Object.defineproperty()方法,方法简单
    好好学习vue中 写了一些demo 希望自己能提升多一点 vue中实现父子组件之间的通信 相比我的上一篇非父子组件会简单些
    Java中Scanner类在nextInt()后无法输入nextLine()的问题
    mybatis中#{}和${}的区别及order by的sql注入问题
    Intellij常用设置及快捷键
  • 原文地址:https://www.cnblogs.com/alicegu2009/p/9197474.html
Copyright © 2020-2023  润新知