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


    Step01: Python脚本开发

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

    Python 脚本作用:

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

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

    1. from __future__ import print_function
    2. import logging
    3. import sys
    4. import grpc
    5. import Storage_pb2 # Storage_pb2.py which contains our generated request and response classes
    6. import StorageService_pb2_grpc # StorageService_pb2_grpc.py which contains our generated client and server classes.
    7. host="10.10.1.117:50066"
    8. def run():
    9. result=""
    10. with grpc.insecure_channel(host) as channel:
    11. resp0=StorageService_pb2_grpc.FOneStorageStub(channel).InsertKVS(Storage_pb2.PUpsertKVS(
    12. DBName="MergeLog",TableName="MergeLog",KeyValues=[{"Key":b'',"Key":b''}],Upsert=True,Transaction=True
    13. ))
    14. result+=str(resp0)
    15. with grpc.insecure_channel(host) as channel:
    16. stud1=StorageService_pb2_grpc.FOneStorageStub(channel)
    17. resp1=stud1.InsertV(Storage_pb2.PInsertV(DBName="MergeLog", TableName="MergeLog", Value=b"1"))
    18. result += str(resp1)
    19. with grpc.insecure_channel(host) as channel:
    20. stud2=StorageService_pb2_grpc.FOneStorageStub(channel)
    21. resp2=stud2.FindOne(Storage_pb2.PFindK(DBName="MergeLog", TableName="MergeLog", Key="1"))
    22. result += str(resp2)
    23. result=result.replace("\n", " ")
    24. result=result.count("Successful return: 0")
    25. print(result)
    26. if __name__ == '__main__':
    27. logging.basicConfig()
    28. run()

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

    Step02: Jmeter 创建 beanshell 取样器

    脚本内容如下:

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

    Step03: 执行效果

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

    图片

    Step04: Jmeter日志输出

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

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

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

    在这里插入图片描述

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

  • 相关阅读:
    初识Flink 完整使用 (第一章)
    Dapr 发布模糊测试报告|Dapr 完成模糊测试审核
    域名个人信息备案的能用 websocket 吗
    【真题笔记】14年系统架构设计师要点总结
    java--接口
    【伸手党福利】投影仪初学者入门——投影亮度及幕布选择——从入门到精通
    宝兰德受邀出席第八届丝绸之路网络安全论坛
    mysql查询当天,近一周,近一个月,近一年的数据
    探索Lighthouse性能分数计算背后的奥秘
    数据结构题目收录(二十三)
  • 原文地址:https://blog.csdn.net/nhb687096/article/details/132806541