草庐IT

基于 Jmeter+Shell+Jenkins 集成实现性能自动化测试

you的日常 2023-10-06 原文

JMeter 是一款开源桌面应用软件,可用来模拟用户负载来完成性能测试工作,因其开源性和扩展性,JMeter 已经是使用率最高的性能测试工具之一。

因压测过程中 Windows 服务器的局限性,一般企业都会选择 Linux 系统去进行压测,然后在 Linux 系统中 JMeter 没有友好的 GUI 界面进行编辑脚本,只能通过命令操作 JMeter,这样有效地节省了 JMeter 对服务器资源的占用,但是使用命令的频繁性和重复性,大量地增加了性能测试工程师的压力,在一些周期比较长的性能测试工作中,单独地使用命令进行压测是对测试工程师的一个很大的挑战,开发一个性能平台需要浪费大量的人力去维护此平台且需要代码能力很强的测试工程师去进行开展!然而不需要使用重复的脚本命令也不需要开发一个性能测试平台,也能实现一个简单的性能平台,该如何做呢?

JMeter 在 Linux 系统上进行压测

首先关于 JMeter 如何在 Linux 环境下如何安装我就不一一介绍了,相信这种类型文章在网上还是有很多的。下面介绍一下如何在 Linux 环境下进行压测。

1. 在本机上利用 GUI 模式将脚本编辑完成

图 1-1

2. 利用 FTP 等工具将脚本上传到服务器上

图 1-2

3. 使用命令在 Linux 服务下压测并生成 HTML 报告

安装好 JMeter 后进入 JMeter 的 bin 目录下,执行以下命令:

 sh jmeter.sh -nt /root/.jenkins/workspace/coupontest/coupon.jmx  -l /root/.jenkins/workspace/coupontest/result1.jtl -e -o /root/.jenkins/workspace/coupontest/test

图 1-3

命令解析:

  • -h:帮助
  • -n:非 GUI 模式
  • -t:指定运行的 JMeter 测试脚本文件
  • -l:记录结果的文件,每次运行之前,要确保之前没有运行过,即 xxx.jtl 不存在,不然报错
  • -e:在脚本运行结束后生成的 HTML 报告
  • -o:用于存放 HTML 报告的目录(目录要为空,不然报错)
  • sh jmeter.sh:Linux 环境下启动 JMeter
  • /root/.jenkins/workspace/coupontest/coupon.jmx:脚本存放的路径及名称
  • /root/.jenkins/workspace/coupontest/result1.jtl:生成 JTL 文件的路径及名称
  • /root/.jenkins/workspace/coupontest/test:生成 HTML 报告的路径及名称

通过 Shell 脚本运行 JMeter

通过执行脚本我们可以看出非 GUI 模式下运行 JMeter 操作比在 GUI 中复杂的多,因 JTL 文件不能覆盖且 HTML 报告的目录只能为空的特性,所以每次执行测试的时候都需要修改一下目录且名称,为避免这样重复性的操作,可以通过 Shell 脚本的方式来启动 JMeter。

利用 vim 命令新建脚本:vim startjmeter.sh

编写以下脚本:

# 生成当前日期,jtl 和 html 报告以时间戳的形式,避免重复修改
date=$(date +%Y%m%d%H%M)
echo 当前时间: $date

#配置脚本名称和 html 报告路径
jmxPath=/root/.jenkins/workspace/coupontest/coupon.jmx  
ReportPath=/data2/report/"$date"
jtlpath=/data2/jtl/"$date"

#创建日期文件夹
mkdir "$jtlpath"
mkdir "$ReportPath"
echo 执行 Jmeter

#并入 jmeter 的 bin 目录
cd /data/jmeter/apache-jmeter-5.1.1/bin
#执行脚本
sh jmeter.sh -nt "$jmxPath" -l "$jtlpath"/result.jtl  -e -o "$ReportPath"
#打印脚本的内容 
echo sh jmeter.sh -nt "$jmxPath" -l "$jtlpath"/result.jtl  -e -o "$ReportPath"

编写脚本以后将 startjmeter.sh 脚本设计可编辑权限,通过执行命令:

有关基于 Jmeter+Shell+Jenkins 集成实现性能自动化测试的更多相关文章

  1. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  2. ruby-on-rails - 如何在 ruby​​ 交互式 shell 中有多行? - 2

    这可能是个愚蠢的问题。但是,我是一个新手......你怎么能在交互式ruby​​shell中有多行代码?好像你只能有一条长线。按回车键运行代码。无论如何我可以在不运行代码的情况下跳到下一行吗?再次抱歉,如果这是一个愚蠢的问题。谢谢。 最佳答案 这是一个例子:2.1.2:053>a=1=>12.1.2:054>b=2=>22.1.2:055>a+b=>32.1.2:056>ifa>b#Thecode‘if..."startsthedefinitionoftheconditionalstatement.2.1.2:057?>puts"f

  3. ruby - RuntimeError(自动加载常量 Apps 多线程时检测到循环依赖 - 2

    我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("

  4. ruby - 如何根据特征实现 FactoryGirl 的条件行为 - 2

    我有一个用户工厂。我希望默认情况下确认用户。但是鉴于unconfirmed特征,我不希望它们被确认。虽然我有一个基于实现细节而不是抽象的工作实现,但我想知道如何正确地做到这一点。factory:userdoafter(:create)do|user,evaluator|#unwantedimplementationdetailshereunlessFactoryGirl.factories[:user].defined_traits.map(&:name).include?(:unconfirmed)user.confirm!endendtrait:unconfirmeddoenden

  5. ruby-on-rails - 如何使辅助方法在 Rails 集成测试中可用? - 2

    我在app/helpers/sessions_helper.rb中有一个帮助程序文件,其中包含一个方法my_preference,它返回当前登录用户的首选项。我想在集成测试中访问该方法。例如,这样我就可以在测试中使用getuser_path(my_preference)。在其他帖子中,我读到这可以通过在测试文件中包含requiresessions_helper来实现,但我仍然收到错误NameError:undefinedlocalvariableormethod'my_preference'.我做错了什么?require'test_helper'require'sessions_hel

  6. ruby-on-rails - 我如何将 Hoptoad 与 DelayedJob 和 DaemonSpawn 集成? - 2

    我一直很高兴地使用DelayedJob习惯用法:foo.send_later(:bar)这会调用DelayedJob进程中对象foo的方法bar。我一直在使用DaemonSpawn在我的服务器上启动DelayedJob进程。但是...如果foo抛出异常,Hoptoad不会捕获它。这是任何这些包中的错误...还是我需要更改某些配置...或者我是否需要在DS或DJ中插入一些异常处理来调用Hoptoad通知程序?回应下面的第一条评论。classDelayedJobWorker 最佳答案 尝试monkeypatchingDelayed::W

  7. 叮咚买菜基于 Apache Doris 统一 OLAP 引擎的应用实践 - 2

    导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵

  8. 华为OD机试用Python实现 -【明明的随机数】 2023Q1A - 2

    华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o

  9. 基于C#实现简易绘图工具【100010177】 - 2

    C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.

  10. ruby-on-rails - 从应用程序中自定义文件夹内的命名空间自动加载 - 2

    我们目前正在为ROR3.2开发自定义cms引擎。在这个过程中,我们希望成为我们的rails应用程序中的一等公民的几个类类型起源,这意味着它们应该驻留在应用程序的app文件夹下,它是插件。目前我们有以下类型:数据源数据类型查看我在app文件夹下创建了多个目录来保存这些:应用/数据源应用/数据类型应用/View更多类型将随之而来,我有点担心应用程序文件夹被这么多目录污染。因此,我想将它们移动到一个子目录/模块中,该子目录/模块包含cms定义的所有类型。所有类都应位于MyCms命名空间内,目录布局应如下所示:应用程序/my_cms/data_source应用程序/my_cms/data_ty

随机推荐