zoukankan      html  css  js  c++  java
  • 使用python+jmeter实现压测自动化

    使用python+jmeter实现压测自动化:

    # -*- coding: utf-8 -*-
    import os, sys, re
    import logging
    
    # 初始化log
    logging.basicConfig(level=logging.INFO, format=' %(levelname)s - %(asctime)s - %(pathname)s - %(filename)s[:%(lineno)d] - %(message)s')
    logger = logging.getLogger('JmxHandle')
    
    
    def setupJmx(jmx_prefix, threads_num, rampup_time, duration, remark, setHost=False):
    
        current_dir = os.getcwd()
        template_jmx = os.path.join(current_dir, 'JmxTemplate', jmx_prefix + '.jmx')
    
        if not os.path.exists(template_jmx):
            logger.error(template_jmx + ' path not Exist')
            return None
    
        # 新JmxName
        new_jmx_remark = "{}_tn{}_rt{}_d{}_{}".format(jmx_prefix, threads_num, rampup_time, duration, remark)
        new_jmx_name = new_jmx_remark + '.jmx'
    
        # JmxResultName
        result_dir = os.path.join(current_dir, new_jmx_remark, 'result')
        if not os.path.exists(result_dir):
            os.makedirs(result_dir)
    
        with open(template_jmx, 'r', encoding='UTF-8') as temp_stream:
            lines = temp_stream.readlines()
            with open(os.path.join(current_dir, new_jmx_remark, new_jmx_name), 'w', encoding='UTF-8') as new_stream:
                for line in lines:
                    new_line = line.replace('$threads_num$', threads_num).replace('$rampup_time$', rampup_time).replace(
                        '$duration$', duration)
                    if setHost:
                        new_line = re.sub('<stringProp name="HTTPSampler.domain">(.*)</stringProp>',
                                          '<stringProp name="HTTPSampler.domain">${__P(url,)}</stringProp>',new_line)
                    new_stream.write(new_line)
    
        logger.info('Jmx文件 JmxResult目录生成完成!')
    
        return new_jmx_remark
    
    
    def runJmeterByCmd(new_jmx_remark, hostname='', ip=''):
    
        def isJmeterInstalled():
            sign = False
            # 注意Window用where,Linux用which
            lines = os.popen('which jmeter')
            for l in lines:
                logger.info('Jmeter 运行路径:{}'.format(l))
                sign = True
                if sign == True:
                    break
            return sign
    
        if hostname:
            execute_cmd = 'jmeter -Jurl={1} -n -t ./{0}/{0}.jmx -l ./{0}/{0}.jtl -j ./{0}/{0}.log -e -o ./{0}/result/'.
                format(new_jmx_remark, hostname)
        else:
            execute_cmd = 'jmeter -n -t ./{0}/{0}.jmx -l ./{0}/{0}.jtl -j ./{0}/{0}.log -e -o ./{0}/result/'.
                format(new_jmx_remark)
    
        logger.info('执行命令为:{}'.format(execute_cmd))
    
        if isJmeterInstalled():
            os.system(execute_cmd)
    
    if __name__ == '__main__':
        if len(sys.argv[1:]) == 5:
            param = sys.argv[1:]
            # 注意,setupJmx中setHost=False,runJmeterByCmd中hostname不填
    
            # new_jmx_remark = setupJmx(param[0], param[1], param[2], param[3], param[4], True)
            # runJmeterByCmd(new_jmx_remark, 'www.baidu.com')
    
            new_jmx_remark = setupJmx(param[0], param[1], param[2], param[3], param[4])
            runJmeterByCmd(new_jmx_remark)
        else:
            print('参数输入错误,请输入正确的参数')
    

      

  • 相关阅读:
    C文件读写函数介绍(转)
    字节存储排序:大端和小端的判别及转换
    vc++上的MFC的对象序列化和反序列化
    unicode下各种类型转换,CString,string,char*,int,char[]
    CString与std::string unicode下相互转化
    VS2010每次编译都重新编译整个工程的解决方案
    Windows下用C语言获取进程cpu使用率,内存使用,IO情况
    hadoop 安装
    python---pyc pyo文件详解
    C 高级编程 2 内存管理
  • 原文地址:https://www.cnblogs.com/goal9248/p/14900021.html
Copyright © 2011-2022 走看看