Jmeter中使用py插件

-安装插件

1、下载插件jython-standalone-2.7.0.jar到jmeter的lib\ext目录下

链接:
https://pan.baidu.com/s/13ZXtUwoQEV62M98GaIR26w

提取码:ioyk

2、重启jmeter,查看是否生效,如果这个语言有python的选项说明可以了,注意这里支持的是python2,没有支持python3的插件呢(如果你没有安装py2,也不会有py2的选项)

 3、插件管理器下载插件(尽管没有搜索到对应的插件)

jmeter官网(除了慢没有毛病):Apache JMeter - Apache JMeter™

插件管理器下载地址:https://jmeter-plugins.org/install/Install/

然后我们将下载下来的jar包放入JMeter目录下的lib/ext目录,重启jmeter

然后我们会发现JMeter的选项下回多出一个新东西,这个就是我们的插件管理器了

虽然这里没有这个插件!!!!!哈哈哈哈哈

- 处理请求前参数

被测试接口中参数需要处理加工,利用JSR223 Sampler做入参处理,你要将控件放在http Request 控件之前

1、jmeter内置变量vars

你在用户参数中定义的参数都是放入jmeter的vars中的

获取参数:vars.get(参数名string类型)

放入参数:vars.put(参数名string类型,string类型的value)

2、其他代码参考python语法即可

我的示例:我把一些参数没有值的情况给予默认值,可做安全参数转化,特殊入参的拼接,直接上代码吧

import random
import re

def tian_code(ctt):
    """把入参做安全传输转化"""
    pattern1 = re.compile(r"\/")
    pattern2 = re.compile(r"[\'\"]")
    res = re.sub(pattern2,r"\'",ctt)
    res = re.sub(pattern1,r"\/",res)   
    return res
#一些固定值
vars.put("mode","strategy")
vars.put("pid","homework")
vars.put("token","200075")
vars.put("qid","${__Random(10000000,99999999,)}")
vars.put("rid","${__Random(10000000,99999999,)}")
#一些非固定值处理没有入参值时给如默认值
dict_param = {}
dict_param["uid"] = vars.get("uid")
dict_param["content"] = vars.get("content")
dict_param["avatar"] = vars.get("avatar")
dict_param["uname"] = vars.get("uname")
dict_param["title"] = vars.get("title")
dict_param["pic"] = vars.get("pic")
for k,v in dict_param.items():
    if not v:
        if k=="uid":
            dict_param[k]= str(random.randint(11111111,99999999))
        elif k =="pic":
            dict_param[k]= "https://b-ssl.duitang.com/uploads/item/201807/17/20180717232644_resnw.thumb.700_0.jpg"
        else:
            dict_param[k]= u"${__RandomString(11,unicode,)}"
    dict_param[k] = tian_code(dict_param[k])
    vars.put(k,dict_param[k] )


#unique_key的拼接
unique_key = str(vars.get("pid"))+"_"+str(vars.get("token"))+"_"+ str(vars.get("qid")) +"_"+str(vars.get("rid"))+"_"+str(vars.get("uid"))
vars.put("unique_key",unique_key )

- 处理断言

1、在http请求控件右键添加JSR223Assertion

2、常用的内置参数

(1)获取http请求的结果:prev.getResponseDataAsString()

(2)修改请求断言结果:AssertionResult.setFailure(False)或者True

(3)修改断言失败信息:AssertionResult.setFailureMessage( u"失败\n"+vars.get("msg"))

(4)返回参数是json但是为字符串格式,转化的时候我用eval方式拿出参数,json包使用报错

图片

给予我自己的代码做参考:

log.info(u"+++++++++++{}_{}_处理结果+++++++++++++++".format(vars.get("Tname"), vars.get("ceshi")))
name = vars.get("Tname")
# setThreadName(u"{}".format(name))
response = prev.getResponseDataAsString()
log.info("response:" + response)
vars.put("result", response)

def other_action(param, test):
    result_other = {}
    if isinstance(param, dict):
        for k, v in param.items():
            if v != "default" and k != test:
                result_other[k] = v
    return result_other

myResult = vars.get("result")
test = vars.get("ceshi")
res = eval(myResult)
error = str(res["errno"])
is_success = 1
errMsg = u""
action = ""
result_other = ""
if error == "0":
    result = eval(res["result"])
    action = result[test]
    if action not in ("PutFile", "DivertDel", "smartmis"):
        is_success = 0
        result_other = other_action(result, test)
        if action == "smartmis" and len(result_other) != 0:
            is_success = 0
else:
    is_success = 0
    errMsg = eval(str(res["result"]))
re = ""
if action:
    re += u"期望action({}_{}):{}".format(name, test, action)
else:
    re += u"期望action({}_{}):没有结果".format(name, test)
if result_other:
    re += u"其他命中策略有:{}".format(str(result_other))
if errMsg:
    re += u"错误日志是:{}".format(errMsg)

vars.put("is_success", str(is_success))
vars.put("msg", re)

log.info(u"+++++++++++{}_{}断言+++++++++++++++".format(name, test))
log.info(vars.get("is_success"))

if (vars.get("is_success") == "1"):
    AssertionResult.setFailure(False)
    AssertionResult.setFailureMessage(u"成功\n" + vars.get("msg"))
else:
    AssertionResult.setFailure(True)
    AssertionResult.setFailureMessage(u"失败\n" + vars.get("msg"))
log.info(AssertionResult.getFailureMessage())

#以下为数据库断言使用参数
if action == "smartmis":
    vars.put("dbNum", str(1))
else:
    vars.put("dbNum", str(0))

- 我们一起看看我的成果吧

 

调试的时候可以加一个Debug Sampler去看你所有的jmeter内置参数值,或者打开日志去看

失败的情况

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/257683.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Excel怎样统计一列中不同的数据分别有多少个?

文章目录 1.打开Excel数据表2.选择“插入”,“数据透视表”3.选择数据透视表放置位置4.将统计列分别拖到“行”和“数值”区间5.统计出一列中不同的数据分别有多少个 1.打开Excel数据表 2.选择“插入”,“数据透视表” 3.选择数据透视表放置位置 4.将统计…

【Ehcache技术专题】「入门到精通」带你一起从零基础进行分析和开发Ehcache框架的实战指南(3-储存方式)

这里写目录标题 Ehcache的存储方式堆内存(MemoryStore)指定可用内存Xml代码Xml代码Xml代码 驱除策略元素过期Xml代码 非堆内存(BigMemory)磁盘(DiskStore)指定可用容量Xml代码 元素过期 Ehcache的存储方式 …

PyCharm关闭项目很慢

我的版本: PyCharm 2023.2.5 (Professional Edition) 问题: 关闭项目的时候显示一直在关闭项目 (单次解决:任务管理器里面杀掉PyCharm) 解决方案: 在PyCharm中按下快捷键 CtrlShiftA。 输入Registry或…

python画图【01】

前提:使用anaconda环境,且安装好,使用的是jupyter pandas 和 matplotlib 安装教程可以参考:miniconda安装与使用 import pandas as pd读取xlsx表格数据 data pd.read_excel("data1.xlsx",sheet_nameSheet1) #data p…

vue内容渲染

内容渲染指令用来辅助开发者渲染DOM元素的文本内容。常用的内容渲染指令有3个 1.v-text 缺点:会覆盖元素内部原有的内容 2.{{}}:插值表达式在实际开发中用的最多,只是内容的占位符,不会覆盖内容 3.v-html:可以把带有标…

详细教程 - 进阶版 鸿蒙harmonyOS应用 第十二节——鸿蒙操作系统中的动画效果封装:Java和TypeScript版

简介 动画效果是开发鸿蒙应用时的一个重要功能。在这篇文章中,我们将详细探讨如何在鸿蒙系统中使用Java和TypeScript实现动画效果的封装,并提供一些代码示例。 Java版动画效果的实现 在鸿蒙操作系统中,我们可以使用ohos.agp.animation.Anima…

基于SSM的马病管理系统的设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

MyBatis首次使用并查询数据库中表的数据

文章目录 MyBatis首次使用并查询数据库中表的数据1、传统Jdbc代码问题分析传统JDBC存在的问题 2、MyBatis框架概述3、MyBatis入门案例3.1、使用idea创建一个maven项目后,修改pom.xml文件中内容为:3.2、在src-main-resources下创建log4j.properties和myba…

APM联合gazebo进行固定翼仿真

一、事情起因 由于项目使用的是固定翼飞机,然后又要求使用的是APM固件,所以之前对PX4固件就需要从新来过。 1.1 APM的飞行模式 固定翼常见的飞行模式 MANUAL:手动模式 等效于不加飞控直接使用遥控器控制飞机。FBWA:fly by wir…

深度学习 Day19——P8YOLOv5-C3模块实现

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 | 接辅导、项目定制 文章目录 前言1 我的环境2 代码实现与执行结果2.1 前期准备2.1.1 引入库2.1.2 设置GPU(如果设备上支持GPU就使用GPU,否则使用C…

RuoYi-Vue分离版集成MQTT客户端,超详细版

一:前言 1、使用场景:最近对接物联网开发需要集成MQTT进行消息订阅 2、前置准备:首先需要下载部署好MQTT服务(推荐emqx),在我上一条博客里面有详细步骤,官方文档部署的也非常详细(…

【QT】C++/Qt使用Qt自带工具windeployqt打包

基本操作 运行项目debug或者release 将运行后的可执行文件单独放到一个文件夹中 根据项目使用的kits来选择Qt的打包工具 打开工具后移动到exe文件夹下执行windeployqt xxx.exe 预览图 问题 打包后再其他电脑上运行出现下图错误 将自己电脑的这个文件拷到可执行文件夹中既…

一文读懂什么是智能工厂?

引言 在当今快速变革的制造业中,智能工厂如一盏明灯,照亮着未来生产的道路。它们不仅代表着技术的进步,更是制造业向前迈进的里程碑。智能工厂利用先进的技术和创新方法,将传统工厂转化为高度自动化、数字化和智能化的生产中心。…

SpringMVC01

SpringMVC 1. 学习⽬标2. 什么叫MVC?3. SpringMVC 框架概念与特点4. SpringMVC 请求流程5. Spring MVC 环境搭建6. URL 地址映射配置7. 参数绑定8. JSON 数据开发JSON普通数组步骤1:pom.xml添加依赖步骤2: 修改配置⽂件步骤3. 注解使⽤ 1. 学习⽬标 2. 什…

LeetCode Hot100 79.单词搜索

题目: 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那…

[C++] 多态(下) -- 多态原理 -- 动静态绑定

文章目录 1、多态原理2、动态绑定和静态绑定3、单继承和多继承关系的虚函数表3.1 单继承中的虚函数表5.2 多继承中的虚函数表 上一篇文章我们了解了虚函数表,虚函数表指针,本篇文章我们来了解多态的底层原理,更好的理解多态的机制。 [C] 多态…

文件操作(下)

标题的顺序是接着之前写的,希望这篇博客对你有帮助 七. 随机读写函数 实际上,无论是读还是写,在一次调用顺序读写函数,文件指针会移到已经读过或者写过的下一个位置,从那个位置开始下一次读和写(在文件没有…

Jenkins插件安装失败时这么做就搞定啦!

1.网络或墙的问题导致插件下载安装失败 这种错误提示很明显,就是无法连接到插件下载地址,导致插件下载失败。 解决方法 为Jenkins更换源 点击Jenkins主页面左侧列表中【系统管理】—— 下拉找到【管理插件】 选择【高级】选项卡 替换最下方【升级站点…

JS基础之模块化

JS基础之模块化 JS模块化模块化前端发展 什么是模块?怎么定义模块化IIFE匿名函数自调用IIFE模式增强模块化的好处 JS模块化 模块化 JS DOM操作 代码规范管理的标准 不同模块间的管理模块内部自组织 标准bundler (模块构建工具) ESNext TS -> ES5 前端发展 生态 …

第二百一十六回 分享一种更新页面数据的方法

文章目录 1. 概念介绍2. 实现方法2.1 实现思路2.2 实现方法3. 示例代码4. 内容总结我们在上一章回中介绍了"如何创建单例模式"相关的内容,本章回中将 分享一种更新页面数据的方法.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在本章回中介绍一种更新页…
最新文章