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

一、思路

测试计划(Test Plan)的创建:在JMeter中,首先要创建一个测试计划,这个计划包含了所有的测试元素和它们的执行顺序。

配置测试元素:这包括添加和配置线程组(模拟用户),采样器(例如HTTP请求),逻辑控制器,定时器,监听器(用于查看结果)等。

参数化和变量:为了重复利用脚本和模拟不同的用户行为,可以使用参数化和变量。例如,可以使用CSV数据文件配置器来读取测试数据。

脚本增强:可以使用JSR223或BeanShell脚本来自定义测试逻辑,增强脚本的灵活性和功能。

执行测试:配置好脚本后,可以本地运行JMeter进行测试,也可以通过命令行的方式在服务器上执行。

监控和分析结果:测试执行时,JMeter会收集数据并在监听器中显示结果。测试结束后,可以分析这些数据来评估系统的性能。

自动化执行:为了实现自动化,可以将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工具会更加高效和方便。

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的smtplib和email模块来编写发送邮件的函数,并在适当的时候调用它。

· 日志记录(可选):若想在脚本中添加日志记录功能,以便记录测试的执行情况和任何出现的错误。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 思路

设计测试计划:根据需要压测的服务,设计测试计划,确定分组方式和测试目标。

创建JMeter脚本:为每个服务分组创建单独的JMeter脚本(.jmx文件),或者在一个脚本中创建多个线程组,每个线程组代表一个服务分组。

编写自动化脚本:使用Python或Bash编写自动化脚本,用于触发JMeter测试、收集结果和生成报告。

执行测试:运行自动化脚本,对每个服务分组进行压测。

分析结果:测试完成后,分析每个服务分组的性能数据。

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 "所有分组测试完成"

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:【文末自行领取】

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

JMeter是一个开源的Java应用程序,用于进行性能测试和负载测试。它可以模拟多种协议,包括HTTP、HTTPS、FTP、JDBC等,并且可以对服务器、网络和对象进行压力测试。 JMeter自动化测试压测主要包括以下几个步骤: 1. 安装和配置:首先需要下载并安装JMeter,并确保Java环境已正确配置。然后,打开JMeter并创建一个新的测试计划。 2. 添加线程组:在测试计划中,添加一个线程组来模拟并发用户。可以设置线程数、循环次数、启动延迟等参数。 3. 添加Sampler:Sampler用于发送请求并获取服务器的响应。可以选择不同的Sampler来模拟不同的协议和请求类型,如HTTP请求、FTP请求等。 4. 添加断言:断言用于验证服务器响应的正确性。可以添加各种断言来检查响应的内容、状态码、响应时间等。 5. 添加监听器:监听器用于收集和分析测试结果。可以选择不同的监听器来查看请求的响应时间、吞吐量、错误率等指标,并生成报告。 6. 配置参数化:可以使用CSV文件或者JMeter提供的函数来对请求参数进行参数化,以模拟不同的用户行为。 7. 配置定时器:定时器用于控制请求之间的时间间隔,可以模拟用户的不同访问频率。 8. 运行测试:配置完成后,可以点击运行按钮开始执行测试。JMeter会模拟并发用户发送请求,并记录响应时间、错误率等指标。 9. 分析结果:测试完成后,可以使用监听器生成测试报告,并对结果进行分析和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值