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

2023-11-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

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

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

在这里插入图片描述

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python + Jmeter 实现自动化性能压测 的相关文章

  • 在 jMeter 的值字段中使用变量

    我添加了一个用户定义变量元素 然后创建一个值为 123456 的变量 Parameter 并将其传递到 GET 请求中 创建了第二个变量 Response 其值为 无效代码 123456 我添加了一个响应断言元素 将 Response 变量
  • 如何从 WebDriver Sampler 中设置 JMeter Vars?

    I had previously used a CSS JQuery extractor to get a URL from a page and add it to JMeter vars accessing it here var pa
  • JMeter 基本身份验证

    我试图暗示使用 JMeter 的 Web 服务的基本身份验证过程 但每次它都会抛出错误 401 Unauthorized 我尝试使用 HTTP 标头管理器向其添加标头授权和值 但它仍然不起作用 我还尝试过使用 HTTP 授权管理器 还是没有
  • 使用数据库表作为 JMeter 的 CSV 数据集

    我目前正在使用 JMeter 对我公司的一个应用程序进行性能测试 该应用程序需要登录 我必须使用多个用户 在 JMeter 中通常完成此操作的方式似乎是通过 CSV 数据集 但是我可以访问数据库并可以直接从那里读取所有凭据 由于这是一个测试
  • 使用 XPATH 子字符串函数

    我需要帮助弄清楚这个 XPATH 子字符串函数 但我无法使用它 我尝试过这种方法的各种变体 a contains text Home href substring jsessionid 12 尝试从此标签获取 jsessionid 值 a
  • jmeter HTTP响应代码:org.apache.http.conn.HttpHostConnectException,非HTTP响应消息:连接被拒绝错误

    我正在使用 JMeter 测试负载 我正在使用 Amazon Server 当我测试 400 个并发用户的负载时 我收到错误消息 HTTP response code org apache http conn HttpHostConnect
  • 在 JMeter 的 BeanShell Sampler 中将字符串解析为整数

    我试图在 JMeter 中将字符串解析为整数 但由于以下错误而失败 如果我尝试打印 vars get 返回的字符串 它们看起来不错 2014 06 28 00 08 52 WARN jmeter assertions BeanShellAs
  • Jmeter - 如何向计数器添加前缀。类似于随机变量

    目前 在随机变量中 我可以在变量的输出格式中添加前缀或后缀 然而 这个很好的功能不适用于简单的计数器控制器 每次使用变量时连接 string counter 对我来说并不是一个好的选择 因为我经常这样做 有没有办法以随机变量的方式实现前缀
  • 如何通过java编码生成Jmeter仪表板报告。 (不是 Windows 或 shell 命令)

    我必须通过java编码生成Jmeter仪表板报告 在java代码下面 我用来生成正常的jmeter报告 我必须生成一个 通过java的仪表板报告 public class JMeterFromExistingJMX public stati
  • Azure 应用程序网关在进行 JMeter 负载测试时随机遇到 504 网关超时

    我有 1 个应用程序网关 它有 2 个后端 Azure VM 它通过 IIS 托管 ASP CORE REST API 两者都使用端口 80 进行通信 手动测试一切正常 直到我们使用 jmeter 进行 2500 线程 POST 请求负载测
  • setEndTime 必须在 setStartTime 之后调用

    尝试使用 JMeter JMS Publisher 推送消息 但低于错误 这是jmeter端错误还是服务器端错误 Error setEndTime must be called after setStartTime java lang Th
  • JMeter 中的周期性后台任务

    我的测试计划中的请求使用授权令牌 我知道该令牌将在 1 小时内过期 我需要以某种方式每 59 分钟重新请求一次令牌 直到测试完成 有人可以建议最好的方法吗 看起来使用 While 控制器测试将永远不会完成并停留在永恒的 while 循环中
  • Rest 服务器(Play Framework)在负载测试期间出现“Read Timed out”异常

    我们正在使用 Play Framework 在 REST 服务器上运行重负载测试 jmeter 350 个线程 35M 总请求 并在大约 2 小时后遇到以下错误 我们删除了其他组件 以便 request 只是接受请求而不执行任何操作 任何人
  • Jmeter 下降的最佳方法?

    我们都知道 Jmeter 并不是最擅长在运行期间更改活动线程的数量 除非您喜欢并创建以不同时间间隔触发的单独线程组 有没有人想出一个好的解决方案来在测试结束时降低速度 例如 我从 50 个线程开始 在 30 分钟内我想要 0 个活动线程 查
  • 在 JMETER 中循环遍历 JSON 响应 +

    我正在使用 Jmeter 进行性能测试并卡在以下点 我从 Webapi 收到 JSON 响应 如下所示 PersonInfoList Person 0 id 1 name Steve 1 Person id 2 name Mark 我需要根
  • 重写 jmeter.properties

    是否可以在不关闭并重新启动JMeter的情况下重新读取jmeter properties 也许有任何额外的类会触发这个过程 有时我需要使用属性的值 并且每次都重新启动 JMeter 并不方便 所以我想自动化此过程 无需从文件中重新读取 jm
  • JMeter:来自 Jenkins 的九个以上参数

    我试图将超过九个参数从 Jenkins 传递到 JMeter4 0 当我阅读时 我发现 JMeter 不接受超过 9 个参数 作为解决方法 我想将所有参数作为字符串传递 并在 JMeter BeanShell 中将其拆分 java jar
  • 线程和迭代次数如何影响测试以及 JMeter 的最大值是多少。线程限制

    您能告诉我最大限制吗 我可以在 JMeter 2 4 中使用哪些线程来进行负载测试 在单个循环中采用所有线程或采用更少的线程有什么区别吗 线程数和初始化循环以实现相同的数量 用户 线程 Example No of threads 500 R
  • Apache JMeter:在请求正文中添加随机数据

    我正在 Apache JMeter 中对我们的应用程序进行压力测试 我想到调用注册用户方法 该方法将在数据库中添加用户 但如果电子邮件已存在 则不会发生数据库操作 如何在身体数据中添加随机数 或者有其他方法可以对与数据库连接的应用程序进行压
  • Cloud SQL 间歇性通信链路失败

    我在用着jmeter对使用 Cloud SQL 的 GAME Web 服务进行压力测试 我收到间歇性通信链接失败异常 我尝试过使用直接连接和连接池 并且在这两种情况下都看到了异常 随着每秒请求数的增加 异常也会增加 请注意 我们使用的是最高

随机推荐

  • 如何正确使用示波器的温度延长线扩展功能

    电子产品的信号测试验证过程中 不可避免地 需要进行高低温工况下的信号完整性测试 但是 目前的高速有源探头的工作温度范围有限不足以直接使用 为此 诸如泰克 是德科技等仪器公司 都有相对应的测试解决方案 基本采用的是 焊接前端 温度延长线 有源
  • 图论17(Leetcode864.获取所有钥匙的最短路径)

    用二进制表示获得的钥匙 假设n 钥匙个数 000000000代表没有钥匙 0000000001代表有idx为1的钥匙 0000000011代表有idx 1 2的钥匙 这方法巧妙又复杂 代码 class Solution static int
  • 补码的求法

    补码 源码取反再加一 eg CAN通信的一部分 1024对应0xfcc 第一种方法 1024二进制 0000010000000000 注意数据类型 需要加上0 取反 1111101111111111 加一 1111110000000000
  • Base64编码相关知识总结

    Base64编码是什么 Base64 顾名思义 就是包括小写字母a z 大写字母A Z 数字0 9 符号 一共64个字符的字符集 另加一个 实际是65个字符 任何符号都可以转换成这个字符集中的字符 这个转换过程就叫做base64编码 Bas
  • jdbc的内容以及如何在5秒钟后自动跳转到login.html页面

    首先 在5秒钟之后跳转到login html 最初的解决方法 try Thread sleep 5000 response sendRedirect login html catch Exception e e printStackTrac
  • STM32 GPIO |CSDN创作打卡

    GPIO结构框图 推挽输出 0 3 3 在该结构中输入高电平时 上方的P MOS导通 下方的N MOS截止 对外输出高电平 而在该结构中输入低电平时 N MOS管导通 P MOS截止 对外输出低电平 当引脚高低电平切换时 两个管子轮流导通
  • 如何下载b站视频到本地

    传送门 转载于 https www cnblogs com yaoling1997 p 10793366 html
  • assert()理解

    源自一道CTF题 理解全部写在注释里面 if isset GET page page GET page else page home file templates page php I heard is dangerous strpos通过
  • JAVA中字符串长度和(字符串)数组长度的函数【string.length和string.length()】

    字符串数组strs 获取数组的长度是利用数组的属性length 所以就是 strs length 字符串strs 获取长度的话是调用strs length 方法 字符串长度 字符串数组长度 字符串数组的长度的 因为任意的数组都有length
  • 五十七.斐波那契数列JAVA

    public class Main public static int fibonacci int n if n 0 n 1 return n else return fibonacci n 1 fibonacci n 2 public s
  • 2021-07-01

    2021年已经过去七个月了 学习目标 把vue element echarts给撸下来 学习内容 7 1 7 4 学习 Echarts 7 5 7 11 学习封装router 7 12 7 18 学习如何部署网站到gitee 7 19 7
  • 对象池学习

    概念 为了避免大量创建 构造 对象 销毁 析构 对象带的性能开销 设计 对象队列 初始化时 指定队列长度 出队 入队操作需要加锁保护 对象的构造 在初始化对象池时构造好 对象并不是一开始全部构造好 而是在获取对象的过程中构造 构造之后便保存
  • Linux平台下安全编译

    1 操作系统的软件堆栈 内存映射等区域配置 mmap vdso页 共享库等 实现方式 修改操作系统文件 proc sys kernel randomize va space 内容改为2 原因 ASLR针对缓冲区溢出攻击 此处将堆栈 共享库映
  • jsp体质表_国家学生体质健康网数据上报平台:http://www.csh.edu.cn/MOETC/index.jsp

    国家学生体质健康网数据上报平台即 国家学生体质健康标准数据管理分析系统 数据上报流程 1 登录中国学生体质健康网 www csh edu cn 进行上报学校网上登记并下载验证文件 ebm 2 使用国家数据库上报软件进行数据上报 3 登录中国
  • Java面向对象(基础)

    面向对象内容的三条主线 Java类及类的成员 重点 属性 方法 构造器 熟悉 代码块 内部类 面向对象的特征 封装 继承 多态 抽象 其他关键字的使用 this super package import static final inter
  • springboot启动报错 Failed to configure a DataSource: ‘url‘ attribute is not specified and no embedded 。。

    一 错误如下 二 错误的原因 项目启动是出现该错误的原因 SpringBoot SpringBootApplication该注释会有数据库的自动配置 但在项目配置文件中没有找到相关的配置导致的 三 解决方法 如果是配置错误修改配置就可以 如
  • 线上一次JVM FullGC搞得整晚都没睡,彻底崩溃~

    V xin ruyuanhadeng获得600 页原创精品文章汇总PDF 这篇文章给大家聊一次线上生产系统事故的解决经历 其背后代表的是线上生产系统的JVM FullGC可能引发的严重故障 一 业务场景介绍 先简单说说线上生产系统的一个背景
  • Mongodb使用

    一 注意事项 1 mongodb的32位版本仅支持存储2gb的数据 包括索引等所有数据 而64位则无限制 2 Mongodb使用内存映射数据 存储需要消耗大量的RAM 至少需要满足足够存储所有索引和热数据的物理内存 否则会大大影响性能 3
  • springboot报错无法读取配置文件:Could not resolve placeholder 'xxx' in value "${XXXX}

    在springboot项目中 通过 Value aliyun oss file endpoint 读取application properties配置文件的内容报错 org springframework beans factory Bea
  • Python + Jmeter 实现自动化性能压测

    Step01 Python脚本开发 文件路径 D wl testproject Fone grpc project1 test client py Python 脚本作用 1 通过 grpc 调用底层 c 的接口 做数据库的数据插入与查询操