• 0
  • 0
分享
  • 平替版 JMeter,一款用 Go 写的测试好帮手——软件测试圈
  • 曼倩诙谐 2024-06-20 16:29:03 字数 4358 阅读 731 收藏 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、有效性:测试用例的能够被使用,且被不同人员使用测试结果一致2、可重复性:良好的测试用例具有重复使用的功能。(回归测试)3、易组织性:好的测试用例会分门别类地提供给测试人员参考和使用(功能、性能、易用分类编号)4、清晰、简洁:好的测试用例描述清晰,每一步都应有相应的作用,有很强的的针对性,不应出现一些无用的操作步骤。5、可维护性:由于软件开发过程中需求变更等原因的影响,常常对测试用例进行修改、增加、删除等,以便测试用符合相应测试要求。1:测试用例包含什么类容用例编号,所属模块,用例描述,前置条件,优先级,输入数据,操作步骤,预期结果,实际结果,测试人员,测试时间2:测试...
            0 0 3639
            分享
          • 测试是软件开发生命周期 (SDLC) 的重要组成部分。SDLC 的每个阶段都应包含测试,以获得更快的反馈并提高产品质量。我们来聊聊持续测相关话题,如何从持续测试中获得更大的收益。何谓持续测试持续测试有助于在软件开发生命周期 (SDLC) 的所有阶段提供更快的质量反馈。在软件开发声明周期中大多数情况下,如果在核心功能逻辑越少做单元测试和自动化测试,那么测试金字塔顶层执行手动探索性测试的压力会非常大,尝尝容易出现质量问题导致项目延期。这实际上会影响质量,因为在开发完成后发现错误是非常昂贵的。下面是Google修复一个错误的成本,你可以看到当在系统测试阶段发现一个错误时,它的成本高达 5000 美元...
            0 0 1189
            分享
          • 测试报告是由测试人员撰写的,阅读对象是整个项目组。在测试报告的帮助下,测试人员、开发人员、项目经理、产品经理等相关者了解整体测试活动的质量。它可以帮助成员找出问题的根源或问题出现的阶段。它有助于分析问题是否是由于需求分析不够完善,代码设计不妥、管理不善的后果、不稳定的环境设施而导致的。对于项目的收官有重大意义。那测试总结报告应该怎么写呢?我见过一些测试总结报告只有过程,忽略结果,还有的总结报告只体现结果,忽略过程。我认为一份完整的测试总结报告需要将结果和过程相结合。具体包括的内容如下:任何报告都是结论先行。一上来,先pia一个结论,然后再详细开展论述。结论是为了告诉别人这个版本测试是合格还是不...
            3 3 7004
            分享
          •   在日常测试工作中,我们经常会听到“单元测试,集成测试,系统测试”之类的词汇,大家都知道这是按照开发阶段进行测试活动的划分。这种划分完整的分类,其实是分为四种“单元测试,集成测试,系统测试,验收测试"。这四类测试,其实是一种从局部到整体测试思想。但是市面上对这些概念的理解常常很混乱,会和“白盒测试,黑盒测试,灰盒测试”纠缠在一起傻傻分不清,那么本文就针对这几类测试展开讲解,现在车载测试如火如荼,我们就以汽车生产测试的过程为例,来分别阐述下单元测试,集成测试,系统测试,验收测试。  一、单元测试  1、汽车制造举例  在汽车的生产制造过程中肯定是先针对零部件进行测试,比如先对上图的车...
            0 0 1170
            分享
          • 于公司的开发团队偏向于使用Java技术,而且公司倡导学习开源技术,所以我选择用Java语言来进行Selenium WebDriver的自动化框架开发。由于本人没有Java开发经验,以前虽然学过QTP但从没有接触过Selenium,正好通过这个机会能学习一下自动化测试,同时也学习一下基本的Java开发过程。一、首先是搭建框架开发环境按照网上的方法部署eclipse,建立TestAction工程,并Import引用JDK和Selenium-2.44完整包二、继续引用和安装相关jar包首先是要满足数据驱动(场景用例和动作用例、数据用例都需要放到excel表上),就需要引用jxl.rar包(实现调用和...
            12 12 1607
            分享
      • 51testing软件测试圈微信