关闭

JMeter与Python的多重交响:从入门到高级应用

发表于:2023-9-21 09:31

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:测试玩家勇哥    来源:测试玩家勇哥

  在性能测试领域,Apache JMeter已经成为测试专业人士的首选工具,用于模拟用户行为、测量响应时间、评估系统性能。但在某些情境下,为了满足特定需求,我们需要更多的灵活性,比如引入Python来进行特定操作或处理复杂逻辑。
  Jython
  Jython是Python语言的Java实现,它允许您在JMeter中使用Python脚本,不需要额外的JAR包。
  一、下载并配置
  (1) 官网下载地址:Downloads | Jython
  (2) 网盘链接:downloads > Jython 提取码:ux02
  (3) 将下载的jar包放到Jmeter的安装路径/lib,如: D:\application\apache-jmeter-5.1.1\lib
  () 切记,重启 jmeter
  二、使用技巧
  新增一个JSR223,选择语言为“jython”;
  注意:由于这个包使用的python版本为 2.7,所以写代码的时候不能全搬python3的语法过来玩。
  示例一:前后置脚本中写python代码。
  # jsr223 前置代码中编写:
  """该脚本用于加密登录信息"""
  import hashlib
  import sys
  import time
  import json
  def password_srt(pubkey,  password):
      time_str = str(time.time())
      sign_str = str(pubkey) + time_str + str(password)
      sign = hashlib.md5(sign_str.encode('utf-8')).hexdigest()
      res = {'sign': sign, 'pubkey': pubkey, 'password': password}
      res = json.dumps(res)
      return res
  result = password_srt(1234,5678)
  log.info(result)
  vars.put("secrity",result) # 设置到变量,为后续取样器使用。
  贴图:
  示例二:后置脚本中写python代码
  # jsr223 后置脚本代码
  import json
  result = prev.getResponseDataAsString(); # 固定写法,获取响应结果
  log.info("------"+result)   # 这里使用print 会打印不到日志里面来显示。
  json_data = json.loads(result)  # 转python识别的字典对象
  token = json_data.get("token") # 获取token值
  log.info(token)
  vars.put("token",token)
  贴图:
  添加一个debug sample来检查结果:
  最终执行结果:
  一些小Tips:
  ·性能流泪: 使用 Python 脚本会引入性能问题,因为 Python 是一种解释型语言,相比于 JMeter 自带的 Java 脚本,Python 脚本的执行效率可能会稍低,勇哥踩过这个坑!!!
  · 维护想哭: 逻辑分散在 JMeter 的测试计划和 Python 脚本之间时,会导致维护困难;也不利于团队协作!
  · 依赖一坨翔: Python是2.7版本且难以支持第三方python库使用,要写复杂的代码也是很头疼的!
  · 调试难上天: JMeter 中调试 Python 脚本真是看花眼,因为你看的信息都是jmeter输出的,定位问题一言难尽!
  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号