python解析jmx完成jmeter压力测试

最近在在弄项目的测试质量平台,平台本身是django+vue搭建的,缺少 一个性能压测的小模块,所以着手处理了了下,其实第一选择应该 是locust,因为locust本身就是基于python的性能测试 框架,可能跟平台本身更加契合,但在实际的测试和体验后,发现其实使用并不理想,占用内存大,数据指标也并不准确。后来觉得还是用jmeter处理下可能更稳妥些。

大体的思路如下 :

1、点击平台内case列表执行按键,将case相关信息如(线程数,持续时间,请求 方式、参数等)发送 至mq

2、压力机内mq进行消费 读取case信息,将信息写入jmeter的JMX文件内,执行该JMX文件

3、生成结果后,因为jmeter生成报告的方式是内部引用变量,无法从某个节点取到对应数值,所以要将生成的jtl文件转为csv文件

4、最后将csv文件写入数据库,平台列表展示case关联压测结果

import time, pika, os, json, subprocess, csv, pymysql, logging
import xml.etree.cElementTree as ET
from urllib import parse

LOG_FORMAT = "%(asctime)s - %(levelname)s - %(message)s"  # 日志格式化输出
DATE_FORMAT = "%m/%d/%Y %H:%M:%S %p"  # 日期格式
fp = logging.FileHandler('performance.log', encoding='utf-8')
fs = logging.StreamHandler()
logging.basicConfig(level=logging.DEBUG, format=LOG_FORMAT, datefmt=DATE_FORMAT, handlers=[fp, fs])


# jmeter  基本信息
currpath = os.path.dirname(os.path.realpath(__file__))

JMETER_PLUGIN_NAME = r'''"E:\自动化\jmeter\apache-jmeter-3.1\apache-jmeter-3.1\lib\ext\CMDRunner.jar"'''

JMETER_HOME = r'''"E:\自动化\jmeter\apache-jmeter-3.1\apache-jmeter-3.1\bin\jmeter.bat"'''

JMETER_EXEC_JMX = "excutePerformance.jmx"

JMETER_TEMPLATES_JMX = "templatesPerformance.jmx"

# rabbitmq 配置信息
MQ_CONFIG = {
    "host": "",
    "port": 5672,
    "vhost": "/",
    "user": "admin",
    "passwd": "admin",
}


# mq 消费端
def consume():
    # 创建连接
    credentials = pika.PlainCredentials(MQ_CONFIG["user"], MQ_CONFIG["passwd"])
    conn_broker = pika.BlockingConnection(
        pika.ConnectionParameters(host=MQ_CONFIG["host"], port=MQ_CONFIG["port"], virtual_host=MQ_CONFIG["vhost"],
                                  credentials=credentials))

    # 在连接上创建一个频道
    chan = conn_broker.channel()
    chan.queue_declare(queue='performanceQueue')
    chan.basic_consume('performanceQueue', callback, auto_ack=True)
    chan.start_consuming()


# 解析执行mq数据
def callback(ch, method, properties, body):
    strBody = body.decode('gbk').replace("'", '"')
    requestDic = json.loads(strBody)
    if handleTemplates(requestDic):
        execjmxs(requestDic["case_per_result_id"])


# 将mq信息写入jmx文件
def handleTemplates(requestDic):
    try:
        logging.info("将mq信息写入jmx模板")
        # 基本信息
        url = parse.urlparse(requestDic["request"]["host"])
        HTTPSampler_domain = url.netloc
        HTTPSampler_protocol = url.scheme
        HTTPSampler_path = requestDic["request"]["path"]
        HTTPSampler_method = requestDic["request"]["method"]
        HTTPSampler_params = requestDic["request"]["params"]
        HTTPSampler_body = requestDic["re
  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值