在JMeter中使用变量
jmeter 变量运算
jmeter 变量运算
(最新版)
目录
1.JMeter 简介
2.JMeter 变量
3.JMeter 变量运算
4.JMeter 变量运算实例
5.总结
正文
1.JMeter 简介
JMeter 是 Apache JMeter 的简称,是一个用于测试和测量软件应用程序的性能的工具。它是一个开源的、可扩展的 Java 应用程序,可以模拟各种网络协议,如 HTTP、HTTPS 和 JDBC 等。通过使用 JMeter,可以对软件应用程序进行负载测试、功能测试和性能测试,以确保其在生产环境中的稳定性和可靠性。
2.JMeter 变量
在 JMeter 中,变量是一种在测试过程中可以动态改变的值。JMeter 支持两种类型的变量:系统变量和用户定义变量。
系统变量是 JMeter 内部使用的变量,例如测试次数、线程数等。这些变量可以在 JMeter 的“测试计划”或“测试方案”中设置。
用户定义变量是由测试人员在测试脚本中设置的变量。这些变量可以在测试过程中根据需要动态改变,以模拟不同的测试场景。
3.JMeter 变量运算
在 JMeter 中,可以使用内置的函数对变量进行运算。这些函数可以
对变量进行算术、逻辑、字符串操作等。以下是一些常用的 JMeter 变量运算函数:
- 算术运算:`${__num__}`、`${__num1__+__num2__}`、
`${__num1__-__num2__}`等。
- 逻辑运算:`${__bool1__&&__bool2__}`、
`${__bool1__||__bool2__}`等。
jmeter环境变量引用
jmeter环境变量引用
JMeter是一个功能强大的性能测试工具,它允许您模拟多种负载条件下的应用程序性能。在JMeter中,环境变量引用是一种非常有用的功能,它允许您在测试计划中重复使用变量值,从而提高测试的灵活性和可维护性。下面我将从多个角度全面回答关于JMeter 环境变量引用的问题。
1. 什么是环境变量引用?
环境变量引用是JMeter中一种特殊的语法,它允许您在测试计划中引用先前定义的变量值。通过使用环境变量引用,您可以避免在多个地方重复定义相同的变量值,提高测试计划的可读性和可维护性。
2. 如何定义环境变量?
在JMeter中,您可以使用多种方法定义环境变量。其中一种方法是在测试计划的"用户定义的变量"配置元件中定义变量。您可以指定变量的名称和值,并将其用于整个测试计划。另一种方法是使用BeanShell或JSR223预处理器,在运行时动态定义变量。
3. 如何在测试计划中引用环境变量?
在测试计划中引用环境变量非常简单。您只需在需要引用变量值的地方使用`${变量名}`的语法。例如,如果您定义了一个名为"base_url"的变量,您可以在HTTP请求中使用`${base_url}`引用该变量的值。
4. 环境变量引用的优点是什么?
使用环境变量引用有以下几个优点:
提高测试计划的可读性和可维护性,通过引用环境变量,您可以将变量值集中管理,避免在多个地方重复定义相同的值。
灵活性,通过修改变量值,您可以轻松地更改测试计划中的请求参数、URL等内容,而无需手动修改每个请求。
可重用性,您可以在不同的测试计划中重复使用相同的环境变量,从而提高测试脚本的复用性。
jmeter变量作用域
jmeter变量作用域
JMeter是一款开源的性能测试工具,使用它可以模拟多用户对Web
应用程序、数据库、FTP服务器等进行并发访问。在进行测试过程中,我
们经常需要使用变量来存储一些数据,以便在测试流程中引用。然而,在
使用变量时,我们需要注意其作用域,以确保数据在正确的范围内被访问
和更新。
JMeter中的变量主要包括用户定义的变量和JMeter内置的变量。用
户定义的变量通常用于存储用户自定义的数据,如用户名、密码、URL等。而JMeter内置的变量主要用于存储系统生成或自动生成的数据,如线程号、时间戳、随机数等。无论是用户定义的变量还是JMeter内置的变量,它们的作用域都是相对独立的。
在JMeter中,变量的作用域分为以下几个层次:
1. 全局作用域(Global Scope):全局变量是整个测试计划范围内
可见和可用的变量。可以在测试计划或线程组的根节点中定义全局变量。
全局变量对所有线程组和线程下的所有请求都是可见的,可以被任何一个
线程组或线程引用和更新。
2. 线程组作用域(Thread Group Scope):线程组变量是在线程组
范围内可见和可用的变量。可以在线程组的根节点或线程组中定义线程组
变量。线程组变量对线程组下的所有线程和请求都是可见的,但是不能被
其他线程组引用。
3. 线程作用域(Thread Scope):线程变量是在线程范围内可见和
可用的变量。可以在线程的根节点或线程中定义线程变量。线程变量对同
一个线程下的所有请求都是可见的,但是不能被其他线程引用。
4. 请求作用域(Request Scope):请求变量是在一个请求范围内可
jmeter 变量语法
jmeter 变量语法
JMeter 变量语法详解
一、什么是 JMeter 变量?
JMeter 是一款功能强大的开源性能测试工具,而 JMeter 变量则是在测试过程中用来存储和传递数据的重要元素。在JMeter 中,我们可以通过变量来模拟用户输入、服务器响应等数据,并在测试过程中对其进行操作和传递。
二、JMeter 变量的定义和赋值
1. 定义变量:
在JMeter 中,可以通过使用`vars` 对象来定义变量。`vars` 是JMeter 提供的一个特殊对象,用于访问和操作变量。
2. 赋值变量:
可以使用如下方式对变量进行赋值:
- 通过在 BeanShell 断言中使用 `vars.put()` 方法来赋值变量,例如:```
vars.put("username", "testUser");
```
- 通过在 BeanShell 前置处理器中使用 `vars.put()` 方法来赋值变量,例如:
```
vars.put("password", "testPwd");
```
- 通过在 HTTP 请求中使用参数化的方式来赋值变量,例如:
```
${username}
```
三、JMeter 变量的使用
1. 获取变量:
可以使用如下方式来获取变量的值:
- 通过在 BeanShell 断言中使用 `vars.get()` 方法来获取变量的值,例如:
```
String username = vars.get("username");
```
- 通过在 BeanShell 后置处理器中使用 `vars.get()` 方法来获取变量的值,例如:
jmeter 变量运算
jmeter 变量运算
JMeter是一款常用的性能测试工具,可以模拟多种场景下的负载压力,并对系统性能进行评估。在JMeter中,变量运算是一项非常重要的功能,可以用于对测试脚本中的参数进行动态计算和赋值。本文将以JMeter变量运算为主题,介绍其基本用法及常见应用场景。一、变量运算的基本概念和用法
在JMeter中,变量是一种用于存储和传递数据的机制。变量可以是用户自定义的,也可以是系统预定义的,例如当前时间、计数器等。变量运算则是对这些变量进行加减乘除等基本运算,以及字符串拼接等操作。
1.1 变量的定义和赋值
在JMeter中,我们可以通过使用"User Defined Variables"元件来定义和赋值变量。在该元件中,可以设置多个变量及其初始值。例如,我们可以定义一个名为"count"的变量,并将其初始值设置为0。
1.2 变量的引用和使用
在测试脚本中,我们可以使用"${变量名}"的方式引用已定义的变量。例如,如果我们想在某个HTTP请求的路径中使用"count"变量的值,可以将路径设置为"/api/${count}/data"。在运行时,JMeter会自动将"${count}"替换为实际的变量值。
二、常见的变量运算应用场景
2.1 动态参数计算
在某些测试场景下,我们需要根据之前的请求结果来动态计算后续请求的参数值。这时,可以使用变量运算来实现。例如,假设我们需要在每次请求中使用前一次请求的响应结果作为参数,可以通过以下步骤来实现:
1) 在响应结果中提取需要的值,并将其存储到变量中;
jmeter 变量
jmeter 变量
在软件性能测试中,Jmeter量是使用者最熟悉的工具之一,可以用来解决多种问题,比如数据驱动测试、负载测试。本文将介绍Jmeter 中变量的使用方法,以及如何使用 Jmeter量进行性能测试。
一、Jmeter变量概念
Jmeter量是 Jmeter提供的一项功能,可以帮助简化脚本的开发和维护,以及更快地开发出可以复用的脚本。Jmeter量可以是字符串或者数字,在 Jmeter 中配置变量,并保存在 Jmeter 之中。使用变量,运行时可根据实际情况自动调整变量的值,这样可以帮助开发者对同一段脚本进行不同的测试,省去改动脚本重复使用脚本的繁琐过程。
二、怎样使用Jmeter变量
1、在Jmeter的工具栏中,选择“变量”选项,在弹出的“变量”窗口中输入变量的名称,如“User_ID”,并为其设置一个数值,比如“1”,然后点击“确定”按钮保存变量。
2、在编写测试的脚本中,如HTTP请求,可以在不同测试里使用相同的变量,只需要在HTTP请求里输入变量名,而不用输入变量值,如“${User_ID}”,在运行测试脚本时,Jmeter会根据之前设定的变量值自动调整,即不用重复编写脚本,大大提升了测试效率。
3、也可以使用 Jmeter量进行负载测试,可以对一个测试脚本设置变量,在运行测试时,不同的用户可以根据变量值来生成不同的负载,这有助于控制每个用户的请求,从而模拟真实的用户访问,将
真实的用户场景搬到测试环境。
三、Jmeter变量的优点
1、降低脚本的复杂性,减少开发时间,提高测试效率
jmeter beanshellvars的用法
jmeter beanshellvars的用法在JMeter中,beanshellvars变量用于访问JMeter的变量。可以使用beanshellvars.get()方法来获取变量的值,并且可以使用beanshellvars.put()方法来设置变量的值。
以下是beanshellvars的用法示例:
1.获取变量的值:
String value = beanshellvars.get("variableName");
2.设置变量的值:
beanshellvars.put("variableName", "value");
3.在Beanshell脚本中使用beanshellvars变量:
String value = beanshellvars.get("variableName");
beanshellvars.put("newVariable", value);
使用beanshellvars可以访问JMeter中的变量,这对于执行定制
化的测试任务非常有用。例如,在脚本中根据先前的响应结果来设置
变量,或者将某个变量的值传递给后续的请求。
除了beanshellvars,JMeter还提供了其他类型的变量,例如props、vars和prev。这些变量的主要区别在于其作用域和访问级别。需要根据具体的使用情况选择正确的变量类型。
总之,beanshellvars可以用于获取和设置JMeter变量的值,在
定制化测试任务中非常有用。它是JMeter中一种重要的变量类型,可
以为测试脚本提供更灵活和动态的功能。
jmeter嵌套变量
jmeter嵌套变量
JMeter是一款流行的性能测试工具,在测试过程中,维护变量是非常重要的。而嵌套变量功能则是JMeter中一种非常强大的参数化方式。在本篇文章中,我们将探讨如何在JMeter中使用嵌套变量。
JMeter中的嵌套变量是指在依赖于其他变量的情况下设置变量。例如,当一个变量的值是另一个变量的一部分时,这个变量可以使用之前的
变量。在这种情况下,使用嵌套变量可以大大简化测试用例的编写。
首先,在JMeter中定义一个变量,可以使用${变量名}的格式引用它。例如,假设定义了一个名为“name”的变量,则可以在测试脚本中使用${name}引用它。但是,如果要使用另一个变量的值来更新“name”变量,则需要使用嵌套变量的方式。例如,假设有两个变量
“first_name”和“last_name”,要用它们的值定义“name”变量,则可以使用以下方式:
${__V(first_name)}_${__V(last_name)}
在上述示例中,“__V”指令告诉JMeter要求解释变量后再使用字符
串值。这种方式可以确保变量引用正确解析。
嵌套变量还可以用于访问具有层次结构的数据,例如JSON或XML格式的数据。在这种情况下,可以使用层次结构符号(例如“.”或“[ ]”)在变量之间建立映射关系。例如,假设有以下JSON数据格式:
{
"contact": {
"name": "John"
}
}
要访问“name”字段的值,可以使用以下方式:
${__V()}
在JMeter中使用嵌套变量是一种非常灵活的方法,使测试用例的设计更具可读性、可维护性和可扩展性。相比其他参数化方式,使用嵌套变量可以提高测试用例编写效率,并且更容易维护和理解。
jmeter变量格式
jmeter变量格式
English Answer:
Jmeter Variable Format.
Apache JMeter is a popular open-source testing tool used for performance testing of various applications. One of the key features of JMeter is its ability to work with variables, which allows users to define and use dynamic values during test execution.
Syntax of JMeter Variables.
JMeter variables follow a specific syntax to identify and access their values in the test scripts. The syntax of a JMeter variable is as follows:
${variable_name}。
where:
${} is the variable prefix.
variable_name is the name of the variable.
Types of JMeter Variables.
JMeter supports different types of variables, each serving a specific purpose:
jmeter数字变量
jmeter数字变量
JMeter数字变量的用途及优势
JMeter是一款用于性能测试和负载测试的开源工具,它可以模拟多个用户对目标服务器进行并发请求,以评估系统在不同负载下的性能表现。在JMeter中,数字变量是一种非常有用的功能,它可以帮助测试人员更好地控制测试场景,并提供更加灵活的测试脚本。
数字变量在JMeter中的应用非常广泛。首先,它可以用于设置并发用户数。通过设置一个数字变量,我们可以指定并发用户的数量,从而模拟实际的用户访问行为。这对于测试系统在不同负载下的性能非常重要。其次,数字变量还可以用于设置请求的持续时间。通过设置一个数字变量来控制持续时间,我们可以模拟用户在一定时间内对系统进行访问的情况,从而更全面地评估系统的性能。此外,数字变量还可以用于设置请求的间隔时间,以模拟用户之间的间隔时间,更加真实地模拟用户的访问行为。
数字变量的优势在于它的灵活性和可扩展性。在JMeter中,我们可以很容易地设置和修改数字变量的值,而不需要修改测试脚本的其他部分。这使得我们可以根据测试需求和实际情况来灵活地调整并发用户数、持续时间和间隔时间等参数。同时,数字变量还可以通过函数和逻辑控制语句来进行计算和判断,从而进一步提高测试脚本的灵活性和可扩展性。
JMeter的数字变量是一项非常有用的功能,它可以帮助测试人员更好地控制测试场景,并提供更加灵活和可扩展的测试脚本。通过合理使用数字变量,我们可以更真实地模拟用户的访问行为,从而更全面地评估系统的性能。
jmeter 变量运算
jmeter 变量运算
【1.JMeter简介】
JMeter是一款功能强大的性能测试工具,主要用于测试各种应用程序的性能。它是由Apache基金会开发的,具有开源、易用、可扩展等特点。在JMeter中,变量运算发挥着重要作用,可以帮助我们更加灵活地处理测试数据。
【2.JMeter变量运算概述】
JMeter提供了丰富的变量运算功能,以便在测试过程中对数据进行处理。这些运算包括数学运算、字符串运算、逻辑运算和日期时间运算等。通过使用这些运算,我们可以根据实际需求对测试数据进行筛选、转换和组合,从而更好地分析应用程序的性能。
【3.常用变量运算方法】
3.1 数学运算
JMeter支持基本的数学运算,如加、减、乘、除等。例如,我们可以使用以下表达式计算两个数字的和:
```
${1 + 2}
```
3.2 字符串运算
JMeter支持字符串运算,如拼接、截取、替换等。例如,我们可以使用以下表达式将两个字符串拼接在一起:
```
${String1 + String2}
```
3.3 逻辑运算
JMeter支持逻辑运算,如大于、小于、等于、非等。例如,我们可以使用以下表达式判断一个数字是否大于100:
```
${100 < Number1}
```
3.4 日期时间运算
JMeter支持日期时间运算,如加减时间、比较日期等。例如,我们可以使用以下表达式计算两个日期之间的差值:
```
${Date1 - Date2}
```
【4.实例演示】
假设我们想要测试一个购物网站的性能,可以使用JMeter变量运算来模拟用户购买商品的过程。例如,我们可以使用数学运算计算购买商品的总价,使用字符串运算拼接商品名称和价格,使用逻辑运算判断用户是否满足优惠条件,最后使用日期时间运算记录测试时间。
jmeter配置元件之用户定义变量
jmeter配置元件之用户定义变量
一、什么是用户定义变量
用户定义变量是JMeter中的一种配置元件,用于定义和管理变量。变量是一种存储数据的容器,可以在测试过程中动态地改变变量的值。通过用户定义变量,可以为测试脚本提供灵活的数据输入,实现更加真实的性能测试。
二、用户定义变量的配置
在JMeter中,使用用户定义变量需要进行以下配置:
1. 添加用户定义变量元件:在测试计划中添加一个用户定义变量元件。可以通过右键点击测试计划,选择"添加"->"配置元件"->"用户定义变量"来添加。
2. 定义变量名称和值:在用户定义变量元件中,可以添加多个变量。每个变量都需要定义一个名称和一个初始值。变量名称是一个字符串,用于标识变量;初始值可以是一个字符串、一个数字或一个表达式。
3. 引用变量:在测试脚本中可以通过引用变量来使用变量的值。引用变量的方式是使用${}包围变量名称,例如${variable}。
三、用户定义变量的作用
用户定义变量在性能测试中起着重要的作用,具体表现在以下几个方面:
1. 数据准备:通过用户定义变量,可以为测试脚本提供数据输入。
例如,在模拟用户登录场景中,可以使用用户定义变量来定义用户名和密码,以便在测试过程中动态地改变这些值。
2. 数据驱动:通过改变用户定义变量的值,可以实现数据驱动的测试。例如,可以定义一个变量来表示并发用户数,通过改变这个变量的值,可以模拟不同负载下的系统性能。
3. 动态参数化:通过用户定义变量,可以动态地参数化测试脚本。例如,在接口性能测试中,可以使用用户定义变量来定义接口的请求参数,以便在测试过程中改变参数的值。
jmeter变量
jmeter变量
在使用Jmeter做性能测试时,变量的运用是非常重要的一环,它的运用可以让我们的性能测试更加有效地实现自动化。那么今天我们就来聊一聊 Jmeter量的使用。
变量的定义
变量可以说是一种文本标记,它的存在可以让我们的文本在不同的时间或者地点,被永久性的文本标记起来。
在 Jmeter 中,变量的使用也是一种重要的手段,它可以让我们做出来的测试脚本更加容易复用,减少了手动修改麻烦的工作。另外,变量还可以实现对测试用例的动态修改,从而更加有效地完成持续集成等任务。
Jmeter 中变量的使用
Jmeter 中有三种常用的变量,它们分别是局部变量,全局变量和服务器变量,分别为每个线程、整个运行和服务器端变量。
局部变量的使用
局部变量是指每个线程独立的变量。它的使用主要是为了让不同的线程,进行不同的测试用例。并且它的使用也可以让我们知道,不同的测试用例的表现。
全局变量的使用
全局变量是指整个运行的变量,它主要是用于复用同一套测试脚本。比如,我们可以使用全局变量,在不同的测试环境中,实现同一套测试脚本的复用,优化测试成期。
服务器变量的使用
服务器变量是指,服务器端的变量,它的使用主要是为了让我们知道服务器的运行状态。比如,我们可以使用它来监测服务器的响应时间,进行服务器测试。
总结
Jmeter变量是一种重要的性能测试手段,它可以让我们在不同的测试环境中,有效地实现自动化测试,它的使用可以让我们有效地完成测试任务。而 Jmeter 中局部变量,全局变量和服务器变量,它们也是重要的测试工具,能够为我们提供更加精准的测试结果。
jmeter 循环变量
jmeter 循环变量
摘要:
1.JMeter 简介
2.循环变量的概念
3.JMeter 循环变量的使用
4.JMeter 循环变量的注意事项
正文:
1.JMeter 简介
JMeter 是Apache JMeter 的简称,它是一款开源的Java 应用程序,主要用于测试和测量网络性能。JMeter 能够模拟各种网络负载,如并发访问、HTTP 请求等,从而帮助开发者和测试人员评估应用程序的性能和稳定性。
2.循环变量的概念
在JMeter 中,循环变量是一种可以多次重复使用的测试元素。通过使用循环变量,可以在测试计划中多次调用同一个操作,并在每次调用时传递不同的参数值。这有助于减少测试脚本的复杂性,并提高测试效率。
3.JMeter 循环变量的使用
在JMeter 中,可以使用循环变量来控制测试计划中的迭代次数和参数值。以下是使用循环变量的步骤:
(1)添加循环变量:在JMeter 测试计划中,右键单击“测试计划”> 添加> 变量。在弹出的对话框中,可以设置循环变量的名称、类型和初始值。
(2)使用循环变量:在需要使用循环变量的测试元素中,可以使用“${变量名}”来引用循环变量。例如,在HTTP 请求中,可以将循环变量作为URL 参数传递。
(3)设置循环次数:在循环变量的属性中,可以设置循环次数。根据需要,可以选择固定次数、截止次数或根据其他变量计算次数。
4.JMeter 循环变量的注意事项
在使用JMeter 循环变量时,需要注意以下几点:
(1)合理设置循环次数:根据实际需求设置循环次数,避免过多或过少的迭代次数,以免影响测试效率和结果的准确性。
jmeter数组变量
jmeter数组变量
JMeter是一款功能强大的性能测试工具,可以用于对Web应用程序进行压力测试和性能测试。其中的数组变量是JMeter中的一种重要的数据类型,它为用户提供了一种方便存储和处理多个数值的方法。
数组变量在JMeter中可以用来存储一系列的数值,比如测试数据、请求参数或者响应结果等。通过数组变量,用户可以快速地对这些数据进行管理和操作,从而更好地完成性能测试任务。
在使用JMeter进行性能测试时,数组变量的作用非常显著。通过合理地设计和利用数组变量,用户可以模拟出更加真实和复杂的测试场景,从而更全面地评估被测试应用程序的性能表现。
数组变量在JMeter中的使用方法也相对简单,用户只需要在测试计划中创建一个User Defined Variables元件,并在其中定义好数组变量的名称和数值,即可在测试过程中使用这些数组变量。
除了基本的定义和使用外,JMeter还提供了丰富的函数和控制器来对数组变量进行进一步的操作。比如可以通过函数来生成随机数值、截取字符串或者格式化输出,从而更灵活地利用数组变量进行测试。
在实际的性能测试中,数组变量的应用场景也非常丰富。比如可以利用数组变量来构建多个用户的登录信息,模拟多用户并发登录系统,以测试系统的并发处理能力。
另外,数组变量还可以用来存储多个测试数据,比如多个接口请求的参数值,然后通过循环控制器和HTTP请求来批量发送这些请求,测试系统的稳定性和吞吐量。
除了性能测试外,数组变量在JMeter中还可以用于功能测试、接口测试等各种场景。比如可以通过数组变量来批量传递参数、验证接口返回结果,以实现接口测试的自动化。
jmeter变量作用域
jmeter变量作用域
在JMeter中,变量的作用域是指变量的可见范围和有效期。变量的作用域决定了它在测试计划中的可用性和生命周期。
JMeter中的变量可以分为三种作用域:全局作用域、线程组作用域和请求作用域。
1.全局作用域:
全局作用域的变量适用于整个测试计划,在测试计划的任何地方都可以使用。这些变量可以在用户定义的变量(User Defined Variables)元件中定义,也可以通过在命令行模式下使用-J参数定义。全局作用域的变量对于所有线程和请求都是可见的,其生命周期与测试计划的持续时间一致。可以在其他元件中通过${变量名}的方式引用全局变量。
2.线程组作用域:
线程组作用域的变量适用于特定的线程组,在同一个线程组中的所有线程都可以使用。这些变量可以通过在线程组中的元件中定义,如用户定义的变量(User Defined Variables)、BeanShell PreProcessor、JSR223 PreProcessor等。线程组作用域的变量只在同一个线程组内起作用,不同线程组之间的变量是相互独立的。可以在其他元件中通过${__threadNum}的方式引用线程号,${__jm__ThreadGroupName__}的方式引用线程组名,或者通过${变量名}的方式引用线程组作用域的变量。3.请求作用域:
请求作用域的变量适用于特定的HTTP请求,在每个请求执行期间有效。这些变量可以通过在HTTP请求的元件中定义,如正则表达式提取器
(Regular Expression Extractor)、BeanShell PostProcessor、
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在JMeter 压力测试工具中使用变量
来源:作者:日期:2008-06-02
【聚杰网测试工具】在JMeter 压力测试工具中使用变
量Apache JMeter( /jmeter/ )是来自Apache Jakarta 项目的一个压力测试工具, 目前版本2.0.3, JMeter 支持HTTP, FTP, SOAP/XML-RPC, JDBC 等多种目标的压力测试(参见下图).
关于JMeter 的一般使用在它的官方主页和其它网站可以搜索到不少文章, 但是很少看到如何使用一些动态内容(比如在HTTP 请求中使用变量作为参数)的文章, 最近因为工作需要, 在这方面做了一些摸索, 总结如下.
0.测试项目概述
为了尝试如何使用变量, 我们首先需要建立一个测试项目, 在这里使用了Buffalo (一种AJAX 技术, 详细资料参见/buffalo/index.html ), 或者可以看一下我下载的这个文件(att:在JMeter 压力测试工具中使用变量.Buffalo-info.zip)中的说明和例子. 目前Buffalo 还不是很稳定, 但是建立一个测试环境已经足够了, 而且很方便.
我们建立的这个例子叫做"buffalo-jmeter", 将这个压缩文件(att:在JMeter 压力测试工具中使用变量.buffalo-jmeter.zip)中的buffalo-jmeter.war 文件复制到Tomcat(我用的是Tomcat 5.0.30) 的webapps 目录下, 待Tomcat 自动发布完成之后就可以通过
http://localhost:8080/buffalo-jmeter/ (假设是发布在本地的Tomcat上) 访问测试页面(如下图).
在这个例子中我们假设一个业务: 首先通过getToken() 获得一个凭证, 然后通过这个凭证使用getOrder() 去申请一个订单, 凭证上存在时间记录, 如果超过设定的时间(例子中是10秒)后这个凭证就失效而无法用于申请订单了(在上图中的对话框正说明了这种情形).
1.测试中遇到的问题
首先我们需要知道Buffalo 其实是一种XML-RPC 技术, 所以我们可以使用JMeter 的SOAP/XML-RPC Request 这个Sampler 进行测试, 但是为了方便快捷进行测试, 以下两个问题需要解决:
如果测试服务器发生变化, 如何方便的一次性改变所有请求的URL 地址;
如上一节所述, 10秒钟后凭证会失效, 因此我们在测试getOrder() 的时候不能输入固定的凭证号, 应该每10秒左右获取一个新的凭证, 这样操作的难点在于如何自动让JMeter 得到新获得的凭证号并应用到getOrder() 请求中.
2.静态变量(用户定义的变量)
JMeter 允许对一个测试计划(*.jmx)设置用户定义的变量, 因此我们可以把象URL 等需要统一修改的值作为变量定义起来(如下图);
变量在使用时可以使用${变量名} 的方式引用, 如下图:
3.从Response 中获得数据
可以使用JMeter 提供的后置处理器(Post Processers) --> 正则表达式提取器(Regular Expression Extractor) 从返回的结果中取得数据, 在确定getToken() 请求的返
回值是类似下列的XML 之后,
xmlns:burlap="/burlap/">
我们可以使用正则表达式"
首先我们可以使用Javascript 正则表达式测试页面来测试一下这个正则表达式是如何被执行的(如下图):
可以看到执行结果中, 我们需要的凭证号处于"array[1]"的位置.
这样使用"正则表达式提取器"(如下图), 注意图中的"引用名称"就可以认为是存放提取出来的数据的变量名:
提取出来的变量可以这样被引用(如下图), 其中"_g1"代表"group number"(参见JMeter 的联机帮助: ... [refname]_g# ... ... and # is the group number, where group 0 is the entire match, group 1 is the match from the first set of parentheses, etc.)
4.测试结果分析
我们使用3个线程同时对测试项目进行压力测试(如下图)
通过对结果的分析我们看到了提取出来的变量确实在起作用, 而且, 这个变量是每个线程各自独立的(如下图)
后记
对原Buffalo 代码的修改:
原来net.buffalo.server.BuffaloServiceServlet 中在输出结果xml 中没有使用response.setContentType("text/xml"), 这导致返回的xml 没有正确的ContentType, 进而使JMeter 无法获得Response, 在代码中加上这句语句才能正确使用JMeter 进行测
试;
下载的文件att:在JMeter 压力测试工具中使用变量.buffalo-jmeter.zip 中的net.buffalo.server.BuffaloServiceServlet 是已经修改过这个问题的, 因此可以直接用于测试;
文件att:在JMeter 压力测试工具中使用变量.buffalo-jmeter.zip 中还包括了上述的JMeter 测试计划(Buffalo-test.jmx).