首页 > 编程语言 >(Jmeter新玩法)Python 调 Jmeter执行参数化jmx脚本

(Jmeter新玩法)Python 调 Jmeter执行参数化jmx脚本

时间:2024-08-06 22:38:57浏览次数:7  
标签:jmx Python duration num threads str loops Jmeter

# Python 调 Jmeter执行参数化jmx脚本

import os
from os.path import join
import time
import re
from string import Template

jmeter_Home = r"F:\softtotal\xxx\bin\jmeter.bat"

# jmx文件路径
currpath = os.path.dirname(os.path.realpath(__file__))
# 要运行的jmx脚本
jmx = r"F:\softtotal\xxx\bin\参数化csv.jmx"
# jmx = currpath + r"E:\Dev\xxxx\shoptest.jmx"
# 生成的报告放到result文件夹中
# resultpath = currpath + os.sep + "result"
resultpath = os.sep + r"F:\softtotal\xxx\result"


# 创建参数化jmx文件
# 参数化的内容为:循环次数loops、线程数num_threads、持续运行时间duration
def create_para_jmx():
    global replaced_jmx
    jmx_str = ''
    with open(jmx, 'r', encoding='utf-8') as file:
        jmx_str = file.read()
    # 循环次数
    loops = 'name="LoopController.loops">(.*?)</stringProp>'
    replcae_loops = 'name="LoopController.loops">$loops</stringProp>'
    jmx_str = re.sub(loops, replcae_loops, jmx_str)

    # 线程数
    num_threads = 'name="ThreadGroup.num_threads">(.*?)</stringProp>'
    repalce_num_threads = 'name="ThreadGroup.num_threads">$num_threads</stringProp>'
    jmx_str = re.sub(num_threads, repalce_num_threads, jmx_str)
    # 持续运行时间
    duration = 'ThreadGroup.duration">(.*?)</stringProp>'
    replace_duration = 'ThreadGroup.duration">$duration</stringProp>'
    jmx_str = re.sub(duration, replace_duration, jmx_str)
    replaced_jmx = jmx.replace('.jmx', '-P.jmx')
    with open(replaced_jmx, "w+", encoding="utf-8") as file:
        file.writelines(jmx_str)


# 执行参数化fmx文件,生成带参数的jmx文件
create_para_jmx()
# 获取当前时间,格式为20210301122059
now = time.strftime(r'%Y%m%d%H%M%S', time.localtime(time.time()))


def execjmx(duration, num_threads, loops):
    print(f"本次运行的场景为:运行时间:{duration}s、线程数:{num_threads}、循环次数:{loops}")
    tmpstr = ''
    with open(replaced_jmx, "r", encoding="utf-8") as file:
        tmpstr = Template(file.read()).safe_substitute(loops=loops, num_threads=num_threads, duration=duration)
    with open(replaced_jmx, "w+", encoding="utf-8") as file:
        file.writelines(tmpstr)
    # 生成的jtl文件
    jtl = resultpath + f'/{now}-{duration}s--{num_threads}threads-{loops}loops.jtl'
    # 生成的html文件
    html = resultpath + f'/{now}-{duration}s-{num_threads}threads-{loops}loops-htmlreport'
    # Terminal = f*open -a Terminal.app"
    run = f"{jmeter_Home} -n -t {replaced_jmx} -l {jtl} -e -o {html}"
    os.system(run)


# _执行jmx文件
# 时间、吞吐量、线程数、循环次数
duration = ''
# throughput =''
num_threads = ''
loops = ''
duration = int(input("运行时间:" + duration))
# throughput = int(input("吞吐量:"+ throughput))
num_threads = int(input("线程数:" + num_threads))
loops = int(input("循环次数:" + loops))
execjmx(duration, num_threads, loops)

 运行后结果截图

 

标签:jmx,Python,duration,num,threads,str,loops,Jmeter
From: https://www.cnblogs.com/Wl55387370/p/18346117

相关文章

  • python爬虫预备知识三-多进程
    python实现多进程的方法:fork、multiprocessing模块创建多进程。os.fork方法os.fork方法只适合于unix/linux系统,不支持windows系统。fork方法调用一次会返回两次,原因在于操作系统将当前进程(父进程)复制出一份进程(子进程),这两个进程几乎完全相同,fork方法分别在父进程和子进程中......
  • PEP 8 – Python 代码风格指南中文版(七)
    编程建议(2) 定义异常时,应该从Exception类继承,而不是从BaseException类继承。直接从BaseException继承的异常通常是那些几乎不应该被捕获的异常。设计异常层次结构时,应该基于捕获异常的代码可能需要进行的区分,而不是基于异常被抛出的位置。目标是通过编程方式回答“出了......
  • Python-记录一次迭代求和
    importitertoolsdefget_result(hope,list_input):""":paramhope:#期望相加所得参数:paramlist_input:#所有数值:return:"""defgenerate_combination(items,length):forcombinationinitertools.co......
  • 如何使用 Python 进行数据可视化,比如绘制折线图?
    要使用Python进行数据可视化,可以使用matplotlib库来绘制折线图。以下是一个简单的示例代码:首先,确保已安装matplotlib库。可以使用以下命令安装:pipinstallmatplotlib在Python脚本中导入matplotlib库:importmatplotlib.pyplotasplt准备数据,以x和y坐标列表的形式存......
  • Python 中的生成器函数有什么作用及如何使用?
    生成器函数是一种特殊的函数,可以在迭代过程中动态生成值,而不是一次性返回所有值。它的作用有以下几点:节省内存:生成器函数一次只生成一个值,并在生成后立即释放内存,这样可以减小内存的占用,特别是在处理大数据集时非常有用。延迟计算:生成器函数可以按需生成值,只在需要的时......
  • Python、R银行信用卡客户流失机器学习预测热门文章合集
    原文链接:https://tecdat.cn/?p=37244原文出处:拓端数据部落公众号 分析师: CengjunWang目前,众多银行由于服务质量的降低、同业竞争的日益激烈等因素,面临着信用卡客户流失的棘手难题,这给银行经理施加了沉重的压力。而且,获取新的信用卡用户所需成本通常高于维持现有用户的成本。......
  • Python动态规划
    Python动态规划动态规划(DynamicProgramming,简称DP)是解决多阶段决策过程最优化问题的一种方法。动态规划算法的基本思想是:将待求解的问题分解成若干个相互联系的子问题,先求解子问题,然后从这些子问题的解得到原问题的解;对于重复出现的子问题,只在第一次遇到的时候对它进行求解,......
  • python-分享篇-英文短文自动分词写入文本文件
    文章目录准备代码效果准备代码importstringf=open('./data/split.txt')s=f.read()str1=s.title()print(str1)print("".join([sforsinstr1.splitlines(True)ifs.strip()]))list1=str1.split()#采用默认分隔符进行分割#字符串列表去重l1=list(s......
  • 【学习笔记】Matlab和python双语言的学习(最大最小化规划)
    文章目录前言一、最大最小化规划二、选址问题三、代码实现----Matlab1.Matlab的`fminimax`函数2.Matlab代码四、代码实现----python总结前言通过模型算法,熟练对Matlab和python的应用。学习视频链接:https://www.bilibili.com/video/BV1EK41187QF?p=28&vd_sour......
  • 关于简单的部分数学函数用python求导的示例
    1.求常数的导数题目代码1.求常数的导数:$f(x)=c$ 运行代码fromsympyimport*x,c=symbols('xc')c.diff(x)结果 2.求幂函数导数:题目代码2.求幂函数导数:$$f(x)=x^\mu$$运行代码fromsympyimport*x,mu=symbols('xmu')(x**mu).diff(x)结果  3.求三角......