【세부사항】Jmeter 설치 구성 및 기본 동작

1. Jmeter 환경 구축 및 구성

1. Jmeter 환경 구축

설치 JDK: https://www.oracle.com/cn/java/technologies/downloads/

安装Jmeter:https://jmeter.apache.org/download_jmeter.cgi

참고: JDK를 다운로드하고 컴퓨터 운영 체제와 자릿수에 주의하십시오. Jmeter 버전은 JDK 버전과 일치해야 합니다. Jmeter 설치 경로에는 중국어 또는 공백이 포함될 수 없습니다.

2. Jmeter 기본 구성

(1) Jmeter 인터페이스의 중국어화

영구성: bin 디렉토리 "language=zh_CN"에서 구성 파일 jmeter.properties를 수정하고 Jmeter를 다시 시작합니다.

임시: 메뉴 "옵션"->언어 선택->중국어(간체)

(2) Jmeter 테마 수정

메뉴 "옵션" -> 외모 (좋아하는 테마 선택)

(3) 응답 결과의 한자는 왜곡되지 않습니다.

bin 디렉터리에서 구성 파일 jmeter.properties를 열고 "sampleresult.default.encoding=UTF-8"을 수정한 다음 Jmeter를 다시 시작합니다.


2. Jmeter의 주요 구성 요소 및 관련 범위

  • 샘플러: 요청을 보내는 호출 메서드
  • Logic Controller: 샘플러의 실행 순서 제어(샘플러와 함께 사용)
  • 전처리기: 요청 매개변수에 값 할당
  • 후처리기: 응답에서 특정 필드의 값을 추출합니다.
  • 어설션: 추출된 값을 예상 결과와 비교
  • 타이머: 실제 비즈니스 시나리오 시뮬레이션
  • 구성 요소: 테스트 데이터 초기화
  • 리스너: 콘솔에서 스크립트 실행 결과 보기

요소: 여러 유사한 기능 구성 요소의 컨테이너(클래스와 유사)

튜플: 컨테이너에 독립적인 함수 구현(메서드와 유사)

1. 범위의 원칙

  • 샘플러: 코어, 범위 없음
  • 로직 컨트롤러: 하위 노드의 샘플러 및 로직 컨트롤러에서만 작동합니다.
  • 기타 구성 요소:
    • 샘플러의 자식 노드인 경우 구성 요소는 부모 노드에서만 작동합니다.
    • 如果其父节点不是取样器,则其作用域是该元件父节点下的其他所有后代节点(包括子节点,子节点的子节点等)

2、元件的执行顺序

在同一个作用域(目录/级别/缩进)的不同元件的执行顺序:

  • 配置元件 - 前置处理程序 - 定时器 - 取样器 - 后置处理程序 - 断言 - 监听器

在同一个作用域(目录/级别/缩进)的相同元件的执行顺序:

  • 从上到下的顺序依次执行

案例:

执行顺序:定时器1 - 请求1 - 定时器1 - 定时器2 - 请求2 - 定时器1 - 定时器3 - 请求3


三、Jmeter线程组、HTTP请求、查看结果树的配置使用

1、线程组

介绍:控制Jmeter用于执行测试的一组用户

分类:

  • setUp线程组:预测试操作,所有脚本之前执行
  • 普通线程组:执行测试用例,可以有1个或多个(并行/串行)
  • tearDown线程组:测试后操作,所有脚本之后执行

参数:

2、HTTP请求

作用:向服务器发送http及https请求

位置:选中线程组->右键->添加->取样器->HTTP请求

参数:

3、查看结果树

查看请求参数:Request Body(请求行+请求体)

查看响应结果:Response Body(响应体)


四、Jmeter参数化

1、定义:使用不同的测试数据,调用相同的测试方法进行测试

2、本质:实现测试数据与测试方法的分离

3、实现方式

  • 用户定义的变量——全局变量
  • 用户参数——为每个用户分配不同的参数值
  • CSV数据文件设置——文件方式参数化
  • 函数——随机数据
  • 数据库

(1)用户定义的变量

使用场景:定义全局变量

使用步骤:

  1. 添加线程组
  2. 添加用户定义的变量。格式:变量名 - 变量值
  3. 添加HTTP请求,引用定义的变量名。格式:${变量名}
  4. 查看结果树

(2)用户参数

使用场景:针对同一组参数,当不同的用户来访问时,可以获取到不同的值

使用步骤:

  1. 添加线程组,设置线程数为n(表示模拟的用户数)
  2. 添加用户参数
    1. 第一列添加多个变量名
    2. 后续每一列为一组用户的数据
  3. 添加HTTP请求,引用定义的变量名。格式:${变量名}
  4. 添加查看结果树

(3)CSV文件设置

使用场景:当不同的用户,或者同一个用户多次循环时,都可以获取到不同的值

使用步骤:

  1. 定义CSV数据文件
  2. 添加线程组
  3. 添加CSV数据文件设置
  4. 添加HTTP请求,引用定义的变量名。格式:${变量名}
  5. 添加查看结果树

(4)函数(以__counter函数为例)

使用场景:自动生成不重复的数据,让每个用户每次循环都能取到不同的数据,且不需要提前定义

使用步骤:

  1. 添加线程组,设置虚拟用户数和循环次数
  2. 生成__counter函数
  3. 添加HTTP请求,使用__counter函数。格式:${__counter(FALSE,)}
  4. 添加查看结果树

(5)4种参数化方式对比

用户定义的变量:

  • 作用:定义全局变量
  • 局限性:每次取值(无论是否相同的用户)都是固定值

用户参数:

  • 作用:保证不同的用户针对同一组参数,可以取到不同的值
  • 局限性:同一个用户在多次循环时,取到相同的值

CSV数据文件设置:

  • 作用:保证不同的用户及同一个用户多次循环时,都可以取到不同的值
  • 局限性:需要手动进行测试数据的设置

函数:

  • 作用:保证不同的用户及多次循环时,都可以取到不同的值,不需要提前设置
  • 局限性:输入数据有特定的业务要求时无法使用(如:登录时的用户名和密码)

五、Jmeter断言

1、定义:让程序自动判断预期结果和实际结果是否一致

2、提示:Jmeter在请求的返回层面有个自动判断机制(响应状态码),但是请求成功了,并不代表结果一定正确,因此需要检测机制提高测试的准确性

3、常用断言方法

  • 响应断言
  • JSON断言
  • 持续时间断言

(1)响应断言

  • 响应文本:来自服务器的响应文本,即主体
  • 响应代码:响应的状态码,例如:200
  • 响应信息:响应的信息,例如:OK
  • 响应头:响应头信息
  • 请求头:请求头信息
  • URL样本:请求URL
  • 文档(文本):响应的整个文档
  • 忽略状态:忽略返回的响应状态码
  • 包括:文本包含指定的正则表达式
  • 匹配:整个文本匹配指定的正则表达式
  • 相等:整个返回结果的文本等于指定的字符串(区分大小写)
  • 字符串:返回结果的文本包含指定的字符串(区分大小写)
  • 否:取反
  • 或者:如果存在多个测试模式,勾选代表逻辑或,不勾选代表逻辑与
  • 测试模式:即填写你指定的结果(可填写多个)

(2)JSON断言

使用场景:对HTTP请求的响应结果为JSON格式时,可以使用JSON断言

使用步骤:添加线程组->添加HTTP请求->添加JSON断言配置参数->添加查看结果树查看断言结果

  • Assert JSON Path exists:用于断言的JSON元素的路径(实际结果)
  • Additionally assert value:如果您想要用某个值生成断言,请选择复选框
  • Match as regular expression:使用正则表达式断言
  • Expected Value: 期望值(期望结果)
  • Expect null:如果希望为空,请选择复选框
  • Invert assertion (will fail if above conditionsmet):反转断言(如果满足以上条件则失败)

(3)断言持续时间

作用:检查HTTP请求的响应时间是否超出要求范围

使用步骤:添加线程组->添加HTTP请求->添加断言持续时间设置持续时间->添加查看结果树


六、Jmeter关联

1、定义:当请求之间有依赖关系,比如一个请求的入参是另一个请求返回的数据,这时候就需要用到关联处理

2、常用的关联方法

  • 正则表达式提取器
  • XPath提取器
  • JSON提取器
  • JMeter属性

(1)正则表达式提取器

使用场景:任意格式的响应数据,都可以使用正则表达式提取器进行提取

使用步骤:

  1. 添加线程组
  2. 添加HTTP请求1
  3. 在后置处理器添加正则表达式提取器设置参数
  4. 添加HTTP请求2,引用正则表达式中的引用名称。如:用${title}引用它
  5. 添加查看结果树

正则表达式:就是一个公式,或者一套规则,使用这套规则可以从任意字符串中提取出想要的数据内容

公式格式:左边界(匹配符号)右边界:可以提取出想要获取的数据内容

.:是通配符,可以代表任意字符(除换行回车)

*: 代表前面的字符出现0次或者多次

.*匹配规则:找到左边界值后,往右查找有边界,找到最后面的右边界,中间的所有数据都被记录下来

?: 비탐욕적 매칭을 의미 왼쪽 경계선을 찾은 후 오른쪽 경계선을 오른쪽으로 탐색 일치하는 오른쪽 경계선이 있으면 탐색을 중지하고 좌우 경계선을 다시 탐색

수식 형식: 왼쪽 경계(.*?) 오른쪽 경계

<title>바이두, 당신은 알게 될 것입니다</title>

<제목>(.*?)</제목>

(2) xpath 추출기

사용 시나리오: 응답 결과 데이터를 HTML 형식으로 추출

사용 단계:

  1. 스레드 그룹 추가
  2. HTTP 요청 1 추가
  3. 포스트 프로세서에서 xpath 추출기 설정 매개변수를 추가하는 옵션
  4. 정규식에서 인용 이름을 인용하여 HTTP 요청 2를 추가합니다. 예: ${title}로 인용
  5. 보기 결과 트리 추가

  • Tidy(허용 파서) 사용: 처리할 페이지가 HTML 형식인 경우 이 옵션을 선택해야 하며, 처리할 페이지가 XML 또는 XHTML 형식인 경우 이 옵션을 선택 취소합니다.
  • 참조 이름: 추출된 값을 저장하는 매개변수의 이름
  • XPath 쿼리: 값 추출을 위한 XPath 표현식
  • 일치하는 숫자: XPath 경로 쿼리가 많은 결과를 생성하는 경우 추출할 결과를 선택할 수 있습니다.
    • 0: 무작위를 의미, -1: 모든 결과 추출을 의미, 1은 첫 번째 값을 의미
  • 기본값: 매개변수의 기본값

(3) JSON 추출기

사용 시나리오: JSON 형식의 응답 데이터 추출

사용 단계:

  1. 스레드 그룹 추가
  2. HTTP 요청 1 추가
  3. 포스트프로세서에서 JSON 추출기 설정 매개변수를 추가하는 옵션
  4. 정규식에서 인용 이름을 인용하여 HTTP 요청 2를 추가합니다. 예: ${title}로 인용
  5. 보기 결과 트리 추가

  • 생성된 변수의 이름: 추출된 값을 저장하는 매개변수의 이름입니다. 예: cit
  • JSON 경로 표현식: 값을 추출하는 데 사용되는 JSON 경로 표현식
  • 일치 번호: 0은 무작위를 의미하고 -1은 추출된 모든 결과를 의미하고 1은 첫 번째 값을 의미합니다.
  • 기본값: 매개변수의 기본값

(4) JMeter 속성

사용 시나리오: 서로 다른 스레드 그룹 간에 매개변수 전달

사용 단계:

  1. 스레드 그룹 1 추가
  2. HTTP 요청 1 추가
  3. 추출기 추가(JSON, XPath, 정규 표현식)
  4. BeanShell 샘플러 추가(샘플러에서 추출한 값을 JMeter 속성으로 저장)
    1. JMeter 속성 저장: ${__setProperty(변수 이름, ${추출기가 값을 추출하는 변수},)}
  5. 스레드 그룹 2 추가
  6. HTTP 요청 2 추가(JMeter 속성 읽기)
    1. JMeter 속성 읽기: ${__property(variable name,,)}
  7. 보기 결과 트리 추가

注意:__setProperty函数执行(JMeter属性):需要通过BeanShell取样器来执行


七、Jmeter自动录制脚本

1、定义:在没有接口文档的旧项目当中,快速录制web页面产生的http接口请求,帮助编写接口测试脚本

2、原理:录制时,JMeter作为代理服务器来拦截和转发请求与响应数据

3、jmeter脚本录制步骤

(1)添加HTTP代理服务器,并进行配置(在非测试元件中)

(2)开启windows操作系统的浏览器代理

(3)启动代理服务器,开始录制

(4)在浏览器页面中进行操作,成功后,就能在JMeter当中看到抓取的接口请求了

当使用代理的过程中,发现抓不到包,可能发生以下情况:

  • 过滤规则设置有问题
  • 重启Jmeter代理服务器或者重启Jmeter
  • 换浏览器来使用(ChromeIE
  • 检查PC机中的代理设置是否处于可用状态
  • 拔掉网线,抓包

八、Jmeter连接数据库

1、直连数据库的作用

  • 用作请求的参数化。例如:登录时需要的用户名可以从数据库中查询获取
  • 用作结果的断言。例如:添加购物车下单时,检查接口返回的订单号,是否与数据库中生成的订单号一致
  • 清理垃圾数据。例如:添加商品(商品名/编号等不能重复),再执行该脚本不能成功,需要在下次执行前删除该商品数据
  • 准备测试数据。例如:通过数据库来准备大量的性能测试数据

2、直连数据库的步骤

(1)添加Mysql驱动jar包

(2)配置数据库连接信息

添加方法:测试计划->线程组->配置元件->JDBC Connection Configuration

(3)添加JDBC请求

添加方法:测试计划->线程组->取样器->JDBC Request

(4)使用SQL语句返回结果的变量名替代原有的固定数据


九、Jmeter常用逻辑控制器

1、如果(if)控制器

作用:if控制器用来控制它下面的测试元素是否运行

位置:测试计划->线程组->逻辑控制器->IF控制器

2、循环控制器

作用:控制下面的测试元素循环执行一次或多次

位置:测试计划->线程组->逻辑控制器->循环控制器

注意:线程组也可以控制循环次数,但是与循环控制器的作用范围不同。线程组的循环对线程组下的所有HTTP请求有效,而循环控制器对子节点下的HTTP请求有效

3、ForEach控制器

作用:一般和用户自定义变量或者正则表达式提取器一起使用,读取返回结果中一系列相关的变量值。该控制器下的所有取样器都会被执行一次或多次,每次读取不同的变量值

位置:测试计划->线程组->逻辑控制器->ForEach控制器

例如:

那么后续的请求使用${kw}时就会依次赋值1、2、3


十、Jmeter常用定时器

1、同步定时器

定义:阻塞线程(积累一定的请求),当在规定的时间内达到一定的线程数量,这些线程会在同一个时间点一起释放,瞬间产生很大的压力

位置:测试计划->线程组->添加定时器->Synchronizing Timer

  • 模拟用户组的数量:模拟用户的数量,即指定同时释放的线程数数量。若设置为0,等于设置为线程组中的线程数量
  • 超时时间以毫秒为单位:超时时间,即超时多少毫秒后同时释放指定的线程数;如果设置为0,该定时器将会等待线程数达到了设置的线程数才释放,若没有达到设置的线程数会一直死等。如果大于0,那么如果超过设置的最大等待时间后还没有达到设置的线程数,就不再等待直接释放已到达的线程。默认为0

超时时间建议设置,不然会一直死等;也不能设置太小,不然没有达到指定的线程数就释放

2、常数吞吐量定时器

定义:模拟用户真实的使用场景,让Jmeter按指定的吞吐量执行,以每分钟为单位

위치: 테스트 계획 -> 스레드 그룹 -> 타이머 추가 -> 일정 처리량 타이머

  • 목표 처리량: 사용자별 분당 전송된 요청 수

사례:

—사용자의 실제 비즈니스 시나리오 요구 사항 시뮬레이션: 20QPS(초당 요청)

— 스레드 수를 1로 설정하면 목표 처리량은 20 * 60 = 1200으로 설정됩니다.

— 스레드 수를 2로 설정하면 목표 처리량은 20 * 60 / 2 = 600으로 설정됩니다.

3. 고정 타이머

정의: 스레드가 대기하는 시간(밀리초)을 지정합니다.

위치: 테스트 계획 -> 스레드 그룹 -> 타이머 추가 -> 고정 타이머


Eleven, Jmeter 분산 테스트

1. 애플리케이션 시나리오: 성능 테스트를 위해 Jmeter를 사용할 때 동시성 수가 상대적으로 많은 경우(예: 프로젝트에서 10,000 동시성을 지원해야 함) 단일 컴퓨터(CPU 및 메모리)에서 지원하지 못할 수 있습니다. 이번에는 Jmeter의 기능에서 제공하는 분산 테스트를 사용할 수 있습니다.

2. 원리:

  • 분산 테스트에서는 하나의 제어 머신(Master)과 여러 에이전트 머신(Slave)으로 나뉩니다.
  • 제어 시스템은 테스트 작업을 에이전트 시스템으로 보내는 역할을 합니다.
  • 에이전트 머신은 작업을 수신하고 서버에 요청을 보내고 서버에서 반환된 응답을 수신하고 테스트 결과를 제어 머신에 반환합니다.
  • 제어 기계는 테스트 결과 데이터에 대한 요약 통계를 수행합니다.

3. 주의사항

  • 모든 테스트 머신 방화벽이 꺼졌습니다.
  • 모든 테스트 머신과 서버는 동일한 네트워크에 있습니다.
  • 모든 테스트 머신 Jmeter 버전과 JDK 버전은 완전히 동일합니다.
  • Jmeter에서 RMI SSL 스위치를 끕니다.

 4. 분산 테스트 단계

(1) 에이전트 구성

  • 에이전트 시스템에 Jmeter를 설치해야 합니다.
  • 서비스 포트를 수정합니다. 참고: 필요하지 않습니다. 동일한 시스템에서 시연을 위해 다른 포트를 사용해야 하는 경우 여러 시스템을 수정할 필요가 없습니다.
  • bin/jmeter.properties 파일을 열고 'server_port'를 수정합니다(예: ''server_port=2001').
  • 에이전트에서 jmeter-server.bat 파일을 실행하여 Jmeter를 시작합니다.

참고: 프록시 시스템은 자신의 컴퓨터에 설치된 여러 Jmeter이거나 다른 컴퓨터의 Jmeter일 수 있습니다.

(2) 컨트롤러 구성

  • Jmeter의 bin 디렉토리에서 jmeter.properties 구성 파일을 수정하고 'remote_hosts'를 수정합니다.
    • 예: 'remote_hosts=192.168.182.100:1099,192.168.182.200:2099'
    • IP 및 포트는 프록시 시스템의 IP와 사용자 지정 포트이며 여러 프록시 시스템 간에 ","로 구분됩니다.
  • Jmeter 시작
  • 메뉴 선택: 실행-->원격 시작/원격 시작 모두

12. Jmeter는 그래픽 보고서를 생성합니다.

1. 애플리케이션 시나리오: Jmeter에서는 스크립트 실행 결과를 그래픽(파이 차트, 히스토그램...)으로 표시할 수 있어 집계 보고서 또는 보기 결과 트리 구성 요소보다 직관적이며 사용자 경험이 더 좋습니다.

2. 사용방법

命令:jmeter -n -t 脚本文件 -l 日志文件 -e -o 目录

-n 无图形化运行
-t 被运行的脚本
-l 将运行信息写入日志文件
-e 生成测试报告
-o 指定报告输出目录

알아채다:

1. 스크립트 파일은 디렉토리를 지정하거나 jmeter의 bin 디렉토리에 스크립트 파일을 배치해야 합니다.

2. 로그 파일 및 디렉토리는 비워 둘 수 있으며 기본적으로 현재 디렉토리에 있습니다. 채워진 경우 파일 및 디렉토리는 비어 있어야 합니다.

3. 예시

추천

출처blog.csdn.net/ouihsiad/article/details/128281922