7月12日 JMeter电商压测实战课程贴

课后调查问卷:

课前准备内容:

  1. Java + Maven 基础知识, Java 开发环境

  2. MySQL数据库, 建议Docker安装

  3. JMeter 运行时环境

  4. 搭建好JMeter性能监控平台: Influx + Grafana + JMeter

课堂所用项目源码位置:

setup线程组中请求登录接口,获取身份后存入变量中,在其它并发线程组中试用该身份,还需要老师指导下。

问题分析
  • 如果被测程序是 Java 的怎么去定位是什么问题呢,比如是 SQL数据库的问题,还有Java 堆栈 函数的问题
  1. 在setup 线程组中用json extractor获取access token, 然后利用beanshell 将access_token放入全局属性变量
  2. 在其他线程组中可以调用这个全局属性变量,或者在全局的header manager调用全局access_token,下面贴几个截图作为参考
  1. 对于这种接口压力测试,一个比较直观的判断系统性能的方式就是看对应接口的响应速度,响应速度较慢的接口,有很大的可能性是系统瓶颈的来源点;

  2. 判断接口响应速度是一个比较宏观的性能表现,对于慢接口内部的问题,压测报告是没法透露的,需要底层的调试,可以分享两种方式:
    a: 代码打点方式,这个需要研发来配合,在对的function 上进行时间打点,计算方法的运行时间,找出慢方法,进而去调试优化代码,提高性能;
    b: APM 字节码插桩方式,这种方式不用修改源码,通过加入server探针的方法,可以透视系统的内部运行状况,帮助寻找方法级的性能问题;我平时自己用的是 newrelic, https://newrelic.com/, 使用和配置方法网站上有相关文档。下面的截图做一个参考


    c: 市面上还有几种类似的APM性能分析产品:听云,OneAPM, dynatrace, 等

  3. 对于数据库性能,可以有三种方式
    a. 用jmeter的jdbc request对数据库进行直接压测;
    b. 对于使用的数据的应用而言,在接口压测的同时,系统会调用数据库;在这种情形下,jmeter的压测报告无法展现数据库本身的性能状态,需要使用APM工具对在接口访问过程中的数据库状态进行解析得出性能数据;
    c. 可以使用相应的数据库性能工具去监控数据库本身的性能

  4. 对于java的jvm本身的性能问题,可以使用jdk工具调试,比如 jvisualvm, jconsole, jstack 等,主要帮助定位java 线程的cpu,内存占用有没有过高,有没有线程阻塞等问题。

  • 对于 Shell 下执行自动化性能测试,shell脚本中 sed -i "" "s/thread_num/${num}/g" ${jmx_filename} thread_num 对应 jmeter中的线程数,循环数是哪个变量替换呢?
  • 例如 一个接口我需要执行 1000 次
1000 / 10 = 1000
1000 / 20 = 50
1000 / 25 = 40 
  • 不同的线程数,循环次数不一样,这样的场景怎么在 自动化压测的脚本中,更新变量值?

循环数可以再自己定义一个,起的变量名需要在jmx文件中保持唯一即可。

关闭