• 使用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('参数输入错误,请输入正确的参数')
    

      

  • 相关阅读:
    《面试题 03.05. 栈排序》——惰性更新
    CTF<密码学> writeup 传统知识+古典密码
    有趣的数学(二)
    【】Dedecms友情链接去掉LI的方法介绍
    【】【】打工子弟学校学生们的中国梦何时圆?
    Discuz! 7.2 防注册机注册+发垃圾帖的解决方法
    Windows 8 常用快捷键
    Win7 64位系统下Auto CAD 2010注册激活,出现警告:Make sure you can write to current directory...
    怎么从EXCEL或WORD里提取图片?
    如何将windows xp系统下的outlook express6.0的邮件,帐号及通迅录导入Office Outlook xp/2003/2007中...
  • 原文地址:https://www.cnblogs.com/goal9248/p/14900021.html
Copyright © 2020-2023  润新知