浅谈取样器之OS进程取样器
JMeter 的 OS 进程取样器(OSProcess Sampler)允许用户在 JMeter 测试计划中直接执行操作系统命令或脚本。这一功能对于需要集成系统级操作到性能测试场景中尤为有用,比如运行数据库备份脚本、调用系统维护命令或执行自定义编写的脚本(如 Python、Shell 等)。通过这种方式,你可以扩展 JMeter 的能力,使之不仅限于网络服务的负载测试,还能涵盖更广泛的系统层面交互。
配置步骤
- 添加 OS 进程取样器
○ 打开 JMeter,创建或打开一个测试计划。
○ 在测试计划的相应位置(如线程组内),右键选择“添加” > “取样器” > “OS 进程取样器”。 - 设置命令和参数
○ Command:在此字段输入你想要执行的命令或脚本的完整路径。例如,在 macOS/Linux 系统上执行 Python 脚本,路径可能类似于 /User/xx/Desktop/my_script.py;在 Windows 上,则可能是 D:\Scripts\my_script.bat。
○ Command parameters:如果命令需要额外的参数,可以在这一栏中提供。参数应按照命令行格式输入,多个参数之间使用空格分隔。例如,如果你的 Python 脚本需要参数,可以写成 param1 value1 param2 value2。 - 环境变量与工作目录
○ JMeter 允许你设置环境变量,这些变量对执行的命令或脚本可用。使用“名称”和“值”字段来定义它们。
○ 工作目录:指定执行命令时的工作目录,这在脚本依赖于相对路径资源时尤为重要。 - 处理输出
○ OS 进程取样器允许你控制命令的输出处理方式,包括标准输出(stdout)和标准错误(stderr)。你可以选择将其存储为变量、写入文件或忽略。 - 超时设置
○ 为了防止命令执行无限期挂起,可以设置超时时间(Timeout),单位为毫秒。
假设你有一个简单的 Python 脚本(my_script.py),用于模拟数据处理任务,你可以在 JMeter 中这样配置 OS 进程取样器以执行它:
● Command: /usr/bin/python3 /path/to/your/my_script.py
● Command parameters: 如果脚本接受参数,如 -input data.txt -output result.csv
● 设置适当的环境变量和工作目录(如果需要)。
● 可选地,设置超时,比如 60000 毫秒,以避免长时间无响应。
应用实例
情况1:OS进程取样器无参数
首先我们使用Python编写一段py脚本,内容如下
name="hello world"
print (name)
然后我们在我们的pc上新建一个test.bat的文件,文件里面的内容如下:
python d:\OSprocess.py
我们编写如下脚本
线程组:保持默认
OS进程取样器:命令中设置C:\Users\27988\Desktop\test.bat
运行脚本,查看结果树,可以看到结果如下
查看OS进程取样器中响应数据中的Response Body
D:\apache-jmeter-5.1.1\bin>python C:\Users\27988\PycharmProjects\pythonProject\OSprocess.py
hello world
情况2:OS进程取样器传参数
首先我们使用Python编写一段py脚本,内容如下
import sys
print (sys.argv[0])
print (sys.argv[1:])for i in sys.argv:print(i)
然后我们在我们的pc上新建一个test.bat的文件,文件里面的内容如下:
python d:\OSprocess.py %1 %2 %3
我们编写如下脚本
线程组:保持默认
OS进程取样器:命令中设置C:\Users\27988\Desktop\test.bat
运行脚本,查看结果树,可以看到结果如下
查看OS进程取样器中响应数据中的Response Body
D:\apache-jmeter-5.1.1\bin>python C:\Users\27988\PycharmProjects\pythonProject\OSprocess.py test1 test2 test3
C:\Users\27988\PycharmProjects\pythonProject\OSprocess.py
[‘test1’, ‘test2’, ‘test3’]
C:\Users\27988\PycharmProjects\pythonProject\OSprocess.py
test1
test2
test3
情况3:OS进程取样器standard output
在上述情况2的情况下,标准流中的Standard output中输入D:\te1.txt
运行脚本,打开te1.txt文件,查看里面内容如下
D:\apache-jmeter-5.1.1\bin>python C:\Users\27988\PycharmProjects\pythonProject\OSprocess.py test1 test2 test3
C:\Users\27988\PycharmProjects\pythonProject\OSprocess.py
[‘test1’, ‘test2’, ‘test3’]
C:\Users\27988\PycharmProjects\pythonProject\OSprocess.py
test1
test2
test3
情况4:OS进程取样器返回码检查
在上述情况3的情况下,勾选返回码检查,预期返回代码设置为1
运行脚本,查看结果树
取样器结果里面能够看到如下内容
Response message: Unexpected return code. Expected [1]. Actual [0].
情况5:OS进程取样器超时
在上述情况4的情况下,设置Timeout(ms)为1
运行脚本,查看结果树
取样器结果里面能够看到如下内容
Response code: 500
Response message: System Sampler interrupted whilst executing system call: java.lang.InterruptedException: Process timeout out after 1 milliseconds
注意事项
● 确保所使用的命令或脚本在执行 JMeter 的用户权限下可执行。
● 跨平台兼容性:命令路径和脚本格式需要根据操作系统进行调整。
● 安全性:执行系统命令时要格外小心,确保不会引入安全风险或意外破坏系统。
总结
通过上述步骤,你可以有效地利用 JMeter 的 OS 进程取样器来集成操作系统级别的操作到性能测试中,从而实现更复杂的测试场景。