JMeter中利用Jython运行Python代码

news2024/9/26 1:26:50

介绍

Jython是Python和Java的结合。Jython语法和Python一样,不但可以使用Python的库,而且还可以调用Java的库。结合了Python和Java的优点,也就是说Jython既有动态语言的灵活性,又可以用静态语言的强大的类库。其实,我理解 Jython 说简单一些,就是用 Java 语言实现的 Python 解释器,这种关系也就意味着你可以用 Python 语言编写程序而同时使用 Java 库。

Jython使用Python2编写,可以在Beanshell中直接编写Python代码,不需要安装Python2解析器。

JMmter中的使用

官网 /  使用手册

jmeter运行Python的依赖包:jython-standalone-2.7.2.jar 下载完成后放到jmeter目录下的lib/ext 下,重启jmeter。

Jython中包含的包

Jython中含有的python包:

https://github.com/jython/jython/tree/master/lib-python/2.7

https://github.com/jython/jython/tree/master/Lib

在 Jython 中,导入语句是一个可以出现在源文件中任何位置的表达式,甚至可以有条件地执行。

外部包导入

Python:同名的包,导入的第一个 python 模块或包会阻止其他模块或包的导入。

Java包:都可以导入;

jython只支持python2,如若导入python3的包,部分会出现不兼容的情况(兼容部分是可以使用的);

# 导入第三方包示例
import sys
sys.path.append('C:\Users\laiqu\AppData\Local\Programs\Python\Python27\Lib')
sys.path.append('C:\Users\laiqu\AppData\Local\Programs\Python\Python27\Lib\site-packages')

 

 应用示例

示例1:JMeter中使用Python进行断言

import sys
reload(sys)
#保证结果树的响应数据中的中文不为乱码,否则会提示错误信息:jmeter python Cannot create PyString with non-byte value
sys.setdefaultencoding('utf8')  


# 获取msg变量
msg = vars.get("msg")
# 打印msg
log.info(msg)
# 判断msg 是否等success,是则断言通过,否则断言失败
if msg == "success":
    AssertionResult.setFailure(False)
else:
    AssertionResult.setFailure(True)

示例2:JMeter中运行Python数据处理

import sys
reload(sys)
sys.setdefaultencoding('utf8')      #保证结果树的响应数据中的中文不为乱码,否则会提示错误信息:jmeter python Cannot create PyString with non-byte value

# python脚本:将jmeter的变量赋值到python,然后对其进行排序,并输出排序后的字符串。
a = vars.get("b")                         #jmeter的变量b赋值到python
print ("将a排序显示,办法1(列表):")
lista = list(a)                                 #字符串转为列表
lista.sort()                                    #列表排序
bb = str(lista)
newa = ''                                      #创建一个空字符串
for i in lista:
     newa= newa+i                        #排序后的列表每项加给新字符串
vars.put("newaj",newa);              #排序后的字符串赋值给jmeter的变量newaj
c = vars.get('newaj')                    #将newaj的值给变量c
SampleResult.setResponseData("原字符串:"+"${b}"+'\n'+"排序后的字符串使用vars.get打印出:"+vars.get('newaj')+'\n'+"or直接使用变量打印出:"+c);      
# 响应信息输出,可直接使用vars.get('newaj') 输出,也可使用变量vars.get('newaj') 输出。
SampleResult.setSuccessful(True)
SampleResult.setResponseCode("200")

#获取jmeter 参数
param =vars.get("param")
print "hello"
# 设置响应信息
SampleResult.setResponseData("{'msg':'success'}");
SampleResult.setResponseCode("200")
SampleResult.setSuccessful(True)

示例3:JMeter中连接Mysql

import sys
reload(sys)
sys.setdefaultencoding('utf8')     #设置默认编码方式
from com.ziclix.python.sql import zxJDBC

DADABASE = {
    'NAME': '',  # 数据库实例名
    'USER': '',  # 用户名
    'PASSWORD': '',  # 密码
    'HOST': 'mysql-sit.shenlanbao.com',  # 服务器ID(或域名)
    'PORT': '3306',  # 端口号
}

def select(query_sql):
    driver = "com.mysql.jdbc.Driver"
    url = "jdbc:mysql://t8888service"
    conn = zxJDBC.connect(url , DADABASE["USER"] , DADABASE["PASSWORD"] , driver)
    cur = conn.cursor()
    cur.execute(query_sql)
    data = cur.fetchall()
    conn.close()
    return data

data = select(query_sql="select * from customer where id < 10")

for i in data:
    log.info("---------------"+str(i))

封装成类

import sys

reload(sys)
sys.setdefaultencoding('utf-8')  # 设置默认编码方式
from com.ziclix.python.sql import zxJDBC

class Db():
    def __init__(self):
        url = "jdbc:mysql://mysql.com/consult-service?useUnicode=true&characterEncoding=utf8"
        self.conn = zxJDBC.connect(url, "username", "password", "com.mysql.jdbc.Driver", charset='utf-8')
        self.cur = self.conn.cursor()
        
    def __del__(self):
        self.conn.close()
        
    def close(self):
        self.__del__()
        
    def select(self, query_sql):
        self.cur.execute(query_sql)
        # 把结果转成dict返回(时间格式有点问题)
        dict_list = [dict(zip([key[0] for key in self.cur.description], values)) for values in self.cur.fetchall()]
        return dict_list
        
    def write(self, sql):
        dict_list = self.cur.execute(sql)
        self.conn.commit()
        return dict_list


db = Db()

query_sql = "select * from customer where id <10"
dict_list = db.select(query_sql = query_sql)
log.info("---------------" + str(type(dict_list)))
for i in dict_list:
    log.info("---------------" + i['phone_operator'])

query_sql = "update customer set gender = 1 where id = 1;"
w = db.write(query_sql)
log.info("w2wwwwwwwwwwww"+str(w));

在Python 2中,reload(sys)函数用于重新加载sys模块。sys模块是用于与Python解释器进行交互的系统特定参数和函数的集合。通过重新加载sys模块,你可以更新sys模块中的变量和函数。

在Python 3中,reload()函数已经被移除,可以通过importlib模块中的reload()函数来实现相同的功能。

通常大多数人执行reload(sys)这条语句其实仅仅是为了能够修改Python的默认字符集,也就是能够调用sys.setdefaultencoding()。python的默认的编码是ascii,当程序中出现非ascii编码时,python会报错UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0x?? in position 1: ordinal not in range(128)

zxJDBC.connect( *, *, *, "com.mysql.jdbc.Driver", charset='utf-8'),不同数据库类型,参考JDBC连接池写就好。

 

示例4:引用Java包与方法

from com.tool import JsonUtil
// JsonUtil 是Java包
jsonutil = JsonUtil()

responseString = prev.getResponseDataAsString();
getJsonPathDate = jsonutil.ParaseJson(responseString,"$..token")
log.info("------------"+getJsonPathDate);

导入说明

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Unity进阶–通过PhotonServer实现联网登录注册功能(客户端)–PhotonServer(三)

文章目录 Unity进阶–通过PhotonServer实现联网登录注册功能(客户端)–PhotonServer(三)前情提要客户端部分 Unity进阶–通过PhotonServer实现联网登录注册功能(客户端)–PhotonServer(三) 前情提要 单例泛型类 using System.Collections; using System.Collections.Generic; …

Android6:片段和导航

创建项目Secret Message strings.xml <resources><string name"app_name">Secret Message</string><string name"welcome_text">Welcome to the Secret Message app!Use this app to encrypt a secret message.Click on the Star…

周末时间在家重新做了一个电脑系统,手艺没有丢!!!

有个朋友的电脑抱怨自己太卡&#xff0c;有缘见过几次他的电脑&#xff0c;确实哦&#xff0c;10年的老笔记本了&#xff0c;关键还是日本买的东芝t552,配置4G500G&#xff0c;昨天晚上朋友提过来的时候&#xff0c;大吃已经&#xff0c;还以为是电磁炉呢。看下面的图片就知道了…

平方数之和(力扣)双指针 JAVA

给定一个非负整数 c &#xff0c;你要判断是否存在两个整数 a 和 b&#xff0c;使得 a&#xff3e;2 b&#xff3e;2 c 。 示例 1&#xff1a; 输入&#xff1a;c 5 输出&#xff1a;true 解释&#xff1a;1 * 1 2 * 2 5 示例 2&#xff1a; 输入&#xff1a;c 3 输出&am…

Linux系统调试——核心转储(core dump)

本篇讲解Linux应用程序发生Segmentation fault段错误时&#xff0c;如何利用core dump文件定位错误。 核心转储 在 Linux 系统中&#xff0c;常将“主内存”称为核心(core)&#xff0c;而核心映像(core image) 就是 “进程”(process)执行当时的内存内容。 当进程发生错误或…

计算机竞赛 图像识别-人脸识别与疲劳检测 - python opencv

文章目录 0 前言1 课题背景2 Dlib人脸识别2.1 简介2.2 Dlib优点2.3 相关代码2.4 人脸数据库2.5 人脸录入加识别效果 3 疲劳检测算法3.1 眼睛检测算法3.3 点头检测算法 4 PyQt54.1 简介4.2相关界面代码 5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是…

LVS-DR模型实例

一、LVS-DR集群介绍 LVS-DR&#xff08;Linux Virtual Server Director Server&#xff09;工作模式&#xff0c;是生产环境中最常用的一 种工作模式。 1、LVS-DR 工作原理 LVS-DR 模式&#xff0c;Director Server 作为群集的访问入口&#xff0c;不作为网关使用&#xff0…

借助Midjourney创作龙九子图

&#xff08;本文阅读时间&#xff1a;5 分钟&#xff09; 《西游记》中有这么一段描写&#xff1a; 龙王道&#xff1a;“舍妹有九个儿子。那八个都是好的。第一个小黄龙&#xff0c;见居淮渎&#xff1b;第二个小骊龙&#xff0c;见住济渎&#xff1b;第三个青背龙&#xff0…

Linux 消息队列的创建与使用

消息队列的创建与使用 进程a发送一条消息&#xff0c;进程b读取消息。 a.c代码&#xff1a; b.c代码&#xff1a; 1.a进程创建向消息队列&#xff0c;并向消息队列中发送消息 运行a程序之前&#xff0c;当前系统中消息队列的数量为0&#xff1a; 运行一次a程序&#xff0c;消…

JVM——StringTable面试案例+垃圾回收+性能调优+直接内存

JVM——引言JVM内存结构_北岭山脚鼠鼠的博客-CSDN博客 书接上回内存结构——方法区。 这里常量池是运行时常量池。 方法区 面试题 intern()方法 intern() 方法用于在运行时将字符串添加到内部的字符串池stringtable中&#xff0c;并返回字符串池stringtable中的引用。 返…

【rust/egui】(三)看看template的app.rs:序列化、持久化存储

说在前面 rust新手&#xff0c;egui没啥找到啥教程&#xff0c;这里自己记录下学习过程环境&#xff1a;windows11 22H2rust版本&#xff1a;rustc 1.71.1egui版本&#xff1a;0.22.0eframe版本&#xff1a;0.22.0上一篇&#xff1a;这里 serde app.rs中首先定义了我们的Templ…

2023.8.19-2023.8.XX 周报【人脸3D+虚拟服装方向基础调研-Cycle Diffusion\Diffusion-GAN\】更新中

学习目标 1. 这篇是做diffusion和gan结合的&#xff0c;可以参照一下看看能不能做cyclegan的形式&#xff0c;同时也可以调研一下有没有人follow这篇论文做了类似cyclegan的事情 Diffusion-GAN论文精读https://arxiv.org/abs/2206.02262 2. https://arxiv.org/abs/2212.06…

python——json、字典的区别及相互转换方法

前言 json&#xff0c;是一种轻量级的数据交换格式&#xff0c;由JavaScript语言创建&#xff0c;广泛应用于网页数据交互&#xff0c;常见于爬虫和数据分析领域。 json格式简洁、结构清晰&#xff0c;存储格式为&#xff1a;键值对&#xff08;key:value&#xff09; 在pytho…

创作的1024天 分享月入5K的副业心得

机缘 今天早上醒来打开电脑&#xff0c;和往常一样点开csdn&#xff0c;看见有一封私信&#xff0c;原来是系统通知&#xff0c;今天是我成为创作者的1024天&#xff0c;那就趁着这个机会&#xff0c;分享一下目前我月入5K的副业心得。我是一个普通人&#xff0c;最初想成为创…

【100天精通python】Day41:python网络爬虫开发_爬虫基础入门

目录 专栏导读 1网络爬虫概述 1.1 工作原理 1.2 应用场景 1.3 爬虫策略 1.4 爬虫的挑战 2 网络爬虫开发 2.1 通用的网络爬虫基本流程 2.2 网络爬虫的常用技术 2.3 网络爬虫常用的第三方库 3 简单爬虫示例 专栏导读 专栏订阅地址&#xff1a;https://blog.csdn.net/…

提高 Snowflake 工作效率的 6 大工具

推荐&#xff1a;使用 NSDT场景编辑器 助你快速搭建可二次编辑的3D应用场景 Snowflake 彻底改变了企业存储、处理和分析数据的方式&#xff0c;提供了无与伦比的灵活性、可扩展性和性能。但是&#xff0c;与任何强大的技术一样&#xff0c;要真正利用其潜力&#xff0c;必须拥有…

vsCode使用cuda

一、vsCode使用cuda 前情提要&#xff1a;配置好mingw&#xff1a; 1.安装cuda 参考&#xff1a; **CUDA Toolkit安装教程&#xff08;Windows&#xff09;&#xff1a;**https://blog.csdn.net/qq_42951560/article/details/116131410 2.在vscode中添加includePath c_cp…

VS2015打开Qt的pro项目文件 报错

QT报错&#xff1a;Project ERROR: msvc-version.conf loaded but QMAKE_MSC_VER isn‘t set 解决方法&#xff1a; 找到本机安装的QT路径&#xff0c;找到“msvc-version.conf”文件&#xff0c;用记事本打开&#xff0c; 在其中添加版本“QMAKE_MSC_VER 1900”保存即可。 …

2023-8-18 二进制中1的个数

题目链接&#xff1a;二进制中1的个数 #include <iostream>using namespace std;int lowbit(int x) {return x&-x; }int main() {int n;cin >> n;for(int i 0; i < n; i){int x;cin >> x;int res 0;while(x) x - lowbit(x), res;cout << re…

sql:知识点记录一

1.Mysql逻辑架构&#xff1a;连接层、服务层、引擎层、存储层 2.show engines&#xff1a;查看存储引擎 3.Mysql两种存储引擎的区别&#xff1a; 建立索引&#xff1a;比如说用户很喜欢用name去查询表&#xff0c;就可以给数据库的name字段建立索引&#xff0c;提高查询效率&a…