当前位置: 首页 > 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")

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


http://www.mrgr.cn/news/10235.html

相关文章:

  • 无人机之如何利用无人机进行地形测绘
  • 零基础5分钟上手谷歌云GCP - 服务器自动扩展
  • 5步掌握Python Django开发办公管理系统核心技巧
  • 0818-0824面试题目和复习整理
  • 探索Python数据世界的秘密武器:xlrd库
  • mybatis框架搭建、mybatis打印日志设置、参数传递使用、myatis插件MyBatisX
  • 通过Spring Boot创建项目
  • 用于不平衡分类的 Bagging 和随机森林
  • Redis (day 3)
  • DevOps入门(下)
  • docker切换镜像源
  • 命令执行漏洞-rce
  • 大模型高效利用结构化信息研究:HTML格式或许更好
  • 谷歌浏览器翻译不了网页怎么解决
  • 如何使用ssm实现基于web的药品管理系统+vue
  • 设计模式之Decorator装饰者、Facade外观、Adapter适配器(Java)
  • mysql数据库基本操作
  • Python Web开发Django框架视图应用指导
  • 一个能够生成 Markdown 表格的 Bash 脚本
  • C# 自动化抢购脚本:基于商品链接的实现方案