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

产品优势
•开源:基于开源、兼容开源;按月发布新版本、日均下载安装超过100次、被大量客户验证;•一站式:一个产品全面涵盖测试跟踪、接口测试、性能测试等功能并形成联动:其中用例管理是底座需求、接口自动化测试是高频需求、性能测试是专家服务为主工具为辅;一个产品全满足从测试计划、测试执行到测试报告分析的全生命周期需求;•持续测试:能将测试融入持续交付和 DevOps 体系;无缝对接 Bug 管理工具和持续集成工具等;支持团队协作和资产沉淀。
主要功能
•测试跟踪: 远超 TestLink 的使用体验,覆盖从编写用例到生成测试报告的完整流程;•接口测试: 集 Postman 的易用与 JMeter 的灵活于一体,接口管理、多协议支持(HTTP/TCP/SQL/DUBBO)、场景自动化;•性能测试: 兼容 JMeter,支持 Kubernetes 和云环境,轻松支持高并发、分布式的性能测试;•团队协作: 用户管理、租户管理、权限管理、资源管理,无论团队规模如何,总有适合的落地方式。
技术栈
•后端: Spring Boot[1]•前端: Vue.js[2]•中间件: MySQL[3], Kafka[4]•基础设施: Docker[5], Kubernetes[6]•测试引擎: JMeter[7]
二、整体架构

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


概念说明
MeterSphere 提供了多租户、多角色的管理模型, 用户可根据所在团队的实际情况进行灵活的租户体系映射
•系统: 每个独立部署的 MeterSphere 即称为一套系统•系统级角色: 角色的权限范围为整个系统, 常见的角色如系统管理员, 可管理整个系统内的租户、用户及测试资源, 同时可变更修改系统级配置参数•组织: MeterSphere 中的一级租户, 可映射为一个公司下的不同部门•组织级角色: 角色的权限范围限定在某个组织当中, 常见的角色如组织管理员, 可管理整个组织内的成员、工作空间及成员等•工作空间: MeterSphere 中的二级租户, 可映射为一个部门下的不同团队、项目组•工作空间级角色: 角色的权限范围限定在某个工作空间当中, 常见的角色如工作空间管理员及普通用户, 可在工作空间中创建项目、发起测试、查看测试报告等•不同的角色具有怎样的权限,请参考权限矩阵[14]
三、安装部署
环境要求
•操作系统: 任何支持 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 状态msctl status# 配置变动后重启systemctl restart dockermsctl reload
自 MeterSphere v1.3.0 起之后的版本才提供 upgrade 命令
更新说明
https://metersphere.io/docs/about/changelog/
登录使用
安装成功后,通过浏览器访问如下页面登录 MeterSphere
地址: http://目标服务器IP地址:8081用户名: admin密码: metersphere
登录超时配置
vim /opt/metersphere/conf/metersphere.properties添加以下配置,单位秒session.timeout=86400重启ms-data-streaming服务docker restart CONTAINER ID
日志查询
docker logs ms-serverdocker logs ms-data-streamingdocker logs ms-node-controllerdocker logs mysqldocker 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增强包

相关链接
[1]
Spring Boot: https://www.tutorialspoint.com/spring_boot/spring_boot_introduction.htm[2]
Vue.js: https://vuejs.org/[3]
MySQL: https://www.mysql.com/[4]
Kafka: https://kafka.apache.org/[5]
Docker: https://www.docker.com/[6]
Kubernetes: https://kubernetes.io/[7]
JMeter: https://jmeter.apache.org/[8]
Frontend: https://github.com/metersphere/metersphere[9]
Backend: https://github.com/metersphere/metersphere[10]
Chrome plugin: https://github.com/metersphere/chrome-extensions[11]
Node controller: https://github.com/metersphere/node-controller[12]
Data streaming: https://github.com/metersphere/data-streaming[13]
Jenkins-plugin: https://github.com/metersphere/jenkins-plugin[14]
权限矩阵: https://metersphere.io/docs/user_manual/access_matrix/




