当前位置: 首页 > news >正文

Python生成JMeter测试脚本----HTTP信息头管理器和用户定义的变量

前言

之前的文章写了怎么用python生成JMeter脚本,生成了测试计划、线程组、Http监听器组件、响应断言、查看结果树、汇总报告、聚合报告、响应时间图。本篇内容接着讲怎么用python生成HTTP信息头管理器和用户定义的变量组件。

HTTP信息头管理器

信息头管理器的内容比较简单,主要包括了名称,注释和请求头参数。使用set方法设置好参数后,用get方法生成组件。

import xml.etree.ElementTree as ET
from base import Generalclass JMeterHeaderManager:def __init__(self):self.__name = 'HTTP信息头管理器'self.__comments = ''self.__headers = {}def get_name(self):return self.__namedef set_name(self, name):self.__name = namedef get_comments(self):return self.__commentsdef set_comments(self, comments):self.__comments = commentsdef get_headers(self):return self.__headersdef set_headers(self, headers):self.__headers = headersdef get(self, parent):header_manager_prop = ET.SubElement(parent, 'HeaderManager')header_manager_prop.set('guiclass', 'HeaderPanel')header_manager_prop.set('testclass', 'HeaderManager')header_manager_prop.set('testname', self.__name)if self.__comments != '':comments_prop = General.add_str_prop(self, header_manager_prop, 'TestPlan.comments', self.__comments)collection_prop = ET.SubElement(header_manager_prop, 'collectionProp')collection_prop.set('name', 'HeaderManager.headers')if self.__headers:for key, value in self.__headers.items():element_prop = ET.SubElement(collection_prop, 'elementProp')element_prop.set('name', '')element_prop.set('elementType', 'Header')header_value_prop = General.add_str_prop(self, element_prop, 'Header.name', key)header_value_prop = General.add_str_prop(self, element_prop, 'Header.value', value)hashtree = ET.SubElement(parent, 'hashTree')return header_manager_prop

用户定义的变量

用户定义的变量格式和信息头管理器一致,使用方法也一致,对于变量的描述,因为没有实际的用途,所以就不去实现了。

import xml.etree.ElementTree as ET
from base import Generalclass JMeterArguments:def __init__(self):self.__name = '用户定义的变量'self.__comments = ''self.__arguments = {}def get_name(self):return self.__namedef set_name(self, name):self.__name = namedef get_comments(self):return self.__commentsdef set_comments(self, comments):self.__comments = commentsdef get_arguments(self):return self.__argumentsdef set_arguments(self, arguments):self.__arguments = argumentsdef get(self, parent):arguments_prop = ET.SubElement(parent, 'Arguments')arguments_prop.set('guiclass', 'ArgumentsPanel')arguments_prop.set('testclass', 'Arguments')arguments_prop.set('testname', self.__name)arguments_prop.set('enabled', 'true')if self.__comments != '':comments_prop = General.add_str_prop(self, arguments_prop, 'TestPlan.comments', self.__comments)collection_prop = ET.SubElement(arguments_prop, 'collectionProp')collection_prop.set('name', 'Arguments.arguments')if self.__arguments:for key, value in self.__arguments.items():element_prop = ET.SubElement(collection_prop, 'elementProp')element_prop.set('name', key)element_prop.set('elementType', 'Argument')arguments_value_prop = General.add_str_prop(self, element_prop, 'Argument.name', key)arguments_value_prop = General.add_str_prop(self, element_prop, 'Argument.value', value)arguments_value_prop = General.add_str_prop(self, element_prop, 'Argument.desc', '')arguments_value_prop = General.add_str_prop(self, element_prop, 'Argument.metadata', '=')hashtree = ET.SubElement(parent, 'hashTree')return arguments_prop

生成jmeter脚本demo

import xml.etree.ElementTree as ET
import JMeter
from JMeterThreadGroup import JMeterThreadGroup
from JMeterTestPlan import JMeterTestPlan
from JMeterHttpSampler import JMeterHttpSampler
from JMeterResponseAssert import JMeterResponseAssert
from JMeterViewResultsFullVisualizer import JMeterViewResultsFullVisualizer
from JMeterSummaryReport import JMeterSummaryReport
from JMeterStatVisualizer import JMeterStatVisualizer
from JMeterRespTimeGraphVisualizer import JMeterRespTimeGraphVisualizer
from JMeterHeaderManager import JMeterHeaderManager
from JMeterArguments import JMeterArguments
import baseclass GenJMeter:jmeter_script = JMeter.get()hash_tree = ET.SubElement(jmeter_script, 'hashTree')test_plan = JMeterTestPlan()test_plan = test_plan.get(hash_tree)thread_group_tree = ET.SubElement(hash_tree, 'hashTree')thread_group = JMeterThreadGroup().get(thread_group_tree)test_hashtree = ET.SubElement(thread_group_tree, 'hashTree')http_sampler = JMeterHttpSampler()http_sampler.set_params({'test': 123})http_sampler.set_files({'file': 'test.txt'})http_sampler.get(test_hashtree)response_assert = JMeterResponseAssert()response_assert.set_assert_name('断言')response_assert.set_assert_text(['test', '123'])response_assert.set_test_type('2')response_assert.get(test_hashtree)result_collector_prop = JMeterViewResultsFullVisualizer()result_collector_prop.get(test_hashtree)summary_report = JMeterSummaryReport()summary_report.get(test_hashtree)stat_visualizer = JMeterStatVisualizer()stat_visualizer.get(test_hashtree)resp_time_graph = JMeterRespTimeGraphVisualizer()resp_time_graph.get(test_hashtree)header_manager = JMeterHeaderManager()header_manager.set_headers({'Content-Type': 'application/json'})header_manager.get(test_hashtree)arguments = JMeterArguments()arguments.set_arguments({'test': '1111'})arguments.get(thread_group_tree)bases = base.General()tree = ET.ElementTree(jmeter_script)bases.indent(jmeter_script)with open('file.jmx', "wb") as f:tree.write(f, encoding="utf-8", xml_declaration=True, method="xml")

其他组件实现方式待续,后续还有执行测试和生产测试报告

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 使用gitee存储项目
  • Java中的序列化与反序列化深度剖析
  • 分局高清视频监控及监控中心项目-技术方案(下)
  • 【Kotlin设计模式】Kotlin实现适配器模式
  • 硬件面试经典 100 题(81~90)题
  • 【Linux】第十七章 多路转接(select+poll+epoll)
  • 汽车功能安全--AutoSAR中的功能安全机制
  • 报考中国科学院计算技术研究所博士
  • 面向三维分子相互作用学习的通用等变Transformer
  • .NET COER+CONSUL微服务项目在CENTOS环境下的部署实践
  • 保研考研机试攻略(满分篇):第一章——技巧之巅(1)
  • 【系统安全】Kernel Streaming WOW Thunk 服务驱动程序特权提升漏洞(CVE-2024-38054)
  • 16行为型设计模式——策略模式
  • 【FreeRTOS】EventGroup事件标志组
  • spark集群搭建
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • Android 控件背景颜色处理
  • Angular4 模板式表单用法以及验证
  • co.js - 让异步代码同步化
  • js递归,无限分级树形折叠菜单
  • Js基础知识(一) - 变量
  • Mithril.js 入门介绍
  • nodejs实现webservice问题总结
  • Terraform入门 - 1. 安装Terraform
  • 前端学习笔记之观察者模式
  • 手写双向链表LinkedList的几个常用功能
  • 移动端 h5开发相关内容总结(三)
  • 移动端唤起键盘时取消position:fixed定位
  • 由插件封装引出的一丢丢思考
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • #《AI中文版》V3 第 1 章 概述
  • #QT(TCP网络编程-服务端)
  • $NOIp2018$劝退记
  • (C语言)共用体union的用法举例
  • (pojstep1.1.2)2654(直叙式模拟)
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (ZT)薛涌:谈贫说富
  • (阿里云在线播放)基于SpringBoot+Vue前后端分离的在线教育平台项目
  • (八十八)VFL语言初步 - 实现布局
  • (二)linux使用docker容器运行mysql
  • (二)WCF的Binding模型
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (转)Unity3DUnity3D在android下调试
  • ****三次握手和四次挥手
  • **《Linux/Unix系统编程手册》读书笔记24章**
  • .bat文件调用java类的main方法