Python + Jmeter 实现自动化性能压测

news2025/1/11 5:56:15

Step01: Python脚本开发

文件路径:D://wl//testproject//Fone-grpc//project1//test_client.py

Python 脚本作用:

1.通过 grpc 调用底层 c++ 的接口,做数据库的数据插入与查询操作,然后将返回的结果进行拼接与输出。

2.代码里面将每一次调用后返回的内容进行拼接后,并做了成功信息的统计,输出成功的次数为3,输出后会转给 jmeter 里面的脚本获取。

from __future__ import print_function
import logging
import sys
import grpc
import Storage_pb2      # Storage_pb2.py which contains our generated request and response classes
import StorageService_pb2_grpc # StorageService_pb2_grpc.py which contains our generated client and server classes.

host="10.10.1.117:50066"

def run():
    result=""
    with grpc.insecure_channel(host) as channel:
        resp0=StorageService_pb2_grpc.FOneStorageStub(channel).InsertKVS(Storage_pb2.PUpsertKVS(
            DBName="MergeLog",TableName="MergeLog",KeyValues=[{"Key":b'',"Key":b''}],Upsert=True,Transaction=True
        ))
        result+=str(resp0)

    with grpc.insecure_channel(host) as channel:
        stud1=StorageService_pb2_grpc.FOneStorageStub(channel)
        resp1=stud1.InsertV(Storage_pb2.PInsertV(DBName="MergeLog", TableName="MergeLog", Value=b"1"))
        result += str(resp1)
     
    with grpc.insecure_channel(host) as channel:
        stud2=StorageService_pb2_grpc.FOneStorageStub(channel)
        resp2=stud2.FindOne(Storage_pb2.PFindK(DBName="MergeLog", TableName="MergeLog", Key="1"))
        result += str(resp2)

    result=result.replace("\n", " ")
    result=result.count("Successful return: 0")
    print(result)


if __name__ == '__main__':
    logging.basicConfig()
    run()

PS:在本地调试好脚本,确保符合预期。

Step02: Jmeter 创建 beanshell 取样器

脚本内容如下:

import java.io.BufferedReader;
import java.io.InputStreamReader;

log.info("----------------------------start to exe");
String command = "cmd /c python D://wl//testproject//Fone-grpc//project1//test_client.py"; //定义要执行的python文件路径
String var;
Runtime rt = Runtime.getRuntime();
Process pr = rt.exec(command);  //执行上面的python脚本
pr.waitFor()
BufferedReader b = new BufferedReader(new InputStreamReader(pr.getInputStream())); // 转换执行脚本后的返回响应
String line = "";
StringBuilder response = new StringBuilder();
while ((line = b.readLine()) != null) {
     response.append(line);
} 
String response_data = response.toString();
log.info(response_data);
if(response_data.equals("3")){ // 判断响应的内容是否有3次,如果不是3次就表示执行失败了
 log.info("---------------------------success end exe");
}else{
 log.error("--------------------------failed end exe"); //这里的输出一次会记录一次失败次数
}
b.close();

Step03: 执行效果

通过 jmeter 工具进行并发操作,对后端底层接口进行压力测试,效果不错,效果图如下所示。

图片

Step04: Jmeter日志输出

2023-02-22 17:26:08,539 INFO o.a.j.t.JMeterThread: Stopping because end time detected by thread: 线程组--python 1-33
2023-02-22 17:26:08,539 INFO o.a.j.t.JMeterThread: Thread finished: 线程组--python 1-33
2023-02-22 17:26:08,597 INFO o.a.j.u.BeanShellTestElement: 3
2023-02-22 17:26:08,597 INFO o.a.j.u.BeanShellTestElement: ---------------------------success end exe
2023-02-22 17:26:08,598 INFO o.a.j.t.JMeterThread: Stopping because end time detected by thread: 线程组--python 1-82
2023-02-22 17:26:08,598 INFO o.a.j.t.JMeterThread: Thread finished: 线程组--python 1-82
2023-02-22 17:26:08,608 INFO o.a.j.u.BeanShellTestElement: 2
2023-02-22 17:26:08,608 ERROR o.a.j.u.BeanShellTestElement: --------------------------failed end exe

如果今天的分享对你有帮助的话,请毫不犹豫:关注、分享、点赞、在看、收藏呀~

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

在这里插入图片描述

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!   

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

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

相关文章

optimizer和loss.backward()相关函数

optimizer.zero_grad() # 梯度清零(一定要先进行梯度清零,这样tensor里面的grad就不会累加) loss.backward()是用来求导的 optimizer.step()一般来说根据求来的导数进行梯度下降算法来更新参数 上面的顺序步骤不能变

Idea启动报错start failed闪退, RestfulToolkit-fix插件问题

前一天下班时还在正常使用的Idea,早上再次启动就报错闪退,报错信息非常的快的闪退也没有看清楚。做过的唯一更改就是前一天安装了 RestfulToolkit-fix 插件。 1、先查看报错的日志 在Idea安装路径的bin/ idea.bat文件中末尾处添加pause语句 保存后双击…

Python绘图系统16:动态更新tkinter组件

文章目录 前情提要源代码模式输入序列源码 Python绘图系统: 📈从0开始的3D绘图系统📉一套3D坐标,多个函数📊散点图、极坐标和子图自定义控件:极坐标📉绘图风格📉风格控件图表类型和…

软件产品(确认)有效性测试的作用和流程

一、基本概述 软件确认测试又称有效性测试,是在模拟的环境下,运用黑盒测试的方法,验证被测软件是否满足需求规格说明书列出的需求。任务是验证软件的功能和性能及其他特性是否与用户的要求一致。对软件的功能和性能要求在软件需求规格说明书…

数据清洗浅谈与理解

1.前言 今天和老同学交流了翻技术,准确的说是争执与讨论,谈到了数据清洗,特此记录一下对清洗的理解,分享与学习 2.数据清洗 下图出自小D课堂,本人也为小D课堂的忠实粉丝 类比现实去理解 ODS :未处理的…

【MapStruct】对象转换

【MapStruct】对象转换 【一】MapStruct带来的改变【二】MapStruct 入门【1】添加依赖【2】po类【3】dto类【4】创建转换接口【5】测试方法【6】运行效果【7】查看编译的class 【三】MapStruct优点分析【1】性能高【2】使用简单【3】代码独立【4】易于 debug 【四】MapStruct使…

【python 多线程】初体验+单线程下载器+多线程并行下载器+ 多进程下载器 以及线程和进程的切换成本比较

前置知识: ref:https://www.osgeo.cn/pillow/reference/ImageFile.html ref:https://blog.csdn.net/weixin_67510296/article/details/125207042 1.多线程初体验 主线程的id和进程的id是一个 查看进程pid下有多少个线程 ps -T -p pid(bas…

《追逐胜利:编程之路上的三子棋游戏实践》

文章目录 前言一、三子棋游戏规则二、步骤详解1.游戏菜单的实现2.棋盘的实现2.1 初始化棋盘2.2 打印棋盘 3.游戏逻辑实现3.1 玩家下棋3.2 电脑下棋 4.判断输赢4.1 win函数实现 5.完整代码 总结 前言 大家好!我是艾老虎尤!今天我很高兴来和大家分享我最近…

【linux基础(五)】Linux中的开发工具(上)---yum和vim

💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:Linux从入门到开通⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学更多操作系统知识   🔝🔝 Linux中的开发工具 1. 前言2.…

CMD 命令和 ENTRYPOINT 命令的区别

目录 CMD 命令CMD-shell 形式1. 创建 Dockerfile12. 构建和运行新镜像3. 覆盖 CMD4. 添加命令选项 CMD-exec形式1. 创建Dockerfile2、构建和运行新镜像2.覆盖 CMD和添加命令选项 ENTRYPOINT 命令ENTRYPOINT-shell1. 创建Dockerfile3、构建和运行新镜像2. 覆盖 ENTRYPOINT 和 添…

华为云云耀云服务器L实例评测|了解配置和管理L型云服务器

华为云云耀云服务器L实例配置和管理教程 华为云云耀云服务器L实例的介绍概述特点优势与弹性云服务器(ECS)的对比 注册和创建L型云服务器注册华为云账号创建L型云服务器实例配置实例参数配置其他参数尝试登录 远程登录 L实例查看公网ip通过本地shell远程连…

QT Pyside2 Designer 的基本使用

文章目录 前言PySide2PySide2 Designer 一、安装PySide2、PyQt5二、使用designer.exe2.1 工具的大致介绍2.2 创建一个新的UI2.3 UI文件另存为/保存(CtrlS)2.4 使用python操作UI文件 总结 前言 PySide2 QT PySide2 是一个用于 Python 编程语言的开源框架,它提供了与…

【建站教程】使用阿里云服务器怎么搭建网站?

使用阿里云服务器快速搭建网站教程,先为云服务器安装宝塔面板,然后在宝塔面板上新建站点,阿里云服务器网以搭建WordPress网站博客为例,阿小云来详细说下从阿里云服务器CPU内存配置选择、Web环境、域名解析到网站上线全流程&#x…

(10)(10.9) 术语表(一)

文章目录 前言 1 2.4Ghz 2 AGL 3 AHRS 4 APM 5 AMA 6 Arduino 7 APM (AutoPilot Mega) 8 ATC 9 Copter 10 Plane 11 Rover 12 BEC 13 Bootloader 14 COA 15 DCM 16 Eagle file 17 ESC 18 Firmware 19 FPV 20 FTDI 前言 !Note 术语表未编入索…

C++零碎记录(十二)

22. 菱形继承 22.1 菱形继承简介 ① 菱形继承概念: 1. 两个派生类继承同一个基类 2. 又有某个类同时继承两个派生类 3. 这种继承被称为菱形继承 ② 羊继承了动物的数据,驼同样继承了动物的数据,当草泥马使用数据是,就会产生二义…

重构:在新底座之上让应用重生

应用重构正在开启一条云原生时代的新赛道。 数字化发展到今天,企业面临的挑战不仅来自技术层面,更来自认知层面。新架构、新应用正在重新定义数字生产力,重塑商业模式与市场核心竞争力。对金融行业来说,也是如此,一场…

计算机网络第六章——应用层(上)

人生若只如初见,何事秋风悲画扇 文章目录 基于服务的使用以及服务的提供而诞生的两个应用模型, 传输层提供一种端到端的服务,但是不同的网络应用的应用进程之间还需要有一些不同的通信规则,因此在传输层之上建立了一个应用层&am…

信息化管理工程验收评测规范

一、信息工程验收程序: 1.信息化建设项目验收分为初步验收和竣工验收两个阶段。验收由建设单位自行对照招标文件、投标文件和合同执行,并提交初验报告;企业与第三方联系实施验收。 2.工程试运行后30个工作日内,项目建设单位应将…

[计算机入门] 设置日期和时间

3.8 设置日期和时间 在任务栏的最右边是可以看到当前的日期和时间的。当然,如果这里的显示不对,也是可以进行设置的。 1、在任务栏的日期和时间位置,右键鼠标,在弹出的菜单中,点击调整日期/时间。 2、一般情况下&am…

easypoi和poi版本兼容问题记录

最近在开发导出word的功能,遇到下面的问题 提示xml报错的问题,我一度以为是项目换了java11造成的。经过询问朋友,得知有可能是版本冲突造成的,就猛然想起来,我的项目里面还引入了poi这个包。 于是我吧poi的版本降低到了…