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

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

Step01: Python脚本开发

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

Python 脚本作用:

通过 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.lryc.cn/news/169206.html

相关文章:

  • 【Linux进行时】进程状态
  • HarmonyOS开发环境搭建
  • 友思特新闻|友思特与IDS深化战略合作伙伴关系
  • ARM Linux DIY(十三)Qt5 移植
  • 二,手机硬件参数介绍和校验算法
  • ubunutu20/18/22 编译android 5相关的问题汇总-千里马framework开源代码平板编译过程
  • tauri vue vite
  • 名词解析与经验分享(前端)
  • 【前端】js下载url文件
  • 什么是 BSD 协议?
  • 【网络教程】揭秘Windows SSH服务端免密登录:告别繁琐,享受安全连接
  • 使用键盘控制Franka机械臂运动
  • 力扣第45天----第392题、第115题
  • 扔掉你的开发板,跟我玩Mcore-全志h616
  • 【Linux】网络篇:UDP、TCP 网络接口及使用
  • 卡尔曼滤波(Kalman Filter)原理浅析-数学理论推导-2
  • SQL 性能优化总结
  • MYSQL事务隔离级别分析
  • 学习javaEE初阶的第一堂课
  • 请问一下就是业务概念模型和业务逻辑模型有啥关系
  • 3.2 Android eBPF程序类型
  • 多目标优化算法:基于非支配排序的小龙虾优化算法(NSCOA)MATLAB
  • Linux学习第13天:嵌入式LinuxLED驱动开发:一字一符总见情
  • ModuleNotFoundError: No module named ‘omni‘
  • 题解:ABC320B - Longest Palindrome
  • 大模型从入门到应用——LangChain:代理(Agents)-[代理执行器(Agent Executor):结合使用Agent和VectorStore]
  • 【算法题】100040. 让所有学生保持开心的分组方法数
  • TrOCR – 基于 Transformer 的 OCR 入门
  • 单例模式优缺点
  • 【Java 基础篇】Java 字节流详解:从入门到精通