点读系列《jmeter官方用户手册》

官网:http://jmeter.apache.org/usermanual/

说明:十八元件、十九属性、二十函数,涉及清单内容暂未仔细阅读,个人觉得一是仅供使用参考,二是适合单独写文章来解读

一、让我们开始吧

  1. 千万不要在GUI模式下来做负载测试,要用CLI模式

  2. jmeter不带jdbc驱动程序,如果使用jdbc,就需要去网上下载,然后添加到classpath

  3. jmeter是100%的java应用程序

  4. 在jmeter的classpath中添加加密包,更新system.properties来注册ssl支持

  5. jmeter http默认协议级别为TLS,可以编辑修改:jmeter.properties或user.properties的https.default.protocol

  6. jmeter安装目录(XY是版本号)

    apache-jmeter-X.Y  # 可以修改根目录,不能修改子目录
    apache-jmeter-X.Y/bin
    apache-jmeter-X.Y/docs
    apache-jmeter-X.Y/extras
    apache-jmeter-X.Y/lib/
    apache-jmeter-X.Y/lib/ext
    apache-jmeter-X.Y/lib/junit
    apache-jmeter-X.Y/licenses
    apache-jmeter-X.Y/printable_docs
  7. bin目录

    点读系列《jmeter官方用户手册》_第1张图片

  8. 可以在bin目录下创建setenv.bat来配置jvm

    rem This is the content of bin\setenv.bat,
    rem it will be called by bin\jmeter.bat
    
    set JVM_ARGS="-Xms1024m -Xmx1024m -Dpropname=value"
  9. 可以配置环境变量

    点读系列《jmeter官方用户手册》_第2张图片

  10. 可以在启动jmeter直接指定环境变量

    JVM_ARGS="-Xms1024m -Xmx1024m" jmeter -t test.jmx [etc.]
  11. jmeter的类路径

    JMETER_HOME/lib (jmeter.properties的user.classpath可以设置)

    used for utility jars

    JMETER_HOME/lib/ext (jmeter.properties的search_paths可以设置)

    used for JMeter components and plugins

  12. jmeter只能找到.jar而不是.zip

  13. 执行java -jar时,设置的java环境变量classpath是不会起作用的,-jar就是牛

  14. 代理

    jmeter -E https -H my.proxy.server -P 8000 -u username -a password -N localhost

    点读系列《jmeter官方用户手册》_第3张图片

  15. HTTP Request Defaults和HTTP Request元件可以设置代理

  16. CLI模式

    jmeter -n -t my_test.jmx -l log.jtl -H my.proxy.server -P 8000

    点读系列《jmeter官方用户手册》_第4张图片

  17. 服务器模式

    jmeter-server -H my.proxy.server -P 8000

    1567871231625

    server.exitaftertest = true可以设置在单个测试后退出服务器

    CLI模式运行

    jmeter -n -t testplan.jmx -r [-Gprop = val] [-Gglobal.properties] [-X]

    点读系列《jmeter官方用户手册》_第5张图片

  18. jmeter命令行设置properties

    jmeter -Duser.dir=/home/mstover/jmeter_stuff \
        -Jremote_hosts=127.0.0.1 -Ljmeter.engine=DEBUG

    点读系列《jmeter官方用户手册》_第6张图片

    jmeter -Ljmeter.engine = DEBUG
    jmeter -Lorg.apache.jmeter.engine = DEBUG
    jmeter -Lcom.example.foo = DEBUG
    jmeter -LDEBUG

    1567871330265

  19. log4j2.xml位于bin目录下

  20. 要将org.apache.http的日志级别调到debug,加上

    <记录仪>
        <! -  SNIP  - >
        
        <! -  SNIP  - >
      
  21. 命令行和属性文件的处理顺序

    1. -p propfile
    2. jmeter.properties (or the file from the -p option) is then loaded
    3. -j logfile
    4. Logging is initialised
    5. user.properties is loaded
    6. system.properties is loaded
    7. all other command-line options are processed
  22. 使用模板创建测试计划

    点读系列《jmeter官方用户手册》_第7张图片

点读系列《jmeter官方用户手册》_第8张图片

二、创建测试计划

  1. 完整的测试计划包括:one or more Thread Groups, logic controllers, sample generating controllers, listeners, timers, assertions, and configuration elements

  2. "merge" "Save Selection As …" 右键选择这些选项,可以只加载/保存部分元件,而不用整个测试计划

  3. 再次强调!只能在调试测试计划时使用GUI模式,实际测试要使用CLI模式

  4. stop和shutdown的区别。

    stop:立即停止所有正在运行的线程
    shutdown:等待当前正在运行线程结束后,停止所有线程
  5. CLI模式,就使用bin目录下的stoptest[.cmd|.sh] or shutdown[.cmd|.sh]

  6. jmeter.log记录了日志

三、测试计划的元件

  1. 最小的测试包括测试计划、线程组、采样器

  2. Functional Test Mode,意思是说,在listener选择了保存文件的情况下,勾选上这个复选框,就会把返回数据保存到文件中去

    点读系列《jmeter官方用户手册》_第9张图片

  3. 可以在listener中点击Configure来选择保存的字段

    点读系列《jmeter官方用户手册》_第10张图片

  4. 所有控制器和采样器必须位于线程组下,而listener可以放在测试计划下,作用于所有线程组

  5. 线程组可以设置3项:the number of threads, the ramp-up period,the number of times to execute the test

  6. 线程组的Scheduler可以配置Startup Delay (seconds)Duration (seconds)

  7. 采样器就是用来发请求的

  8. HTTP Cookie Manager应该添加到所有的web测试中,否则jmeter将会忽略cookie

  9. 加载搜索,搜索“A”,加载搜索,搜索“B”,可以用Interleave Controller来实现

    image-20190917192759353

  10. HTTP Request Defaults可以在多个http请求中共享同样的请求信息

    点读系列《jmeter官方用户手册》_第11张图片

    HTTP采样器中需要共享的就留空

  11. 所有的listener都保存相同的数据,只是展示的不同而已

  12. timers = time.sleep()

  13. 断言是适用于范围内的,如果要断言单个sampler,则需要添加为sampler的子级

  14. 执行顺序

    点读系列《jmeter官方用户手册》_第12张图片

  15. 有sampler才会执行Pre-Processors Timers Post-Processors Assertions

  16. 执行顺序示例

    点读系列《jmeter官方用户手册》_第13张图片

  17. 严格分层的元件:Listeners, Config Elements, Post-Processors, Pre-Processors, Assertions, Timers

    有序的元件:controllers, samplers

  18. Assertions Timers分层示例

    点读系列《jmeter官方用户手册》_第14张图片

    更复杂的

点读系列《jmeter官方用户手册》_第15张图片

  1. 变量和属性都区分大小写

  2. 如果线程更新变量,则仅更改变量的线程副本

  3. 使用属性来定义变量的值

    点读系列《jmeter官方用户手册》_第16张图片

四、创建测试计划-Web

  1. 使用测试计划的第一步就是,创建线程组
  2. Ramp-Up Period是指启动用户的总耗时,eg1:设置为0则立即启动所有用户,eg2:5个用户设置为5s则每1s启动1个用户
  3. HTTP Request Defaults不会发请求,只是设置默认值
  4. 如果有cookie,添加HTTP Cookie Manager就完事
  5. 测试计划的图标image-20190919113305968线程组的图标image-20190919113243822

五、创建测试计划-高级Web

  1. 在不能确定浏览器是否支持Cookie的情况下,采用url重写来传session id

  2. jmeter可以用HTTP URL Re-writing Modifier来支持

    点读系列《jmeter官方用户手册》_第17张图片

点读系列《jmeter官方用户手册》_第18张图片

​ 这样就会把session id添加到每个请求中。

​ Path Extension:session id作为path一部分,用;分隔

​ Cache Session Id?:保存最后找到的session id,如果前一个http请求没有session id,那么就用缓存这个

  1. HTTP Header Manager和HTTP Cookie Manager一般都添加在线程组级别,也就是在线程组右键添加

六、创建测试计划-数据库

  1. 数据库驱动程序需要放到 ./lib 目录,如mysql-connector-java-XXX-bin.jar

  2. JDBC Connection Configuration配置了数据库连接,JDBC Request是sql请求,二者通过Variable name bound to pool来绑定关联

    点读系列《jmeter官方用户手册》_第19张图片

点读系列《jmeter官方用户手册》_第20张图片

七、创建测试计划-FTP

  1. FTP Request Defaults也是用来设置默认值的

  2. 示例

    点读系列《jmeter官方用户手册》_第21张图片

点读系列《jmeter官方用户手册》_第22张图片

点读系列《jmeter官方用户手册》_第23张图片

点读系列《jmeter官方用户手册》_第24张图片

八、创建测试计划-LDAP、扩展LDAP

  1. LDAP(Light Directory Access Portocol)轻量级目录访问协议

  2. 4个LDAP请求示例:http://jmeter.apache.org/usermanual/build-ldap-test-plan.html

    image-20190923085706126

  3. 9个LDAP请求示例,http://jmeter.apache.org/usermanual/build-ldapext-test-plan.html

点读系列《jmeter官方用户手册》_第25张图片

九、创建测试计划-Webservice

  1. FileTemplates…选择Building a SOAP Webservice Test Plan,按模板创建
  2. 添加路径,修改HTTP Header Manager
  3. http://jmeter.apache.org/usermanual/build-ws-test-plan.html

十、创建测试计划-JMS点对点

  1. 把jar放入JMeter的lib目录后,需要重启JMeter

  2. AddListenerGraph Results

    点读系列《jmeter官方用户手册》_第26张图片

  3. http://jmeter.apache.org/usermanual/build-jms-point-to-point-test-plan.html

十一、创建测试计划-JMS主题

  1. JMeter会自动保存在控制面板所做的更改
  2. http://jmeter.apache.org/usermanual/build-jms-topic-test-plan.html

十二、监听器

  1. 输出类型有树、表、图形、日志文件

  2. csv文件比xml文件小得多,如果要生成大量数据,请使用csv

  3. 相对路径是相对于当前工作目录,默认为bin/目录

  4. 如果路径以“~/”开头(或jmeter.save.saveservice.base_prefix JMeter属性中的任何名称),则是相对于当前测试计划(jmx文件)所在目录的路径

  5. 如果仅希望记录某些样本,则将监听器添加为采样器的子节点。或者,可以使用“简单控制器”对一组采样器进行分组,然后向其添加“监听器”。多个采样器可以使用相同的文件名-但请确保它们都使用相同的配置!

  6. jmeter.properties(或user.properties)可以配置默认保存项

  7. jmeter.save.saveservice.output_format若设置为csv,那么default_delimiter要设置为逗号","

  8. 配置说明

    #------------------------------------------------- -------------------------- 
    #结果文件配置
    #------------------- -------------------------------------------------- ------ 
    
    #本部分有助于确定如何保存结果数据。
    #注释掉的值是默认值。
    
    #合法值:xml,csv,db。当前仅支持xml和csv。
    #jmeter.save.saveservice.output_format = csv 
    
    
    #应该保存字段时为true;否则为false 
    
    #assertion_results_failure_message只影响CSV输出
    #jmeter.save.saveservice.assertion_results_failure_message =真
    #
    #合法值:无,首先,所有
    #jmeter.save.saveservice.assertion_results =无
    #
    #jmeter.save.saveservice.data_type = true 
    #jmeter.save.saveservice.label = true 
    #jmeter.save.saveservice.response_code = true 
    #CSV输出当前不支持response_data 
    #jmeter.save.saveservice.response_data = false 
    #将ResponseData保存为失败的样本
    #jmeter.save.saveservice.response_data.on_error = false 
    #jmeter.save.saveservice.response_message = true 
    #jmeter.save.saveservice.successful = true 
    #jmeter.save.saveservice.thread_name = true 
    #jmeter。 save.saveservice.time = true 
    #jmeter.save.saveservice.subresults = true 
    #jmeter.save.saveservice.assertions = true 
    #jmeter.save.saveservice.latency = true 
    #jmeter.save.saveservice.connect_time = true
    #jmeter.save.saveservice.samplerData = false 
    #jmeter.save.saveservice.responseHeaders = false 
    #jmeter.save.saveservice.requestHeaders = false 
    #jmeter.save.saveservice.encoding = false 
    #jmeter.save.saveservice.bytes = true 
    #jmeter.save.saveservice.sent_bytes = true 
    #jmeter.save.saveservice.url = false 
    #jmeter.save.saveservice.filename = false 
    #jmeter.save.saveservice.hostname = false 
    #jmeter.save.saveservice.thread_counts = true 
    #jmeter.save.saveservice.sample_count = false 
    #jmeter.save.saveservice.idle_time = true 
    
    #时间戳格式-仅影响CSV输出文件
    #合法值:无,ms或适用于SimpleDateFormat的格式
    #jmeter.save.saveservice.timestamp_format = ms 
    #jmeter.save.saveservice.timestamp_format = yyyy / MM / dd HH:mm:ss.SSS 
    
    #用于逗号分隔值(CSV)文件或其他格式
    #字段'值由指定的分隔符分隔。
    #默认值:
    #jmeter.save.saveservice.default_delimiter =,
    #对于TAB,由于JMeter 2.3可使用:
    #jmeter.save.saveservice.default_delimiter = \ t 
    
    #仅适用于CSV格式文件:
    #将字段名称打印为第一行在CSV中
    #jmeter.save.saveservice.print_field_names = true 
    
    #JMeter变量名称的可选列表,其值将保存在结果数据文件中。
    #使用逗号分隔名称。例如:
    #sample_variables = SESSION_ID,REFERENCE 
    #NB当前的实现将XML值保存为属性,
    #因此名称必须是有效的XML名称。
    #JMeter将变量发送到所有服务器
    #以确保客户端上可获得正确的数据。
    
    #文件
    第2行的可选xml处理指令:#jmeter.save.saveservice.xml_pi = <?xml-stylesheet type =“ text / xsl” href =“ sample.xsl”?> 
    
    #用于标识文件名的前缀相对于当前基准
    #jmeter.save.saveservice.base_prefix =〜/ 
    
    #用XML或CSV输出编写的每一行上的AutoFlush 
    #设置为true可以减少测试结果数据丢失(如果发生崩溃)
    #但会影响性能,特别是对于密集测试(低暂停或无暂停)
    #从JMeter 2.10开始,默认情况下为假
    #jmeter.save.saveservice.autoflush = false 
    
    #将开始时间戳记记入日志,而不是结束
    sampleresult .timestamp.start = true 
    
    #是否使用System.nanoTime()-否则仅使用System.currentTimeMillis()
    #sampleresult.useNanoTime = true 
    
    #使用后台线程计算nanoTime偏移量
    #将此值设置为≤0 可禁用背景线程
    #sampleresult.nanoThreadSleep = 5000
  9. SimpleDateFormat:https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

  10. CLI模式下,-1 可以用于创建顶级监听器,一般用来为每次运行指定不同的数据和日志文件。因为默认是写入jmeter.log文件,所以如果要重命名,需要使用 -j

    jmeter -n -t testplan.jmx -l testplan_01.jtl -j testplan_01.log 
    jmeter -n -t testplan.jmx -l testplan_02.jtl -j testplan_02.log
  11. 为每次测试运行生成唯一的名称:log_file = 'jmeter_'yyyyMMddHHmmss'.tmp'

  12. 大多数监听器都会保留它们显示的样本的副本,除了

    • Simple Data Writer
    • BeanShell/JSR223 Listener
    • Mailer Visualizer
    • Monitor Results
    • Summary Report

    这2个使用的内存更少:

    • Aggregate Report
    • Aggregate Graph

    如果需要保存大量数据,请使用Simple Data Writer + csv

  13. csv,xml,sample attribute配置说明http://jmeter.apache.org/usermanual/listeners.html

  14. 可以使用Save_Responses_to_a_file,为每个样本生成一个新文件

  15. 为了正确解析无标题的csv文件,必须设置适当的jmeter属性

  16. 可以通过EditSave Node As Image把监听器保存为PNG文件

    点读系列《jmeter官方用户手册》_第27张图片

十三、远程测试

  1. 从单个JMeter客户端控制多个远程JMeter引擎

  2. jmeter客户端的实例可以控制任意数量的远程jmeter实例

  3. 所有服务器都运行相同的测试计划,这意味着,如果设置了1000个线程,有6台jmeter服务器,那么将运行6000个线程

  4. 推荐将一台或多台计算机,与配置为运行jmeter engine的应用服务器,位于同一以太网段上,这将最大程度减少网络对测试结果的影响,而且不会影响应用服务器本身的性能

  5. 需确保多台服务器的jmeter和java版本完全相同

  6. 启动服务器组件

    JMETER_HOME/bin/jmeter-server (unix)
    JMETER_HOME/bin/jmeter-server.bat (windows) 
  7. 添加服务器ip

    JMETER_HOME/bin/jmeter.properties
    remote_hosts

    也可以通过-R来指定

    jmeter -Rhost1,127.0.0.1,host2
  8. 通过新菜单来启动/停止

    点读系列《jmeter官方用户手册》_第28张图片

  9. CLI模式启动远程

    jmeter -n -t script.jmx -r  # 从remote_hosts读取
    jmeter -n -t script.jmx -R server1,server2,…  # 指定
  10. 生成密钥的脚本,默认密码为'changeit'

    bin/create-rmi-keystore.bat  # windows
    bin/create-rmi-keystore.sh  # unix

    生成rmi_keystore.jks,复制到jmeter/bin目录或在server.rmi.ssl.keystore.file中引用它

  11. 默认情况下,jmeter使用标准rmi端口1099

  12. 处理启动失败的节点

    client.tries
    client.retries_delay
    client.continue_on_fail = true
  13. java有安全管理器概念,它会在执行潜在危险操作前(如解析主机名,创建或读取文件在OS中执行命令),被JVM询问,可以通过java.security.managerjava.security.policy来启用安全管理器

十四、Dashboard报表

  1. dashboard是jmeter的模块化扩展,默认会从csv读取数据,生成html报告

  2. 提供的内容见http://jmeter.apache.org/usermanual/generating-dashboard.html

  3. 可以在reportgenerator.properties中找到相关属性,要自定义这些属性,需要复制到user.properties文件中并进行修改

  4. 所有属性必须以jmeter.reportgenerator开头,图属性必须以jmeter.reportgenerator.graph开头,导出属性必须以jmeter.reportgenerator.exporter开头

  5. 过滤机制是正则匹配的

  6. 生成报告的方式

    CLI:

    # 从现有csv文件生成报告
    jmeter -g  -o 
    # 测试结束后自动生成
    jmeter -n -t  -l  -e -o 

    GUI:

    Tools → Generate HTML report

    点读系列《jmeter官方用户手册》_第29张图片

  7. 默认生成目录为${JMETER_HOME}/bin/report-output

  8. 报告生成超时设置generate_report_ui.generation_timeout

十五、实时结果

  1. 通过实现AbstractBackendListenerClient类,把实时结果发给后端
  2. 线程指标、响应时间指标
  3. 使用InfluxDBBackendListenerClient 添加一个BackendListener,使用CLI连接到InfluxDB
  4. 还可以配置Grafana
  5. http://jmeter.apache.org/usermanual/realtime-results.html

十六、最佳实践

  1. 使用最新版本,jmeter的性能一直在优化

  2. 合理的线程数,过多可以考虑分布式多台服务器

  3. cookie manager的位置

  4. authorization manager的位置

  5. 使用HTTP(S) Test Script Recorder

  6. 使用用户变量参数化

  7. 减少资源的建议,很重要

    使用CLI模式 jmeter -n -t test.jmx -l test.jtl

    去掉无用的监听器

    实际运行测试时,去掉察看结果树,仅在调试时使用

    太多相同的采样器,建议改成循环

    不要使用功能模式

    输出csv而不是xml

    只保存需要的数据

    尽可能少的断言

  8. BeanShell服务器

  9. vars.get()和vars.put(),访问jmeter变量,作用范围是线程内

  10. 线程间共享变量

    方式1

    import org.apache.jmeter.util.JMeterUtils;
    String value = JMeterUtils.getPropDefault("name","");
    JMeterUtils.setProperty("name", "value");

    方式2

    if (bsh.shared.myObj == void){
        // not yet defined, so create it:
        myObj = new AnyObject();
    }
    bsh.shared.myObj.process();
  11. CLI模式下可以通过属性来参数化变量

    LOOPS=${__P(loops,10)}  # 默认10
    jmeter … -Jloops=12 …  # 指定12
  12. 属性对于jmeter实例是全局的

  13. 修改属性时,不要修改jmeter.properties文件,而是从jmeter.properties中复制属性到user.properties,这样方便升级到下个版本时,直接拿来用

十七、帮帮忙!老板想让我给webapp做负载测试

  1. 需要思考:平均用户数、高峰用户数、压测时机、应用程序状态、测试目的
  2. 网络和应用资源
  3. 操作系统

十八、元件参考

  1. jdbc的sql不要输入分号
  2. 元件清单:http://jmeter.apache.org/usermanual/component_reference.html

十九、属性参考

  1. 重启jmeter,加载类时,才会解析属性
  2. 属性列表:http://jmeter.apache.org/usermanual/properties_reference.html

二十、函数

  1. 函数调用

    ${__functionName(var1,var2,var3)}
  2. 注意\转义参数中的逗号

  3. jmeter会将${x}中x的空格自动删除

  4. 属性使用**__P** or **__property**函数引用

  5. 函数有2种,变量和内置函数

  6. 函数在线程之间共享

  7. 有些字段不允许随机字符串,它们需要数字,不接受函数

  8. 要注意${}两边的引号,比如接口参数、sql

  9. 函数名称以"**__**"开头

  10. 如果函数不带参数,可以省略括号,这操作666,跟编程语言有明显差异

  11. 查看变量的值,**__logn()**函数或Debug Sampler,还可以建一个包括变量引用的Java Request sampler,在listener中查看

  12. 自定义变量会覆盖同名的内置函数

  13. The Function Helper Dialog

  14. 内置函数说明:http://jmeter.apache.org/usermanual/functions.html

  15. 预定义变量COOKIE_cookiename JMeterThread.last_sample_ok START

  16. 预定义属性START.MS START.YMD START.HMS TESTSTART.MS

二十一、正则表达式

  1. 添加Debug Sampler和Tree View Listener,可以用来测试正则

  2. View Results Tree包含RegExp Tester

  3. 包含是指正则表达式是其中一部分,匹配是指全部匹配,例如alphabet包含ph.b.,匹配al.*t,注意alp|.lp.*是包含而不是匹配,因为alp包含后不会再继续寻找了

  4. ^表示非,一个例子

    name="file" value="([^"]+)">
    [^"]表示除"以外的任何
  5. . 任何

    + 一个或多个

    ? 非贪婪

二十二、提示与技巧

  1. jmeter的变量是线程作用域,要共享线程变量,一属性,二文件(Save Responses to a file或BeanShell写文件,HTTP Sampler "file:" protocol或BeanShell读)

  2. 调试日志选项

    jmeter.loggerpanel.display = true
  3. 通过菜单的搜索,搜索树中元件

  4. jmeter会为每个jmx备份10个文件在$ {JMETER_HOME} / backups,相关属性

    jmeter.gui.action.save.backup_on_save = false
    jmeter.gui.action.save.backup_directory=/path/to/backups/dir
    jmeter.gui.action.save.keep_backup_max_hours=0
    jmeter.gui.action.save.keep_backup_max_count=10
  5. gui.quick_*属性用于设置键盘快捷键

版权申明:本文为博主原创文章,转载请保留原文链接及作者。

你可能感兴趣的:(点读系列《jmeter官方用户手册》)