• 0
  • 0
分享
  • 平替版 JMeter,一款用 Go 写的测试好帮手——软件测试圈
  • 曼倩诙谐 2024-06-20 16:29:03 字数 4358 阅读 466 收藏 0

  在软件开发中,测试工作在保障软件质量与提升用户体验过程中占据重要角色。

  例如,性能测试是软件质量保障的关键环节之一,它可以评估软件开发的可靠性、稳定性及响应时间等。然而,测试过程中往往需要投入大量的时间与资源,因此为了节约资源、提高开发效率选择一款合适的测试工具尤为重要。

  最近,马建仓在 Gitee 上看到一款高效的性能测试工具——RunnerGo,不仅能减少开发人员的工作量,同时还能快速识别应用中的性能瓶颈问题。值得一提的是,该项目目前已经成为 Gitee 的 GVP 项目。

  开源许可证: Apache-2.0

  项目地址: https://gitee.com/Runner-Go-Team/RunnerGo

  是什么?

  RunnerGo 是一款由国内开发者自研、基于 Go 编写的性能压测工具。该工具致力于打造成一款全栈式测试平台,主要采用模块化设计,目前实现了接口测试、场景自动化测试、性能测试等测试能力。

  同时,其性能测试模块中还提供计划管理、报告管理、预设配置,可以根据需求构建多个测试场景和测试用例方便管理。

  值得关注的是,RunnerGo 内置了各种工具,它与 Apache 旗下的开源测试工具 JMeter 需要下载插件不同,在配置脚本时可以选择阶梯模式,并发模式等压测模式,更加简单易懂轻量级。同时,还支持实时查看服务器状态、测试报告、Debug 日志并且支持发送测试报告到指定邮箱。

  技术架构

1-1.jpg


  功能与特性

  · 智能调度算法:自研的调度算法,合理利用服务器资源,降低资源消耗

  · 实时生成测试报告:运行任务后,可实时查看执行结果,快速诊断服务病症

  · 丰富的报告图表:全方位展示各个指标运行曲线图

  · 实时修改:可根据压测模式实时修改并发数、持续时长等

  · 实时日志:可在压测过程中开启日志模式,查看请求响应信息

  · 可编辑报告:可在任务运行结束后,针对测试结果进行测试分析,实时编写报告

  · Flow 场景流:可视化的业务流,通过连线就可快速搭建起来自己的业务流,还可直接调试运行场景,电流般的业务流转

  · 多种压测模式:支持并发模式、阶梯模式、错误率模式、响应时间模式、每秒应答数模式等多种压测模式,满足所有业务需求

  · 支持接口自动化,采用用例集概念,生成丰富的自动化报告

  业务整体流转结构

1-2.jpg


  如何安装?

  自动安装

  不需要安装 Docker,会自动安装。

  curl -sSL https://ghproxy.com/https://raw.githubusercontent.com/Runner-Go-Team/runnerGo/main/quick_start.sh | bash
  或
  curl -sSL https://ghproxy.com/https://gitee.com/Runner-Go-Team/RunnerGo/blob/main/quick_start.sh | bash

  手动安装

  准备 docker 和 docker-compose 环境。

  git clone https://gitee.com/Runner-Go-Team/RunnerGo.git

  进入目录

  ├── config.env           #  环境变量配置文件
  ├── docker-compose.yaml  # docker-compose 文件
  ├── mongo                # mongo 初始化相关脚本
  │   └── init-mongo.sh 
  └── mysql                 # MySQL相关配置和脚本
      ├── mysql.cnf
      └── mysql.sql

  配置文件修改

  # 数据库root 密码
  MYSQL_ROOT_PASSWORD=123456
  # runnergo 使用的数据库名
  MYSQL_DATABASE=runnergo
  # redis 初始话
  REDIS_PASSWD=mypassword
  # Mongo数据管理员的用户名
  MONGO_INITDB_ROOT_USERNAME=root
  # Mongo 数据库管理员的账号
  MONGO_INITDB_ROOT_PASSWORD=root
  # runnergo  Mongo使用的数据库名
  MONGO_INITDB_DATABASE=runnergo
  # runnergo Mongo库的用户名
  MONGO_INITDB_USERNAME=runnergo
  # runnergo Mongo库的密码
  MONGO_INITDB_PASSWORD=hello123456
  # 最大并非数
  MAX_RUNNER_CONCURRENCY=1000
  # 上传文件端口号(非必要不要改,这是容器里的)
  FILE_SERVER_PORT=80
  # Runnergo 应用mongo 配置
  RG_MONGO_DSN=mongodb://runnergo:hello123456@mongo-db:27017/runnergo
  RG_MONGO_DATABASE=runnergo
  RG_REDIS_ADDRESS=redis-db:6379
  RG_REDIS_PASSWORD=mypassword
  RG_REDIS_DB=0
  # kafka Topic
  RG_KAFKA_TOPIC=report
  RG_KAFKA_ADDRESS=kafka:9092
  RG_KAFKA_PORT=9092
  # kafka 分区数,(同时并行跑多少任务)
  RG_KAFKA_NUM=2
  # engine 日志路径
  RG_ENGINE_LOG_PATH=/dev/stdout
  # collector 日志路径
  RG_COLLECTOR_LOG_PATH=/dev/stdout
  # 内部互通参数(不要更改)
  RG_MANAGEMENT_NOTIFY_STOP_STRESS=http://manage:30000/management/api/v1/plan/notify_stop_stress
  RG_MANAGEMENT_NOTIFY_RUN_FINISH=http://manage:30000/management/api/v1/auto_plan/notify_run_finish
  RG_DOMAIN=
  RG_MYSQL_HOST=mysql-db
  RG_MYSQL_USERNAME=root
  RG_MYSQL_PASSWORD=123456
  RG_MYSQL_DBNAME=runnergo
  # JWT
  RG_JWT_ISSUER=asfdasfasdfasfd
  RG_JWT_SECRET=sdfaswerwrwerwerwer
  # MONG
  RG_MONGO_PASSWORD=hello123456
  #  内部互通参数(不要更改)
  RG_CLIENTS_ENGINE_RUN_API=http://engine:30000/runner/run_api
  RG_CLIENTS_ENGINE_RUN_SCENE=http://engine:30000/runner/run_scene
  RG_CLIENTS_ENGINE_STOP_SCENE=http://engine:30000/runner/stop_scene
  RG_CLIENTS_ENGINE_RUN_PLAN=http://engine:30000/runner/run_plan
  RG_CLIENTS_ENGINE_STOP_PLAN=http://engine:30000/runner/stop
  RG_REDIS_REPORT_ADDRESS=redis-db:6379
  # #初始化压力机可使用分区
  RG_CAN_USE_PARTITION_TOTAL_NUM=2
  ## KAFKA 配置
  KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181/kafka
  KAFKA_LISTENERS=PLAINTEXT://:9092
  KAFKA_BROKER_ID=0
  KAFKA_CREATE_TOPICS=report:2:1
  ## 邮箱配置
  # 邮箱服务商
  RG_SMTP_HOST=
  # 邮箱服务
  RG_SMTP_PORT=
  # 邮箱
  RG_SMTP_EMAIL=
  #邮箱密码
  RG_SMTP_PASSWORD=
  ## 邀请链接密钥
  RG_INVITE_DATA_AES_SECRET_KEY=qazwsxedcrfvtgby
  # 压力机相关配置
  RG_MACHINE_ALIVE_TIME=10
  RG_INIT_PARTITION_TOTAL_NUM=2
  RG_CPU_TOP_LIMIT=80
  RG_MEMORY_TOP_LIMIT=80
  RG_DISK_TOP_LIMIT=70

  注意:

  1. 默认基本可以不用改 config.env

  2. 这里要注意的是 Redis 密码这边修改完毕,需要在 Docker-compose.yaml 文件中修改如下:

1-3.jpg

  修改应用暴露的端口号

  默认使用是 tcp 的 9999 端口号,这个是可以修改的。

1-4.jpg

  目前用户只能修改这一个对外访问的端口号,我们这里还用到了tcp58888``58889这两个端口号,暂时不可修改,如果本地冲突,则需要看看是否这两个端口号冲突。

  启动 RunnerGo

  docker-compose up -d

  由于启动的中间件多,请耐心等待2分钟然后使用下面命令查看是否都启动成功

  docker-compose ps

  关闭RunnerGo

  docker-compose stop

  登录使用

  安装成功后,在浏览器打开以下地址页面,按网页指示完成注册流程,即可使用 RunnerGo。

  可使用curl -L tool.lu/ip && curl ipinfo.io查看本机外网地址
  地址:http://本机外网地址:9999

  Demo 演示

  · 主页

1-5.jpg

  · 性能测试报告

1-6.jpg

  · 自动化测试报告

1-7.jpg

  

作者:Gitee    

来源:http://www.51testing.com/html/44/n-7796844.html

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   运行测试  1.运行测试(命令行)  执行命令 jmeter.bat -n -t DistributingPOST.jmx  -Jserver.rmi.ssl.keystore.file=rmi_keystore.jks -R192.168.1.14,192.168.1.15 (多个IP用逗号隔开)  2.查看结果  以上命令运行了测试计划DistributingPOST.jmx  在两个节点服务器上,每个服务器模拟了6个用户(共计6*2=12个用户)。下图更清晰地显示了运行时的命令响应。  3.运行测试并生成报告  执行命令:jmeter.bat -n -t Dist...
            3 4 1857
            分享
          • 一、unittest自动化测试结构二、代码实现1、导入需要的一些前置方法,用以获取cookie,生成测试数据等# coding=utf-8 import sys sys.path.append('..') # 导入前置方法(登录接口获取cookie;通用的方法,如生成随机字符串、手机号;一些常用的参数设置等) import PreProcessing as p from PreProcessing import *2、初始化 接口地址、机构、用户、数据库等初始化要查询的数据库,参考htt...
            13 13 2020
            分享
          •   一.APP兼容性测试的必要性  APP兼容测试即是移动端的手机客户端兼容测试。APP测试者为了保障不同系统及版本、不同网络制式、不同分辨率和厂商(不同深度定制的ROM)、不同版本都能够有很好的用户体验而面临巨大挑战。所以APP兼容性测试也是测试质量保障任务中的重要环节。  二.APP兼容性考虑维度  三.使用云测工具进行兼容性测试  1.测试平台地址:阿里云(mqc):http://mqc.aliyun.com  2.云测工具测试内容:智能UI适配,安装/卸载/更新,性能监控:启动时间/CPU消耗/内存消耗等。  备注:工具推荐的是开源的体验版,减少10%的工作量,是通用功能的兼容性测试,...
            12 12 1627
            分享
          • 前言相信搞过Python的人绝大部分都会一点点爬虫技能,但是很多时候爬虫也不是万能的,这个时候就需要我们的自动化测试框架了,于是Selenium就应运而生了,它可以算的上是自动化测试框架中的佼佼者,因为它解决了大多数用来爬取页面的模块的一个永远的痛,那就是Ajax异步加载,今天小编就带大家来好好了解下这个Selenium 。一、安装与导入这里我们需要安装三个东西,一个是Selenium框架,还有一个浏览器,最后就是驱动。这里小编选择了谷歌浏览器,下载地址:https://u062.com/file/7715018-455263626。然后Selenium框架嘛,大家都会下的啦,PIP就搞定了,...
            15 17 2984
            分享
          • 一、前言我们创建函数都只是为我们做一些事,做完了就结束。但实际上,有时还需要对事情的结果进行获取。这类似于主管向下级职员下达命令,职员去做,最后需要将结果报告给主管,为函数设置返回值的作用就是将函数的处理结果返回给调用它的程序。二、返回值语法格式在Python中,可以在函数体内使用return 语句为函数指定返回值。该返回值可以是任意类型,并且无论return语句出现在函数的什么位置,只要得到执行,就会直接结束函数的执行。return 语句的语法格式如下:result = return [value]参数说明:result:用于保存返回结果,如果是一个值,那么re...
            1 1 1789
            分享
      • 51testing软件测试圈微信