zoukankan      html  css  js  c++  java
  • 小贞贞jmeter基于python的分布式

    jmeter进行分布式压力测试:所谓分布式,即一台作为控制机,去控制其他多台负载机一起去运行我们的测试脚本,最终对我们的被测系统产生压力

    本期python脚本实现:

    1.从excel表中读取配置的执行时间、线程数、IP和端口等

    2.拼接命令 jmeter -n -t jmx脚本的路径 -R负载机的ip:端口,负载机的IP:端口  -J脚本中设置的关于线程数变量  -J脚本中设置的启动时间变量  -l 测试结果路径 -e -o 测试html报告路径

    例如:

    jmeter -n -t .jmeter_scriptTCtestcase_xnTC_testscript.jmx -R10.5.32.XX:1099,10.5.32.XX:1099 -Jthread_num=30 -Jrunup_time=2 -Jrun_time=10 -l . est_result est_jtl est2019-11-27-11-36-24.jtl -e -o . est_result est_htmlHTML2019-11-27-11-36-24

    一:环境准备

    环境:linux服务器

    控制机  负载机:都为Windows  

    确保:控制机与负载机在同一个网段,即IP前三位需要相同 ,要求能相互ping通

    环境准备:

    1.负载机和控制机安装相同版本的JDK(1.8版本及以上) 和相同版本的jmeter,最好放在同一个路径下

    2.负载机和控制机配置JDK的jmeter的环境变量

    3.环境变量配置完成后,在cmd 中输入: java -version 能够查看JDK的版本 ,在cmd中输入:jmeter 能够正确打开jmeter,则表明环境配置成功

    4.在控制机和负载机的相同目录下放入要运行的测试脚本,脚本中如引用了CSV文件等,需要写绝对路径,不然运行结果会为空

    控制机修改:

    1.修改jmeter目录中bin/jmeter.properties文件的如下内容:

    remote_host:填入负载机的IP,可以多台,端口可都为1099,格式是ip:端口,IP:端口,ip:端口 , 备注:控制机也可作为负载机,填入负载机的ip和端口,

    server_port:填入1099

    继续修改该文件下的如下内容: 

    server.rmi.ssl.disable=true

    language=zh_CN

    jmeter.save.saveservice.label=true

    jmeter.save.saveservice.response_code=true

    jmeter.save.saveservice.response_data=true

    jmeter.save.saveservice.response_message=true
    jmeter.save.saveservice.successful=true
    jmeter.save.saveservice.thread_name=true
    jmeter.save.saveservice.time=true

    jmeter.save.saveservice.latency=true

    jmeter.save.saveservice.samplerData=true
    jmeter.save.saveservice.responseHeaders=true

    jmeter.save.saveservice.bytes=true

    jmeter.save.saveservice.thread_counts=true

    jmeter.save.saveservice.timestamp_format=ms
    jmeter.save.saveservice.timestamp_format=yyyy/MM/dd HH:mm:ss.SSS

    sampleresult.timestamp.start=true

    2.新增system.properties:

    java.net.preferIPv4Stack=true

    3.修改jmeter.bat

    set JVM_ARGS="-Djava.net.preferIPv4Stack=true"

    负载机修改:

    1.修改jmeter目录中bin/jmeter.properties文件的如下内容:

    server.rmi.ssl.disable=true

     

    二、脚本执行

    1.所有的负载机打开 jmeter目录bin/jmeter-server.bat文件(右键管理员打开)

    打开的cmd窗口中显示出了该机器的ip和端口

     2.在cmd中运行脚本 

     jmeter -n -t jmx脚本的路径 -R负载机的ip:端口,负载机的IP:端口  -J脚本中设置的关于线程数变量  -J脚本中设置的启动时间变量  -l 测试结果路径 -e -o 测试html报告路径

    第二次运行该命令时要注意 修改jtl结果文件和测试报告的名称,不然jtl结果会叠加,html文件会提示重复或目录不为空


    3. 在cmd中运行脚本由于每次需要修改文件名称非常的不方便,所有与python脚本集成,每次能够动态的生成不同名称的测试结果和测试报告

    具体的python代码如下:

    该段代码实现:

    1.在一个excel表手动填入需要的线程数、启动时间、执行时间、执行机器数、控制机的ip和端口

    2.python脚本读取该Excel文件

    3.在jmeter脚本中,通过Tools--函数助手,选择__p函数,通过下图的步骤生成变量,主要是用于后期命令的调用,避免每次运行脚本都需要打开jmeter进行修改这些参数

    3.在我们的Excel中配置要运行的线程数、启动时间、执行时间、执行机数、IP 端口

    4.python脚本去读取以上的Excel,然后拼接成一个命令,然后执行该命令


    import os
    import time
    from openpyxl import load_workbook
    #读取配置的excel
    wb = load_workbook(r". est_planpressure_schedule.xlsx")
    sheet = wb.worksheets[0]
    row = sheet.max_row
    column = sheet.max_column
    def file_msg():
    for i in range(row-1):
    thread_info = sheet.cell(i + 2, 3).value
    runup_info = sheet.cell(i + 2, 4).value
    time_info = sheet.cell(i + 2, 5).value
    ip_num = sheet.cell(i + 2, 6).value
    now = time.strftime("%Y-%m-%d-%H-%M-%S")
    ip_msg1 = ""
    for m in range(ip_num):
    ip = sheet.cell(i + 2, 7 + int(m) * 2).value
    port = sheet.cell(i + 2, 8 + int(m) * 2).value
    str_msg = str(ip)+":"+str(port)
    ip_msg1 = ip_msg1+str_msg+","
    ip_msg2 = " -R"+ip_msg1
    ip_msg = ip_msg2[:-1]
    print(ip_msg)
    #拼接jmeter命令
    exect = "jmeter -n -t "
    + r".jmeter_scriptTCtestcase_xnTC_testscript.jmx"
    +ip_msg
    +" -Jthread_num="+str(thread_info)+" -Jrunup_time="+str(runup_info)
    +" -Jrun_time="+str(time_info)+" -l "
    +r". est_result est_jtl est"+now+".jtl"
    + r" -e -o "+r". est_result est_htmlHTML" +now
    #执行命令
        os.system(exect)

    print(exect)
    wb.close()
    #调用该方法
    file_msg()
  • 相关阅读:
    svn:ignore 设置忽略文件
    Css让文字自适应Table宽度[转]
    自学python笔记
    java代码中添加log4j日志
    maven多模块项目搭建
    js || 与&&
    java内存溢出和tomcat内存配置
    xsl:for-each中引用循环外全局变量
    quartz启动两次(tomcat)
    pymysql简单封装
  • 原文地址:https://www.cnblogs.com/xiaozhenzhen/p/11941168.html
Copyright © 2011-2022 走看看