jmeter脚本_性能工具之Jmeter脚本python启动
背景
上一节是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脚本
脚本参考代码
# -*- coding: utf-8 -*-
# @Time : 2019/12/11 22:07
# @Author : liwen406
# @Email : Jmeter启动脚本
# @File : startJmeter.py
import os, sys
def jmeterNumber(caseName, num_threads, ramp_time, duration, remark, hostIps='127.0.0.1'):
'''
:param caseName: 脚本名字
:param num_threads: 线程数
:param ramp_time: 控制线程步长
:param duration: 执行时间
:param remark: 标志
:param hostIps: 负载参数
:return: 启动JMeter成功
'''
if caseName is None:
return "测试用例为空"
if num_threads is None:
return "虚拟并发数为空"
if ramp_time is None:
return "测试步骤为空"
if duration is None:
return "执行时间为空"
# 执行脚本名字
runJmeterFile = '%s_%s_%s_%s_%s' % (caseName, num_threads, ramp_time, duration, remark)
print("执行名字脚本:%s" % runJmeterFile)
thisdir = os.getcwd()
# 原始脚本
newdir = os.path.join(thisdir, "testscript", caseName + ".jmx")
print("当前脚本路径: %s" % newdir)
if not os.path.exists(newdir):
print('脚本不存在!请检查脚本')
return False
# 保存测试结果路径
resultFile = os.path.join(thisdir, 'result', runJmeterFile)
print("脚本执行路径: ", resultFile)
# 判断结果路径是否存在
if not os.path.exists(resultFile):
os.makedirs(resultFile)
lines = open(newdir, encoding="utf-8").readlines()
fp = open(os.path.join(thisdir, "result", resultFile, runJmeterFile) + '.jmx', 'w') # 打开你要写得文件
for s in lines:
fp.write(s.replace('num_threads">1', 'num_threads">%s' % num_threads) # 替换并发数
.replace('ramp_time">1', 'ramp_time">%s' % ramp_time) # 替换步长
.replace('scheduler">false', 'scheduler">true') # 勾选通过时间判断结束
.replace('duration">', 'duration">%s' % duration) # 替换执行时间
.replace('name="LoopController.loops">1',
'name="LoopController.loops">-1')) # 勾选通过时间判断结束
fp.close()
os.chdir(resultFile)
print("当前路径: ", os.getcwd())
# 检查环境变量
if isEvn():
# 判断分布式执行方式
if len(hostIps.split(",")) > 2:
# 根据自己需求添加执行类型
Rcmd = 'jmeter -n -t %s.jmx -R %s -l %s.jtl -j %s.log' % (
runJmeterFile, hostIps, runJmeterFile, runJmeterFile)
# Rcmd = 'jmeter -n -t %s.jmx -R %s -l %s.jtl -j %s.log -e -o %s' % (runJmeterFile, hostIps, runJmeterFile, runJmeterFile, runJmeterFile)
print('执行命令:%s' % Rcmd)
# os.system(Rcmd)
else:
# 不生成html报告
# cmd = 'jmeter -n -t %s.jmx -l %s.jtl -j %s.log' % (runJmeterFile, runJmeterFile, runJmeterFile, runJmeterFile)
# 自动生成html报表
cmd = 'jmeter -n -t %s.jmx -l %s.jtl -j %s.log -e -o %s' % (
runJmeterFile, runJmeterFile, runJmeterFile, runJmeterFile)
print('执行命令:%s' % cmd)
os.system(cmd)
def isEvn():
'''
检查环境变量
:return: True/Fals
'''
cmd = 'jmeter -v'
lin = os.popen(cmd)
for i in lin:
if 'The Apache Software Foundation' in i:
print("Jmeter环境变量配置成功")
return True
else:
print("Jmeter环境变量配置失败")
return False
if __name__ == '__main__':
# 分布式ip写法,多个使用逗号隔开
hostIps = '127.0.0.1'
if len(sys.argv[1:]) == 5:
print('参数个数为:', len(sys.argv), '个参数。')
print('可用参数列表:', str(sys.argv[1:]))
param = sys.argv[1:]
print("脚本名字: %s,并发数: %s,步长: %s,执行时间: %s,备注: %s" % (param[0], param[1], param[2], param[3], param[4]))
jmeterNumber(param[0], param[1], param[2], param[3], param[4], hostIps)
else:
print("参数不对")
pass
上面脚本注释的很清楚,相信大家一看就知道怎么修改参数,上面脚本可以个参看,大家可以根据实际情况修改参数,达到自己预期结果。
注意
使用python执行脚本需要与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脚本_性能工具之Jmeter脚本python启动相关推荐
- influxdb 客户端工具_性能工具之Jmeter小白入门系列之六
Jmeter + Grafana + InfluxDB 性能平台搭建 环境:Linux环境 centos 6 重启防火墙:service iptables rstart 查看状态:service ip ...
- 性能工具之Jmeter脚本python启动
背景 上一节是shell命令启动Jmeter,担心大家对shell脚本语法不是很熟悉,如果定制自己想要的恐怕不好弄,这次改用python启动脚本,在改造之前大家先了解下Jmeter线程组相关参数,这样 ...
- 性能工具之 JMeter 使用 Python 脚本快速执行
文章目录 一.前言 二.预备知识 1.Python 基础知识 2.JMeter 基础知识 三.Python 脚本 1.主要步骤 2.参考代码 四.使用说明 五.总结 一.前言 上篇文章 性能工具之 J ...
- 性能工具之 JMeter 快速入门
文章目录 一.前言 二.下载安装 三.目录介绍 四.快速使用 五.创建线程组 六.编写 http 请求 七.添加查看结果树 八.点击运行 九.显示结果 十.Summary RePort 展示 十一.参 ...
- 谷歌浏览器如何启用java小脚本_各种浏览器开启JavaScript脚本方法
随着网站设计技术的发展,为了用户友好体验,大部分网站使用了JavaScript脚本设计,如果您的浏览器禁用或关闭的JavaScript支持,那么可能造成网站体验差或网站部分功能无法使用 下面提供10种 ...
- 下怎么运行sh脚本_基于CentOS7系统添加自定义脚本服务及参数说明,附实例
概述 centos6如果要添加自定义脚本服务只需要把脚本放到/etc/init.d然后授权后用chkconfig添加后就可以管理了,那么centos7又是怎么添加自定义脚本服务呢? CentOS7添加 ...
- flask执行python脚本_如何在Flask中运行python脚本
我有一个Flask脚本,可以创建网站并动态打印一些数据.-打印的数据应来自另一个python脚本. 我目前面临的问题是,如果我将执行python脚本的行放在执行Flask应用程序的行之前,它将运行Py ...
- java脚本_写一个在线Java脚本执行器
在生产环境中,有时候我们想要快速执行一段代码,但是又不得不经历上线的痛苦(分情况哈,有时候这种痛苦是必须的)或者在某些场景中,不能重启避免破坏现场,那么有个在线脚本执行器就最好不过了.于是在工作之余, ...
- flask执行python脚本_如何在flask后端运行python脚本?
我有一个小瓶子应用程序,它接受用户输入并返回一些文本.在这里,用户输入被输入到另一个python脚本,比如temp.py,这个temp.py将返回一个应该返回给用户的值.例如: 烧瓶.pyfrom f ...
最新文章
- java.util.concurrent BlockingQueue详解
- 从零开始的AI·决策树原来这么好理解(附实例代码)
- linux 条件变量
- SQL Server 2019安装教程
- exe的dll加载过程
- 转:Python: threading.local是全局变量但是它的值却在当前调用它的线程当中
- 【CodeForces - 920E】Connected Components? (dsu,补图连通块,STLset+map,bfs 或bitset)
- 连接主机Java网络编程(一)- 一个简单的服务端/客户端应用程序
- 如何免费下载百度文库、豆丁网等网站的文档
- FEKO学习:偶极子天线仿真
- Myeclipse 10破解图解
- uushare.com(原uubox.net)的功能简介
- 基于TI Sitara系列AM437x ARM Cortex-A9核心板 处理器
- PHP加密扩展库Mcrypt
- 手机照片局部放大镜_怎样发照片才能惊艳朋友圈?
- 进销存仓库管理软件的应用场景与效益
- 激光雷达:点云语义分割算法
- Linux网络之连接跟踪(conntrack)
- CSS基础笔记(多看多记冲冲冲)
- 十二.作业难点(有IT大牛路过的可以帮我解答我的疑问?万分感谢)--转行的苦逼人...
热门文章
- 如何设置mysql的权限_mysql 权限控制
- jq 自动打开浏览器_jQuery之解析判断当前页面打开端(APP或浏览器)的方法
- html中前台布局特点,HTML5弹性布局有什么优点
- 寻仙新马源码一键端_强大,腾讯开源前后端接口开发工具!
- 从零开始学习docker(十五)Swarm mode 介绍
- Linux Shell脚本编程 --split命令
- 解决Linux下启动Tomcat遇到Neither the JAVA_HOME nor the JRE_HOME environment variable is defined...
- 韩国最新「美女元宇宙」引爆Reddit!最强换脸神器美女自拍一键转漫画
- 重启oracle后报01034,ORACLE: ORA-01034, ORA-27123问题处理的分析
- 替换对象所有字段_JVM字段访问优化