Bootstrap

【Jmeter相关】

Jmeter 可以作为接口测试问题,也会涉及到性能相关的问题

一、JMeter中用户定义的变量(User Defined Variables)和用户参 数(User Parameters)的区别是什么?

在JMeter中都是用于定义和存储测试数据的方法,但它们有一些区别:

1. 定义方式:用户定义的变量是使用“User Defined Variables”元素在测试计划中直接定义的,
而用户参数是在测试计划之外通过命令行或者用户提供的输入文件来定义的。

2. 存储位置:用户定义的变量是在JMeter的内存中存储的,而用户参数是在JMeter的启动配置文件
中存储的。

3. 使用方式:用户定义的变量可以在测试计划中的任何地方使用,而用户参数只能被指定的线程组使
用。

1、 用户定义的变量

一、用户定义的变量 (User Defined Variables)
用户定义的变量是一个简单的变量存储器,允许你在测试计划中定义和使用自定义变量。这些变量可以在任何地方使用,包括在请求中、断言中、后置处理器中等。

用户定义的变量的主要用途是:

1、存储常量值:例如,你可以定义一个变量来存储服务器的 URL 或端口号。
2、提供输入数据:例如,如果你需要在多个请求中使用同一个用户名和密码,可以在用户定义的变量中存储这些值并在需要时引用它们。


2、用户参数 

二、用户参数 (User Parameters)
用户参数是一个更高级的组件,专门用于生成和管理参数化数据。它可以从 CSV 文件、数据库、或者其他数据源中读取数据,并将其分配给变量。

用户参数的主要用途是:

1、参数化测试:例如,如果你需要对同一个 API 端点进行多次测试,每次使用不同的参数(如用户名、密码、搜索关键字等),可以使用用户参数来生成这些参数。
2、数据驱动测试:例如,如果你有一个 CSV 文件包含了大量的测试数据,可以使用用户参数将这些数据读入到测试计划中,并在请求中使用。

总的来说,用户定义的变量适合存储少量的常量值或输入数据,而用户参数适合处理大量的参数化数据,特别是在需要从外部数据源读取数据时。

二、在编写脚本的过程中你使用过哪些前置处理器和后置处理器?请介 绍它们的使用场景。

后置:

1、JSON提取器(JSON Extractor):这是用于处理JSON格式数据的后置处理器。它的使用场景是
在请求后获取JSON响应数据,通过JSON路径表达式匹配出需要的字段,并将这些字段存储为
JMeter变量。例如,我可以使用JSON提取器从API响应中提取特定的数据,如用户信息、订单详
情等。

2.响应断言(Response Assertion):这是用于验证响应是否符合预期的后置处理器。它的使用场
景是在请求后获取响应数据,通过断言检查响应是否满足特定的条件。例如,我可以使用响应断言
检查响应状态码是否为200、响应时间是否在合理范围内等。

前置:

3、 用户定义的变量(User Defined Variables):这是用于定义全局变量的前置处理器。它的使
用场景是在测试计划开始之前定义一些常用的变量,这些变量可以在测试计划中的任何地方使用。
例如,我可以定义一些常量,如API的URL、端口号等,以便在后续的请求中使用。

1、前置处理器

与请求有关

前置处理器

1、HTTP URL Re-writing Modifier: 用于修改 HTTP 请求的 URL。
例如,如果你需要在不同的环境中运行测试,可以使用这个前置处理器来更改 URL 的主机名或路径。

2、HTTP Header Manager: 用于添加、修改或删除 HTTP 请求的头部信息。
例如,你可以添加一个特定的用户代理字符串或授权令牌。

3、HTTP Authorization Manager: 用于管理 HTTP 认证。
例如,如果你的应用程序需要基本认证(Basic Authentication),你可以使用这个前置处理器来设置用户名和密码。

4、CSV Data Set Config: 用于从 CSV 文件中读取数据并将其分配给变量。
例如,你可以使用这个前置处理器来读取一组用户名和密码,然后在登录测试中使用这些变量。

2、后置处理器 

与响应有关

后置处理器

1、JSON Extractor: 用于从 JSON 响应中提取特定的值并将其存储为变量。
例如,如果你需要在后续请求中使用某个 API 响应中的 ID,你可以使用这个后置处理器来提取该 ID。

2、Regular Expression Extractor: 用于从文本响应中提取特定的模式并将其存储为变量。
例如,你可以使用这个后置处理器来从 HTML 响应中提取某个标签的内容。

3、Response Data: 用于查看和分析 HTTP 响应的内容。
例如,你可以使用这个后置处理器来验证响应是否包含预期的数据。

4、Debug PostProcessor: 用于在控制台或日志文件中打印变量的值。
例如,如果你遇到问题并需要调试脚本,可以使用这个后置处理器来查看变量的值。

 三、Jmeter分布怎么进行设置?

简洁版:

JMeter 的分布式测试允许你在多台计算机上同时运行测试,提高测试的负载能力和吞吐量。以下是设置 JMeter 分布式测试的步骤:

1. 准备环境
首先,确保所有参与分布式测试的计算机都安装了相同版本的 JMeter,并且能够互相通信。

2. 在远程计算机上启动 JMeter Server
在每台远程计算机上,打开命令行或终端,并执行【jmeter-server】命令来启动 JMeter Server:
这将启动 JMeter Server,并使其等待控制器的连接。

3. 在控制器上配置远程计算机
在主机(即运行 JMeter GUI 的计算机)上,打开 JMeter 并创建或编辑一个测试计划。

在测试计划中,添加一个 Remote Servers 配置元件(可以在 Test Plan -> Add -> Config Element -> Remote Servers 中找到)。在这个配置元件中,输入所有参与分布式测试的远程计算机的 IP 地址或主机名,使用逗号分隔。

4. 运行测试
在主机上,选择 Run -> Remote Start 来开始分布式测试。JMeter 将连接到所有指定的远程服务器,并在这些服务器上执行测试。

5. 查看结果
测试完成后,你可以在主机上查看结果。由于所有的远程服务器都将结果发送回主机,所以你将看到一个综合的结果。

请注意,为了使分布式测试正常工作,所有的远程服务器必须能够接收来自主机的连接,并且所有的服务器都应该使用相同版本的 JMeter。同时,确保网络连接稳定,以避免测试中断或数据丢失。

详尽版:

一、操作步骤:

1. 确保JMeter已经安装,并且所有需要参与测试的机器都在同一局域网内,防火墙也开放了相应的
端口。

2. 在控制机(Master)上,安装并配置好JDK和JMeter,并设置好环境变量。

3. 在控制机(Master)上打开JMeter的安装目录,找到“bin”文件夹,找到jmeter.properties配
置文件,并打开。

4. 在jmeter.properties文件中,找到“remote_hosts=”这一行,然后添加需要参与测试的机器的

IP地址或者主机名,多个地址之间用逗号隔开。

5. 保存并关闭jmeter.properties文件。

6. 在控制机(Master)上打开JMeter的安装目录,找到“bin”文件夹,运行jmeter-server.bat文
件,启动JMeter服务器。

7. 在控制机(Master)上打开JMeter图形界面,点击“文件”菜单,选择“远程启动所有”。

8. 在需要参与测试的机器上打开JMeter的安装目录,找到“bin”文件夹,运行jmeter-server.bat

文件,启动JMeter服务器。

9. 在控制机(Master)上点击“查看”菜单,选择“监听器”,添加一个监听器来显示测试结果。

10. 在控制机(Master)上点击“开始”按钮,开始执行测试。

以上是Jmeter分布式设置的基本步骤,具体设置可能会因环境和需求的不同而有所差异。在进行分布式
测试时,需要注意以下几点:

1. 确保所有参与测试的机器在同一局域网内,防火墙开放了相应的端口。

2. 确保所有参与测试的机器上都已经安装了相同版本的JMeter和JDK,并且已经设置好环境变量。

3. 在启动JMeter服务器时,需要注意启动顺序和控制机(Master)以及被控机(Slave)的启动方
式。

4. 在执行测试时,需要注意监听器的设置以及测试结果的查看和解析。

四、Jmeter怎么设置接口关联

在Jmeter中设置接口关联主要涉及到后置处理器提取器,json提取器、正则提取器。具体步骤如下:

以下是一个例子:

1. 打开Jmeter,新建一个测试计划,在测试计划里新建一个线程组。

2. 在线程组中添加一个登录的HTTP请求。

3. 右键单击HTTP请求,选择添加-后置处理器-json提取器。

4. 查看登录返回的结果,我们发现需要提取的数据,比如token等。

5. 在json提取器中,设置需要提取的数据,比如:$.token。

6. 配置提取器以将提取的数据 $.token 存储为JMeter变量,以便在后续的请求中使用:{{变量名}}

五、Jmeter怎么跨线程组设置接口关联

1、使用全局变量:在测试计划中定义一个全局变量,然后在需要使用该变量的线程组中引用该变量。
这样,即使跨越不同的线程组,也可以共享该变量的值。

2. 使用JMeter内置函数:JMeter提供了一些内置函数,可以在不同线程组之间传递数据。例如,可
以使用__setProperty函数设置一个属性,然后在其他线程组中使用__P函数引用该属性。

3. 使用外部文件:将需要跨线程组共享的数据存储在外部文件中,然后在需要使用该数据的线程组中
读取该文件。可以使用JMeter提供的文件操作函数来实现文件的读写操作。

六、Jmeter怎么设置定时压测?

可以结合Jenkins去进行实现,也可以。Jmeter设置定时压测的步骤如下:

1. 首先,你需要创建一个Jmeter测试计划,并添加所需的线程组和HTTP请求。

2. 在测试计划中,右键单击“线程组”,选择“添加” -> “监听器” -> “汇总报告”。这将添加一个汇
总报告,用于显示测试结果和性能数据。

3. 右键单击“线程组”,选择“添加” -> “定时器” -> “Constant Timer”。这将添加一个常数定时
器,用于控制每个请求之间的延迟时间。

4. 在常数定时器中,设置所需的延迟时间(以毫秒为单位)。例如,如果你希望每个请求之间的延迟
时间为1秒,则将延迟时间设置为1000毫秒。

5. 右键单击“线程组”,选择“添加” -> “调度器”。这将添加一个调度器,用于设置测试的执行时
间。

6. 在调度器中,设置所需的执行时间。例如,如果你希望测试在1小时内完成,则将执行时间设置为

3600秒。

7. 最后,保存并关闭测试计划。在Jmeter的命令行界面中,运行测试计划并指定所需的参数。例
如,你可以使用以下命令行指令来运行测试计划:

jmeter -n -t your_test_plan.jmx -l results.jtl

其中,“-n”表示以非GUI模式运行测试,“-t”指定测试计划的路径,“-l”指定结果文件的路径。
这样,Jmeter将按照指定的延迟时间和执行时间进行定时压测,并生成相应的测试结果和性能数据。

;