背景

上一节是shell命令启动Jmeter,担心大家对shell脚本语法不是很熟悉,如果定制自己想要的恐怕不好弄,这次改用python启动脚本,在改造之前大家先了解下Jmeter线程组相关参数,这样对大家改造脚本有一定帮助。

知识点

  • python中os、sys、file模块函数

  • Jmeter 执行方式【jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]】

以下是线程组样式

解释

  • Name :Thread Group 线程组的名称,可以根据项目名称定义

  • Comments :备注信息,描述该计划的目的

Action to be taken after a Sampler error

假如请求失败后,接下来执行什么动作

  • continue 继续执行接下来的操作

  • start Next ThreadLoop 执行下一个线程循环

  • Stop Thead 停止该该线程,不在执行该线程的任何操作

  • Stop Test 等待该线程的采样结束后,结束整个测试,不会立即停止

  • Stop TestNow 停止整个测试计划

Thread Properites :线程属性

  • Number of Threads(users) :线程数,也就虚拟用户数

  • Ramp-uo Period(in seconds) :控制虚拟用户启动时间

  • Loop Count:控制执行次数。Infinite 假如勾选表示无线执行,它主要与后面的 Duration 配合使用

  • Same user on each iteration : 每次迭代使用相同的用户

  • Delay Thread creation until needed 将线程创建延迟到需要的时候

  • Number of Threads * Loop Count 就是 Sampler 执行的次数,可以在 View Results Tree 中看到。

specify thread lifetime: 设置执行时间

  • Duration(seconnds): 请求的执行时间,它与(Loop Count 的 Infinite)配合使用

  • Startup delay(seconds):延迟时间,工作中很少用。

python启动Jmeter脚本

python基础知识复习

  • os.sep: 取代操作系统特定的路径分隔符

  • os.name: 指示你正在使用的工作平台。

  • os.getcwd: 得到当前工作目录,即当前python脚本工作的目录路径。

  • os.getenv()和os.putenv: 分别用来读取和设置环境变量

  • os.listdir(): 返回指定目录下的所有文件和目录名

  • os.remove(file): 删除一个文件

  • os.stat(file): 获得文件属性

  • os.chmod(file): 修改文件权限和时间戳

  • os.mkdir(name): 创建目录

  • os.rmdir(name): 删除目录

  • os.removedirs: 删除多个目录

  • os.system(): 运行shell命令

  • os.exit(): 终止当前进程

  • os.linesep: 给出当前平台的行终止符。

  • os.path.split(): 返回一个路径的目录名和文件名

  • os.path.isfile()和os.path.isdir()分别检验给出的路径是一个目录还是文件

  • os.path.existe(): 检验给出的路径是否真的存在

  • os.listdir(dirname): 列出dirname下的目录和文件

  • os.getcwd(): 获得当前工作目录

  • os.curdir: 返回当前目录('.')

  • os.chdir(dirname): 改变工作目录到dirname

  • os.path.isdir(name): 判断name是不是目录,不是目录就返回false

  • os.path.isfile(name): 判断name这个文件是否存在,不存在返回false

  • os.path.exists(name): 判断是否存在文件或目录name

  • os.path.getsize(name): 获得文件大小,如果name是目录返回0L

  • os.path.abspath(name): 获得绝对路径

  • os.path.isabs(): 判断是否为绝对路径

  • os.path.normpath(path): 规范path字符串形式

  • os.path.split(name): 分割文件名与目录

  • os.path.splitext(): 分离文件名和扩展名

  • os.path.join(path,name): 连接目录与文件名或目录

  • os.path.basename(path): 返回文件名

  • os.path.dirname(path): 返回文件路径

打开文件函数复习

  • with open( 文件名, '操作类型' ) as f: f.read()

  • open(文件名,操作类型) f.readlines()

读取方式有

  • rand()

  • readline()

  • readlines()

  • seek

  • ....等等

有上面基础知识,现在开始分析python启动Jmeter脚本

  • 获取脚本路径,通过命令打开文件

  • 替换jmeter脚本中的线程数,步长、执行时间内容,并且重命名脚本

  • 通过命令行执行jmeter脚本

脚本参考代码


  1. # -*- coding: utf-8 -*-

  2. # @Time : 2019/12/11 22:07

  3. # @Author : liwen406

  4. # @Email : Jmeter启动脚本

  5. # @File : startJmeter.py

  6. import os, sys

  7. def jmeterNumber(caseName, num_threads, ramp_time, duration, remark, hostIps='127.0.0.1'):

  8. '''

  9. :param caseName: 脚本名字

  10. :param num_threads: 线程数

  11. :param ramp_time: 控制线程步长

  12. :param duration: 执行时间

  13. :param remark: 标志

  14. :param hostIps: 负载参数

  15. :return: 启动JMeter成功

  16. '''

  17. if caseName is None:

  18. return "测试用例为空"

  19. if num_threads is None:

  20. return "虚拟并发数为空"

  21. if ramp_time is None:

  22. return "测试步骤为空"

  23. if duration is None:

  24. return "执行时间为空"

  25. # 执行脚本名字

  26. runJmeterFile = '%s_%s_%s_%s_%s' % (caseName, num_threads, ramp_time, duration, remark)

  27. print("执行名字脚本:%s" % runJmeterFile)

  28. thisdir = os.getcwd()

  29. # 原始脚本

  30. newdir = os.path.join(thisdir, "testscript", caseName + ".jmx")

  31. print("当前脚本路径: %s" % newdir)

  32. if not os.path.exists(newdir):

  33. print('脚本不存在!请检查脚本')

  34. return False

  35. # 保存测试结果路径

  36. resultFile = os.path.join(thisdir, 'result', runJmeterFile)

  37. print("脚本执行路径: ", resultFile)

  38. # 判断结果路径是否存在

  39. if not os.path.exists(resultFile):

  40. os.makedirs(resultFile)

  41. lines = open(newdir, encoding="utf-8").readlines()

  42. fp = open(os.path.join(thisdir, "result", resultFile, runJmeterFile) + '.jmx', 'w') # 打开你要写得文件

  43. for s in lines:

  44. fp.write(s.replace('num_threads">1</stringProp>', 'num_threads">%s</stringProp>' % num_threads) # 替换并发数

  45. .replace('ramp_time">1</stringProp>', 'ramp_time">%s</stringProp>' % ramp_time) # 替换步长

  46. .replace('scheduler">false</boolProp>', 'scheduler">true</boolProp>') # 勾选通过时间判断结束

  47. .replace('duration"></stringProp>', 'duration">%s</stringProp>' % duration) # 替换执行时间

  48. .replace('name="LoopController.loops">1</stringProp>',

  49. 'name="LoopController.loops">-1</stringProp>')) # 勾选通过时间判断结束

  50. fp.close()

  51. os.chdir(resultFile)

  52. print("当前路径: ", os.getcwd())

  53. # 检查环境变量

  54. if isEvn():

  55. # 判断分布式执行方式

  56. if len(hostIps.split(",")) > 2:

  57. # 根据自己需求添加执行类型

  58. Rcmd = 'jmeter -n -t %s.jmx -R %s -l %s.jtl -j %s.log' % (

  59. runJmeterFile, hostIps, runJmeterFile, runJmeterFile)

  60. # Rcmd = 'jmeter -n -t %s.jmx -R %s -l %s.jtl -j %s.log -e -o %s' % (runJmeterFile, hostIps, runJmeterFile, runJmeterFile, runJmeterFile)

  61. print('执行命令:%s' % Rcmd)

  62. # os.system(Rcmd)

  63. else:

  64. # 不生成html报告

  65. # cmd = 'jmeter -n -t %s.jmx -l %s.jtl -j %s.log' % (runJmeterFile, runJmeterFile, runJmeterFile, runJmeterFile)

  66. # 自动生成html报表

  67. cmd = 'jmeter -n -t %s.jmx -l %s.jtl -j %s.log -e -o %s' % (

  68. runJmeterFile, runJmeterFile, runJmeterFile, runJmeterFile)

  69. print('执行命令:%s' % cmd)

  70. os.system(cmd)

  71. def isEvn():

  72. '''

  73. 检查环境变量

  74. :return: True/Fals

  75. '''

  76. cmd = 'jmeter -v'

  77. lin = os.popen(cmd)

  78. for i in lin:

  79. if 'The Apache Software Foundation' in i:

  80. print("Jmeter环境变量配置成功")

  81. return True

  82. else:

  83. print("Jmeter环境变量配置失败")

  84. return False

  85. if __name__ == '__main__':

  86. # 分布式ip写法,多个使用逗号隔开

  87. hostIps = '127.0.0.1'

  88. if len(sys.argv[1:]) == 5:

  89. print('参数个数为:', len(sys.argv), '个参数。')

  90. print('可用参数列表:', str(sys.argv[1:]))

  91. param = sys.argv[1:]

  92. print("脚本名字: %s,并发数: %s,步长: %s,执行时间: %s,备注: %s" % (param[0], param[1], param[2], param[3], param[4]))

  93. jmeterNumber(param[0], param[1], param[2], param[3], param[4], hostIps)

  94. else:

  95. print("参数不对")

  96. pass

上面脚本注释的很清楚,相信大家一看就知道怎么修改参数,上面脚本可以个参考,大家可以根据实际情况修改参数,达到自己预期结果。

注意

使用python执行Jmeter脚本需要与Jmeter脚本有约定,这样才能通过python脚本去执行咱们的Jmeter测试脚本。

xml中

脚本中:

执行结果

Hmtml报表

传参说明:

python startJmeter.py tiaoshi 2 1 30 pythontiaoshi

  • python表示通过python脚本语言执行

  • startJmeter.py 表示启动脚本名字

  • tiaoshi 表示Jmeter脚本名字

  • 2 表示并发数

  • 1 执行步长

  • 30 表示执行时间

  • pythontiaoshi 表示备注,方便一个脚本多次执行好分别每次执行的结果

替换前脚本

替换后脚本

目前操作目录

总结

目前该脚本在 win 环境中行,如果放到Linux中去执行相信应该是可以的,应Linux中也有python环境,不过本次使用的是python3执行,如果再Linux中是python2需要修改相应位置即可执行,如果喜欢shell启动的可以参考性能工具之Jmeter使用shell启动

做性能测试执行脚本是个体力活,怎么节约体力活的时间,可以通过脚本语言把重复的工作量替换,这样咱们可以把更多时间用到刀刃上。

看累了读一读咱们中学的古文:

《劝学》

积土成山,风雨兴焉;积水成渊,蛟龙生焉;积善成德,而神明自得,圣心备焉。故不积跬步,无以至千里;不积小流,无以成江海。骐骥一跃,不能十步;驽马十驾,功在不舍。锲而舍之,朽木不折;锲而不舍,金石可镂。蚓无爪牙之利,筋骨之强,上食埃土,下饮黄泉,用心一也。蟹六跪而二螯,非蛇鳝之穴无可寄托者,用心躁也。

性能工具之Jmeter脚本python启动相关推荐

  1. jmeter脚本_性能工具之Jmeter脚本python启动

    背景 上一节是shell命令启动Jmeter,担心大家对shell脚本语法不是很熟悉,如果定制自己想要的恐怕不好弄,这次改用python启动脚本,在改造之前大家先了解下Jmeter线程组相关参数,这样 ...

  2. 性能工具之 JMeter 使用 Python 脚本快速执行

    文章目录 一.前言 二.预备知识 1.Python 基础知识 2.JMeter 基础知识 三.Python 脚本 1.主要步骤 2.参考代码 四.使用说明 五.总结 一.前言 上篇文章 性能工具之 J ...

  3. 怎么样使用Badboy工具录制JMeter脚本

    1.使用Badboy录制JMeter脚本 打开Badboy工具开始进行脚本录制. (1)当我们打开Badboy工具时,默认就进入录制状态. 如下图: 当然我们也可以点击录制按钮,进行状态的切换. (2 ...

  4. 性能工具之 JMeter 快速入门

    文章目录 一.前言 二.下载安装 三.目录介绍 四.快速使用 五.创建线程组 六.编写 http 请求 七.添加查看结果树 八.点击运行 九.显示结果 十.Summary RePort 展示 十一.参 ...

  5. influxdb 客户端工具_性能工具之Jmeter小白入门系列之六

    Jmeter + Grafana + InfluxDB 性能平台搭建 环境:Linux环境 centos 6 重启防火墙:service iptables rstart 查看状态:service ip ...

  6. Jmeter脚本 GUI和非GUI启动方式

    2019独角兽企业重金招聘Python工程师标准>>> 1.下载Jmeter 地址:http://jmeter.apache.org/download_jmeter.cgi 2.启动 ...

  7. 接口测试(apipost、jmeter和python脚本)

    一.什么是接口 接口就是内部模块对模块,外部系统对其他服务提供的一种可调用或者连接的能力的标准,就好比usb接口,他是系统向外接提供的一种用于物理数据传输的一个接口,当然仅仅是一个接口是不能进行传输的 ...

  8. JMeter接口测试工具基础— 使用Badboy录制JMeter脚本

    1.使用Badboy录制JMeter脚本 打开Badboy工具开始进行脚本录制: (1)当我们打开Badboy工具时,默认就进入录制状态. 如下图: 当然我们也可以点击录制按钮进行切换. (2)在地址 ...

  9. Jmeter工具笔记-Jmeter+influxdb+grafanas设置性能监控过程

    1.下载 1)influxdb下载链接:https://portal.influxdata.com/downloads 2)grafanas下载链接:https://grafana.com/grafa ...

最新文章

  1. 网络编程4之UDP协议
  2. MyBatis like 语句查询
  3. php之自动加载(懒加载)
  4. (转)java内部类详解
  5. .典型用户 - 场景
  6. bzoj 2121 DP
  7. Redis悲观锁、乐观锁和调用Lua脚本的优缺点
  8. select完成单线程,多用户
  9. word修改表格和下方段落的间距
  10. 北邮带研究生的计算机导师有哪些,GitHub - sunichi/BUPTNiceMentors: 北邮研究生导师口碑榜...
  11. 计算机常年开机,电脑长时间开机的危害
  12. MathType公式编辑器中怎么输入千分号
  13. 今日总结------技术是最不值钱的
  14. 中科院博士论文致谢部分走红,感动无数网友,其实沉下心来,你我何尝不是前程万里
  15. GitChat · 前端 | Webpack 工程的 PWA 实战
  16. 黑马程序员——ios笔试题——黑马 IOS 技术博客
  17. 高新技术企业认定,知识产权核查篇
  18. FTP主动连接、被动连接、连接端口的分配与使用、误区总结
  19. eMule连接到进ed2k网络分析
  20. 3D Segmentation with Exponential Logarithmic Loss for Highly Unbalanced Object Sizes

热门文章

  1. 华为OD机试用Python实现 -【寻找关键钥匙】 2023Q1A
  2. 技巧---数学分析1:变换积分次序
  3. 爬虫加tkinter做的中英互译小软件
  4. 开发落网电台windows phone 8应用的计划(1)
  5. python保留字-Python保留字
  6. SQLServer As
  7. C# 通过反射根据描述特性转换枚举型值
  8. 如何将测试刨根问底!
  9. c语言 1!+2!+···+20!1的阶乘加2的阶乘一直加到20的阶乘
  10. xv6 makefile详解