Jmeter实现自动化压测(思路&样例)

1122 篇文章 11 订阅
406 篇文章 7 订阅

一、思路

  1. 测试计划(Test Plan)的创建:在JMeter中,首先要创建一个测试计划,这个计划包含了所有的测试元素和它们的执行顺序。
  2. 配置测试元素:这包括添加和配置线程组(模拟用户),采样器(例如HTTP请求),逻辑控制器,定时器,监听器(用于查看结果)等。
  3. 参数化和变量:为了重复利用脚本和模拟不同的用户行为,可以使用参数化和变量。例如,可以使用CSV数据文件配置器来读取测试数据。
  4. 脚本增强:可以使用JSR223或BeanShell脚本来自定义测试逻辑,增强脚本的灵活性和功能。
  5. 执行测试:配置好脚本后,可以本地运行JMeter进行测试,也可以通过命令行的方式在服务器上执行。
  6. 监控和分析结果:测试执行时,JMeter会收集数据并在监听器中显示结果。测试结束后,可以分析这些数据来评估系统的性能。
  7. 自动化执行:为了实现自动化,可以将JMeter脚本与持续集成工具(如Jenkins)结合使用,定时执行或者触发执行。

二、样例

2.1 方法一(手动管理)

1. 编写JMeter脚本:首先,您需要创建一个JMeter脚本,包括线程组、采样器、监听器等元素,并配置好所有的测试参数。

2. 命令行执行:JMeter可以通过命令行的方式执行。可以保存脚本为`.jmx`文件,然后在命令行中运行以下命令来执行测试:

# `-n`表示非GUI模式,`-t`指定测试计划的路径,`-l`指定JMeter保存测试结果的CSV文件的路径。
jmeter -n -t [path_to_jmx_file] -l [path_to_output_file]

3. 定时任务 :如果希望定期执行测试,可以使用操作系统的定时任务功能。例如,在Windows中,可以使用“任务计划程序”来设置定时执行JMeter脚本。在Linux中,可以使用`cron`来实现定时任务。

4. 结果分析:测试执行后,需要手动分析结果。JMeter会生成一个CSV格式的结果文件,可以使用Excel、文本编辑器或专业的数据分析工具来查看和分析这些数据。

5. 报告生成:JMeter还提供了生成HTML报告的功能。可以使用以下命令来生成报告:

#`-g`指定了JMeter结果文件的路径,`-o`指定了生成HTML报告的文件夹路径。
jmeter -g [path_to_output_file] -o [path_to_report_folder]

6. 邮件通知:如果需要邮件通知测试结果,可能需要编写一个简单的脚本来读取JMeter的结果文件,并将结果通过邮件发送。这可以通过使用SMTP服务器和邮件客户端的API来实现。

7. 自动化测试流程:可以编写一个自动化脚本,该脚本按顺序执行上述步骤,包括启动JMeter测试、分析结果、生成报告和发送邮件通知。

通过这种方式,即使没有CI工具,也可以实现JMeter的自动化压测。不过,这种方法需要手动管理测试的触发、结果分析和报告分发,因此在大型或频繁的测试场景中,使用CI工具会更加高效和方便。

现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:691998057【暗号:csdn999】

2.2 方法二(编写脚本实现自动化管理)

python实现

  • 安装Python:确保系统上安装了Python
  • 安装JMeter:确保JMeter已安装在系统上,并且可以在命令行中运行。
  • 编写Python脚本
#1、导入所需的模块,例如subprocess来执行命令行命令,time来处理时间相关的操作。
#2、定义JMeter脚本的路径、输出结果的路径和HTML报告的路径
#3、编写函数来执行JMeter测试
def run_jmeter_test(jmx_file, output_file):
    jmeter_command = f"jmeter -n -t {jmx_file} -l {output_file}"
    subprocess.run(jmeter_command, shell=True)
#4、编写函数来生成HTML报告
def generate_html_report(output_file, report_folder):
    report_command = f"jmeter -g {output_file} -o {report_folder}"
    subprocess.run(report_command, shell=True)
#5、编写一个主函数来调用上述函数,并设置定时任务或触发条件
def main():
    jmx_file = "path/to/your/script.jmx"
    output_file = "path/to/output/results.jtl"
    report_folder = "path/to/output/report"
    
    # 定时执行或根据条件触发
    while True:
        current_time = time.localtime()
        if current_time.tm_hour == 0 and current_time.tm_min == 0:  # 每天午夜执行
            run_jmeter_test(jmx_file, output_file)
            generate_html_report(output_file, report_folder)
        time.sleep(60)  # 每分钟检查一次时间
#6、在脚本的最后调用主函数
if __name__ == "__main__":
    main()
  • 运行脚本:保存脚本并运行它。脚本将根据设置的条件自动执行JMeter测试,并生成HTML报告。
  • 邮件通知(可选):如果需要邮件通知功能,可以使用Python的smtplibemail模块来编写发送邮件的函数,并在适当的时候调用它。
  • 日志记录(可选):若想在脚本中添加日志记录功能,以便记录测试的执行情况和任何出现的错误。Python的logging模块可以实现。

bash脚本

#首先,创建一个名为run_jmeter_test.sh的新文件,并在其中写入以下Bash脚本
#!/bin/bash

# JMeter脚本和输出文件路径
jmx_file="path/to/your/script.jmx"
jtl_file="path/to/output/results.jtl"
html_report_dir="path/to/output/report"

# 当前时间
now=$(date +%Y-%m-%d_%H-%M-%S)

# 执行JMeter测试
echo "开始执行测试: $now"
jmeter -n -t "$jmx_file" -l "$jtl_file"

# 生成HTML报告
echo "生成HTML报告"
jmeter -g "$jtl_file" -o "$html_report_dir"

# 邮件发送相关配置
smtp_server="smtp.example.com"
sender_email="sender@example.com"
receiver_email="receiver@example.com"
subject="JMeter 测试报告 $now"
body="请查看附件中的JMeter测试报告。"

# 创建邮件内容
message=$(cat <<EOF
Subject: $subject
From: $sender_email
To: $receiver_email

$body
EOF
)

# 添加HTML报告作为附件
message=$(cat <<EOF$message
Content-Type: text/html; name="index.html"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="index.html"

$(base64 "$html_report_dir/index.html")
EOF
)

# 发送邮件
echo "发送邮件"
echo "$message" | sendmail -t

echo "测试完成"

在运行此脚本之前,需替换脚本中的路径、邮件服务器配置、发件人、收件人等信息为实际的值。

这个脚本做了以下几件事情:

  1. 使用jmeter命令行进行测试。
  2. 使用jmeter命令生成HTML报告。
  3. 设置邮件内容,包括主题、发件人、收件人和正文。
  4. 将HTML报告作为附件,使用base64编码附加到邮件中。
  5. 使用sendmail命令发送邮件。

要运行这个脚本,还需要给它执行权限,然后可以在命令行中执行它:

chmod +x run_jmeter_test.sh
./run_jmeter_test.sh

三、自动化脚本对服务进行分组压测

3.1 思路

  1. 设计测试计划:根据需要压测的服务,设计测试计划,确定分组方式和测试目标。
  2. 创建JMeter脚本:为每个服务分组创建单独的JMeter脚本(.jmx文件),或者在一个脚本中创建多个线程组,每个线程组代表一个服务分组。
  3. 编写自动化脚本:使用Python或Bash编写自动化脚本,用于触发JMeter测试、收集结果和生成报告。
  4. 执行测试:运行自动化脚本,对每个服务分组进行压测。
  5. 分析结果:测试完成后,分析每个服务分组的性能数据。

3.2 脚本样例

注:
1、在运行这些脚本之前,请确保已经替换了脚本中的路径为实际的JMeter脚本路径、输出文件路径和报告目录。
2、要运行Python脚本,执行python script.py(其中script.py是Python脚本文件名)。
要运行Bash脚本,执行bash script.sh(其中script.sh是Bash脚本文件名)。
3、这些脚本将依次执行每个服务分组的JMeter测试,生成HTML报告,并最终输出一个简单的完成消息。

Python脚本示例

import subprocess
import time

# JMeter脚本的路径和输出文件路径
jmx_files = {
    'group1': 'path/to/script1.jmx',
    'group2': 'path/to/script2.jmx'
}
output_files = {
    'group1': 'path/to/output1.jtl',
    'group2': 'path/to/output2.jtl'
}
html_report_dirs = {
    'group1': 'path/to/report1',
    'group2': 'path/to/report2'
}

# 执行JMeter测试
for group, jmx_file in jmx_files.items():
    output_file = output_files[group]
    html_report_dir = html_report_dirs[group]
    print(f"开始执行{group}的测试")
    subprocess.run(['jmeter', '-n', '-t', jmx_file, '-l', output_file])
    print("生成HTML报告")
    subprocess.run(['jmeter', '-g', output_file, '-o', html_report_dir])
    print(f"{group}测试完成")

# 等待所有测试完成
time.sleep(5)

# 分析结果(这里只是简单打印完成,实际应用中可能需要更复杂的分析逻辑)
print("所有分组测试完成")

Bash脚本示例

#!/bin/bash

# JMeter脚本的路径和输出文件路径
declare -A jmx_files
jmx_files[group1]="path/to/script1.jmx"
jmx_files[group2]="path/to/script2.jmx"

declare -A output_files
output_files[group1]="path/to/output1.jtl"
output_files[group2]="path/to/output2.jtl"

declare -A html_report_dirs
html_report_dirs[group1]="path/to/report1"
html_report_dirs[group2]="path/to/report2"

# 执行JMeter测试
for group in "${!jmx_files[@]}"; do
    jmx_file="${jmx_files[$group]}"
    output_file="${output_files[$group]}"
    html_report_dir="${html_report_dirs[$group]}"
    echo "开始执行${group}的测试"
    jmeter -n -t "$jmx_file" -l "$output_file"
    echo "生成HTML报告"
    jmeter -g "$output_file" -o "$html_report_dir"
    echo "${group}测试完成"
done

# 等待所有测试完成
sleep 5

# 分析结果(这里只是简单打印完成,实际应用中可能需要更复杂的分析逻辑)
echo "所有分组测试完成"

下面是配套资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

最后: 可以在公众号:程序员小濠 ! 免费领取一份216页软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。

如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值