接口测试 MeterSphere 使用指南

wholegale39 · 2021年06月15日 · 最后由 回复于 2022年07月08日 · 7769 次阅读

一、简介

MeterSphere 是一站式开源持续测试平台,涵盖测试跟踪、接口测试、性能测试、团队协作等功能,兼容 JMeter 等开源标准,有效助力开发和测试团队充分利用云弹性进行高度可扩展的自动化测试,加速高质量软件的交付。

https://github.com/metersphere

产品优势

  • 开源:基于开源、兼容开源;按月发布新版本、日均下载安装超过 100 次、被大量客户验证;
  • 一站式:一个产品全面涵盖测试跟踪、接口测试、性能测试等功能并形成联动:其中用例管理是底座需求、接口自动化测试是高频需求、性能测试是专家服务为主工具为辅;一个产品全满足从测试计划、测试执行到测试报告分析的全生命周期需求;
  • 持续测试:能将测试融入持续交付和 DevOps 体系;无缝对接 Bug 管理工具和持续集成工具等;支持团队协作和资产沉淀。

主要功能

  • 测试跟踪: 远超 TestLink 的使用体验,覆盖从编写用例到生成测试报告的完整流程;
  • 接口测试: 集 Postman 的易用与 JMeter 的灵活于一体,接口管理、多协议支持(HTTP/TCP/SQL/DUBBO)、场景自动化;
  • 性能测试: 兼容 JMeter,支持 Kubernetes 和云环境,轻松支持高并发、分布式的性能测试;
  • 团队协作: 用户管理、租户管理、权限管理、资源管理,无论团队规模如何,总有适合的落地方式。

技术栈

二、整体架构

组件说明

  • Frontend: MeterSphere 的前端工程, 基于 vue.js 、Element 组件库进行开发
  • Backend: MeterSphere 的后端工程, 基于 Spring Boot 进行开发, 为 MeterSphere 的功能主体
  • Chrome plugin: 浏览器插件, 录制 Web 访问请求生成 JMeter 脚本并导入到 MeterSphere 中用于接口测试及性能测试
  • Node controller: 为性能测试提供独立节点类型的测试资源池, 接收来自系统的性能测试任务, 动态的启动 JMeter 容器完成性能测试,基于 Spring Boot 进行开发
  • MySQL: MeterSphere 项目的主要数据均存储在 MySQL
  • Kafka: 接收 JMeter 产生的性能测试结果数据
  • Data streaming: 从 Kafka 中获取性能测试结果数据进行处理后存入 MySQL 数据库,基于 Spring Boot 进行开发
  • Docker engine: 为 Node Controller 提供 JMeter 容器运行环境
  • Jenkins-plugin:在 Jenkins 中安装该插件后可将 Jenkins 任务中添加 MeterSphere 构建环节,用户在该构建环节中配置 MeterSphere 平台的认证信息后,可选择指定项目下的接口/性能测试进行触发执行。

各个组件间的关系可参考下图

概念说明

MeterSphere 提供了多租户、多角色的管理模型, 用户可根据所在团队的实际情况进行灵活的租户体系映射

  • 系统: 每个独立部署的 MeterSphere 即称为一套系统
  • 系统级角色: 角色的权限范围为整个系统, 常见的角色如系统管理员, 可管理整个系统内的租户、用户及测试资源, 同时可变更修改系统级配置参数
  • 组织: MeterSphere 中的一级租户, 可映射为一个公司下的不同部门
  • 组织级角色: 角色的权限范围限定在某个组织当中, 常见的角色如组织管理员, 可管理整个组织内的成员、工作空间及成员等
  • 工作空间: MeterSphere 中的二级租户, 可映射为一个部门下的不同团队、项目组
  • 工作空间级角色: 角色的权限范围限定在某个工作空间当中, 常见的角色如工作空间管理员及普通用户, 可在工作空间中创建项目、发起测试、查看测试报告等
  • 不同的角色具有怎样的权限,请参考权限矩阵

三、安装部署

环境要求

  • 操作系统: 任何支持 Docker 的 Linux x64
  • CPU/内存: 4 核 8G
  • 磁盘空间: 20G
  • 可访问互联网

安装

以 root 用户 ssh 登录目标服务器, 执行如下命令

curl -sSL https://github.com/metersphere/metersphere/releases/latest/download/quick_start.sh | sh

安装脚本默认使用 /opt/metersphere 目录作为安装目录,MeterSphere 的配置文件、数据及日志等均存放在该安装目录

更新

如果您的服务器可以访问互联网, 可以通过以下命令直接升级 metersphere 至最新版本

# 升级至最新版本
msctl upgrade
[MeterSphere Log]: ======================= 开始安装 ======================= 
[MeterSphere Log]: 检测到 Docker 已安装,跳过安装步骤 
[MeterSphere Log]: 启动 Docker  
Redirecting to /bin/systemctl start docker.service
[MeterSphere Log]: 检测到 Docker Compose 已安装,跳过安装步骤 
[MeterSphere Log]: 拉取镜

Pulling zookeeper          ... done
Pulling kafka              ... done
Pulling prometheus         ... done
Pulling ms-data-streaming  ... done
Pulling ms-node-controller ... done
Pulling mysql              ... done
Pulling ms-server          ... done
Pulling nodeexporter       ... done
5.4.1-ms3-jdk8: Pulling from metersphere/jmeter-master
Digest: sha256:91b5d53211211feb851e6836803e7159f70dbdeaede54adfe8b41487d72d9d30
Status: Image is up to date for registry.cn-qingdao.aliyuncs.com/metersphere/jmeter-master:5.4.1-ms3-jdk8
/tmp/metersphere-release-v1.10.0
[MeterSphere Log]: 启动服务

Stopping ms-server          ... done
Stopping ms-data-streaming  ... done
Stopping kafka              ... done
Stopping nodeexporter       ... done
Stopping ms-prometheus      ... done
Stopping ms-node-controller ... done
Stopping mysql              ... done
Stopping zookeeper          ... done
Removing ms-server          ... done
Removing ms-data-streaming  ... done
Removing kafka              ... done
Removing nodeexporter       ... done
Removing ms-prometheus      ... done
Removing ms-node-controller ... done
Removing mysql              ... done
Removing zookeeper          ... done
Removing network metersphere_ms-network
Removing volume metersphere_ms-mysql-data
Removing volume metersphere_ms-logs
Removing volume metersphere_ms-prometheus-conf
Removing volume metersphere_ms-data
Removing volume metersphere_ms-prometheus-data
Removing volume metersphere_ms-zookeeper-data
Removing volume metersphere_ms-conf
Removing volume metersphere_ms-kafka-data

Creating mysql              ... done
Creating ms-node-controller ... done
Creating zookeeper          ... done
Creating ms-prometheus      ... done
Creating kafka              ... done
Creating nodeexporter       ... done
Creating ms-server          ... done
Creating ms-data-streaming  ... done

======================= 安装完成 =======================

请通过以下方式访问:
 URL: http://$LOCAL_IP:8081
 用户名: admin
 初始密码: metersphere
您可以使用命令 'msctl status' 检查服务运行情况.

mysql is up-to-date
ms-prometheus is up-to-date
ms-node-controller is up-to-date
zookeeper is up-to-date
ms-server is up-to-date
nodeexporter is up-to-date
kafka is up-to-date
ms-data-streaming is up-to-date
 检测当前版本为v1.10.0 
最新版本与当前版本一致,退出升级过

自 MeterSphere v1.3.0 起之后的版本才提供 upgrade 命令

更新说明

https://metersphere.io/docs/about/changelog/

查看状态

msctl status
Name                     Command                  State                           Ports                 
--------------------------------------------------------------------------------------------------------
kafka             /opt/bitnami/scripts/kafka ... Up (healthy)   0.0.0.0:19092->19092/tcp, 9092/tcp       
ms-data-streaming /deployments/run-java.sh Up (healthy)   0.0.0.0:8084->8084/tcp, 0.0.0.0:8085->8085/tcp
ms-node-controller/deployments/run-java.sh Up (healthy)   0.0.0.0:8082->8082/tcp, 0.0.0.0:9100->9100/tcp
ms-prometheus     /bin/prometheus --config.f ...Up (healthy)   0.0.0.0:9090->9090/tcp                   
ms-server         /deployments/run-java.sh      Up (healthy)   0.0.0.0:8081->8081/tcp                   
mysql             docker-entrypoint.sh mysqld   Up (healthy)   0.0.0.0:3307->3306/tcp, 33060/tcp         
nodeexporter      /bin/node_exporter --path. ...Up (healthy)                                             
zookeeper         /opt/bitnami/scripts/zooke ...   Up (healthy)   2181/tcp, 2888/tcp, 3888/tcp, 8080/tcp

登录使用

安装成功后,通过浏览器访问如下页面登录 MeterSphere

地址: http://目标服务器IP地址:8081
用户名: admin
密码: metersphere

登录超时配置

vim /opt/metersphere/conf/metersphere.properties

添加以下配置,单位秒
session.timeout=86400

重启ms-data-streaming服务
docker restart CONTAINER ID

msctl reload

日志查询

docker logs ms-server
docker logs ms-data-streaming
docker logs ms-node-controller
docker logs mysql
docker logs kafka

四、接口测试

接口测试工作流

实际案例

  • 创建项目

  • 上传 jar 包

  • 项目环境配置

  • 接口定义 - 导入已有,支持多种数据格式导入

备注:jmeter 中脚本编写不太规范的话,导入可能会提示找不到引用的 jar 包方法

  • 接口定义 - 手动创建

  • 添加接口用例

  • 完善用例(可根据接口定义增加接口异常流)

  • 接口用例可添加前后置脚本、断言、参数提取等

  • 前后置脚本,与 Jmeter 一样
import com.xdja.wch.DFSBase;DFSBase dfsBase = new DFSBase();//获取fastdfs服务器系统时间log.info("-----timestamp------:"+"${timestamp}");Long timestamp1 = Long.parseLong("${timestamp}");//log.info("-----timestamp1------:"+ timestamp1);Long time = timestamp1 + 8460000;String ts = String.valueOf(time);vars.put("ts",ts);String data = "${name}" + ts + "${appId}";String sign = dfsBase.hamcsha1(data, "123456");//log.info("-----sign------:"+sign);vars.put("sign",sign);

  • 接口自动化 - 创建场景

  • 接口自动化 - 场景中导入接口用例,建议引用方式,方便维护

  • 接口自动化 - 场景中用例调试,微调用例顺序

  • 接口自动化 - 复制场景用例(准生产环境复用测试环境接口场景用例)

五、Jenkins 集成

安装插件

https://github.com/metersphere/jenkins-plugin

  • 下载 jenkins-plugin 插件 metersphere-jenkins-plugin.hpi
  • Jenkins 安装插件

  • 创建项目-API Keys 由 MeterSphere 进行配置

  • API Keys

  • 执行方式 - 测试计划

  • 执行方式 - 性能测试场景、接口测试场景或者单接口定义

  • 开始执行

  • 邮件通知

  • 报告展示

六、性能测试

性能测试工作流

实际案例

  • 创建性能测试

  • 引用接口测试场景

  • 压力配置

  • 高级配置

  • 保存并执行,可再次执行、导出报告、下载 JTL

  • 可查看请求统计、错误记录、日志详情等

七、问题处理

消息通知

  • 邮件测试连接可以正常收到通知邮件,但是接口自动化执行成功后未收到邮件
[root@xdja metersphere]# cd /opt/metersphere/logs/metersphere[root@xdja metersphere]# tail -2000f error.log# 发现如下报错信息2021-04-15 10:55:01,122 [Async-Executor4] ERROR i.m.n.sender.impl.MailNoticeSender ? - Method[send][org.springframework.mail.MailSendException: Mail server connection failed; nested exception is javax.mail.MessagingException: STARTTLS is required but host does not support STARTTLS. Failed messages: javax.mail.MessagingException: STARTTLS is required but host does not support STARTTLS; message exceptions (1) are:Failed message 1: javax.mail.MessagingException: STARTTLS is required but host does not support STARTTLS]
  • 系统设置 - 邮件设置,将开启 TLS(如果 SMTP 端口是 587,通常需要启用 TLS)勾选去掉,即可正常收取通知邮件

性能测试报错

  • 首次执行性能测试报如下错误

Check node-controller /etc/hosts, 127.0.0.1 ${hostname} must be contained. Please delete the report and rerun.
  • 在部署 node-controller 的机器上,使用 hostname 命令获取主机名
[root@xdja ~]# hostnamexdja[root@xdja ~]# vim /etc/hosts127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
  • 将获取到的主机名 xdja 配置到 /etc/hosts 文件中,配置完成效果如下
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4127.0.0.1   xdja::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

性能测试结果偏差

  • MeterSphere 与原生 Jmeter 对同一接口性能测试,结果差距较大

  • 已提交 Issues

八、使用感受

  • 开源、高度集成、所使用的技术栈适合二次开发
  • 整套流程相对符合使用习惯,便于不同技术水平的同事上手
  • 可以将零散的 Jmeter 接口用例统一维护管理起来,便于协作、评审、复用,提升效能
  • 项目测试进度可视化,便于度量接口测试质量
  • 可以较好的集成 Jenkins 实现自动化
  • 部分页面易用性差
  • 性能测试结果与原生 Jmeter 存在差距

九、拓展功能

浏览器录制插件

Jenkins 插件

消息服务

十、企业版及专业服务

企业版及专业服务

X-Pack 增强包

共收到 7 条回复 时间 点赞

单个接口测试的时候总是提示超时

舒拉密 回复

这看着应该是没连上服务,看看服务是否正常,请求地址或者端口号是否正确

目标服务器请问指的是什么呀?

./install.sh: line 70: service: command not found

ms-server 容器经常性的挂机,大家有遇到吗?

请问 mac 系统可以安装吗?

钉钉内嵌小程序可以 ui 自动化吗

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册