MeterSphere v2 常见问题处理说明


朱飞鸽
飞致云 发布于 2023-12-06 / 1413 阅读 / 0 评论 /
一、安装部署问题 如何进行离线包的下载、安装及升级? 下载地址:

一、安装部署问题

如何进行离线包的下载、安装及升级?

下载地址:https://community.fit2cloud.com/#/products/metersphere/downloads
离线安装:
https://metersphere.io/docs/v2.x/installation/offline_installation/
离线升级:
https://metersphere.io/docs/v2.x/installation/offline_upgrade/

如何在 K8S 环境部署 MeterSphere?

参考:https://blog.csdn.net/mfanoffice2012/article/details/121367418

企业版如何开启 UI 测试模块?

UI 测试功能模块是X-pack包功能,属于企业版功能。需要导入企业版许可后按照以下操作。
1、需要在后台修改 /opt/metersphere/.env 文件把 MS_UI_TEST 修改成 true,
2、执行 msctl reload
3、在系统里的 selenium-docker 地址填上:http://selenium-hub:4444 这个地址

安装 MeterSphere 遇到内核类的问题如何解决?错误信息如下:docker: Error response from daemon: OCI runtime create failed: systemd cgroup flag passed…

解决步骤如下:

1、打开 daemon.json 文件

2、将 "exec-opts": ["native.cgroupdriver=systemd"] 删掉即可,重启 docker:

service docker restart

3、重启服务

msctl reload

K8S 部署 MeterSphere 时出现以下错误信息,该如何处理?

错误信息如下图所示:<html><head><title>413 Request Entity Too Large</title></head><body><center><h1>413 Request Entity Too Large</h1></center><hr><center>nginx/1.17.8</center></body></html><!-- a padding to disable MSIE and Chrome friendly error page --><!-- a padding to disable MSIE and Chrome friendly error page --><!-- a padding to disable MSIE and Chrome friendly error page --><!-- a padding to disable MSIE and Chrome friendly error page --><!-- a padding to disable MSIE and Chrome friendly error page --> 

解决方案基于不同的部署方式参见如下:

情况一:对于 Helm 部署的 MeterSphere ,在 ingress 里最后一行加个注解即可:

#ngnix请求破除1m限制,
 kubectl edit ingress metersphere
  
  
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    meta.helm.sh/release-name: metersphere
    meta.helm.sh/release-namespace: default
    nginx.ingress.kubernetes.io/proxy-body-size: 50m

情况二:基于普通 Nginx 部署的按照如下说明调整即可:

  1. 打开 nginx 服务的配置文件 nginx.conf;

  2. 在 http 配置中加入 client max body size xxm , xx 根据需求改动;

  3. 保存后重启 nginx,问题解决。

我想试用企业版,怎么联系获取呢?

可以填写 MeterSphere 企业版试用申请表单:https://jinshuju.net/f/CzzAOe ,会有商务同事联系您。

Docker 容器启动报错:ERROR: Failed to Setup IP tables: Unable to enable SKIP DNAT rule ,需要如何解决?

service docker restart
msctl reload

数据库采用内置且未开防火墙,MeterSphere 服务却连不上数据库,如何处理?

此种情况需要检查 /opt/metersphere/.env 里面的 DOCKER_SUBNET 是否与服务器网卡在同一网段,同一网段会影响路由转发导致服务连不上数据库:
1、需要修改 env 文件中的 DOCKER_SUBNET 的网段;
2、并执行 msctl uninstall -v 先进行卸载 再执行 msctl reload 进行重新创建容器(此步骤不会导致数据丢失)。

如何将 MeterSphere 服务迁移到其他服务器?

迁移步骤如下所示:

1、导出数据库,执行以下命令:

docker exec -i mysql mysqldump -uroot -pPassword123@mysql metersphere --max_allowed_packet=2G > metersphere.sql

2、备份 /opt/metersphere/data 目录;

3、新机器上用对应版本的安装包进行解压安装;

4、删除新机器上 metersphere 数据库并创建新库,执行以下命令:

CREATE DATABASE metersphere /*!40100 DEFAULT CHARACTER SET utf8mb4 */

5、将数据库导入及备份的 /opt/metersphere/data 目录进行导入;

6、重启 MeterSphere,执行以下命令: 

msctl restart

MeterSphere 部署中遇到 Prometheus 启动不起来,一直处于 Restarting 该如何处理?

错误如下图所示:

执行以下脚本尝试启动:

chmod -R 755 /opt/metersphere/conf/prometheus
docker stop ms-prometheus
docker rm ms-prometheus
msctl reload

MeterSphere 部署中遇到 Redis 启动不起来,一直处于 Restarting 该如何处理?

启动时报错如下:

进入 MerterSphere 服务器执行如下命令:

chmod -R 755 /opt/metersphere/conf/redis.conf
docker stop redis
docker rm redis
msctl reload

虚拟机重启之后 MeterSphere 服务起不来了如何恢复?

目前 MeterSphere 服务默认未添加开机自启动,可执行如下命令:

service docker restart
msctl reload

Node-controller 启动出现如下错误该怎么解决?

错误如下图所示:


修改 /opt/metersphere/docker-compose-node-controller.yml 关掉非 root 用户运行配置或者 /opt/metersphere 下的文件授予 777 权限。

env 环境变量正确,Kafka 状态正常,9092 端口正常,防火墙未开,但 MeterSphere 容器内部访问不了 Kafka,该如何处理?

基于以上先确认 docker 版本已升级到最新版本,重启、卸载 docker 的是否生效,如还不生效,查看 msctl status 发现如没有 docker-proxy 服务,打开 vi /etc/docker/daemon.json 确认 userland-proxy 配置,如果是 false ,则将其修改为 true,重启 docker , reload 服务 即可恢复。

MeterSphere怎么设置开机自启动?

参考:https://blog.csdn.net/qq_33417373/article/details/119672506

内置 MySQL 显示连接数太多,系统默认的连接数未生效,需要如何排查处理?

MeterSphere 内置数据库默认的连接数为 2000,如出现如下图的报错信息:

自带的 my.cnf 没有生效,没生效的原因是 my.cnf 文件权限不对:

执行以下命令完成如下操作:

chmod -R 655 /opt/metersphere/conf/my.cnf
docker stop mysql
docker rm mysql
msctl reload

执行完成之后进数据库查看,确认配置文件已经生效,如下所示:

如何修改日志保存天数?

修改 /opt/metersphere/conf/metersphere.properties添加变量名 logger.max.history(天数),然后重启服务 msctl restart

MeterSphere版本与Jenkins 插件版本一致,网络也通畅,但是仍然校验失败,应该如何处理?

错误信息如下图所示,此情况请查看 MeterSphere 服务器与 Jenkins 服务器之间的时间差,两台服务器之间的时间需保持一致,否则会导致签名失效。

升级过程中,数据库出现"[InnoDB] Upgrade is not supported after a crash or shutdown with innodb_fast_shutdown = 2. This redo log was created with MySQL 5.7.33, and it appears logically non empty. Please follow the instructions at http://dev.mysql.com/doc/refman/8.0/en/upgrading.html" 这样的错误该如何处理?

出现这样的错误有两种处理方式:

  1. 处理方式1:mysql 目录下两个 ib_logfile0 和 ib_logfile1 删掉,删除 mysql 容器,再重新创建 msctl reload;

  2. 处理方式2:旧版数据库的文件直接替换到新版本的 MeterSphere 服务下(如:1.20-LTS升级到 2.10-LTS),这种操作是不可行的,需重新安装升级前的 MeterSphere 版本,然后替换 mysql 目录下文件,进行启动,启动成功后,再升级到 2.10-LTS 版本。

如何通过源码部署 MeterSphere ?

参考:https://mp.weixin.qq.com/s?__biz=MzI1NTMxMDU1MA==&mid=2247484859&idx=1&sn=93c74f2dbbd45c869bf4fdc2c527e358&chksm=ea36aa02dd412314f6ea8888d57c8988097b528e03cc65129cc2e2fac53cc58f0c2c5038e6af&mpshare=1&scene=1&srcid=0209PuTEpNnT4dICsHondAX7&sharer_sharetime=1644396429037&sharer_shareid=ade448e9dae90549b87f206fb420d63e&version=3.1.11.90266&platform=mac#rd

本地源码启动如何添加或者修改 Redis 参数?

在默认的 /opt/metersphere/conf/metersphere.properties 文件内进行添加如下图所示内容:

二、平台使用问题

2.1 接口测试使用问题

数据库与接口如何结合起来进行断言? 

参考:https://blog.csdn.net/qq_33417373/article/details/117708500

MeterSphere 数据库查询如何按结果存储解析?

参考:https://blog.csdn.net/qq_33417373/article/details/119354800

接口自动化场景内,加上等待控制器,为什么每个接口都会执行等待时间?

如果等待控制器放在最外层,默认是全局的等待控制器,每个接口步骤都会执行;如果只需要执行一次,那么等待控制器应该放在接口的前置操作内,作为局部等待控制器。

MeterSphere 数据库查询如何按结果存储解析?

参考:https://blog.csdn.net/qq_33417373/article/details/119354800

接口自动化怎么进行参数提取?

参考:https://blog.csdn.net/jierxiaoyao/article/details/115379806

MeterSphere 如何通过 ssh 连接主机,并执行 shell 命令?

参考:https://mp.weixin.qq.com/s/B4WBmMHQE88dDJnrzh5C5Q

如何使用 MeterSphere 中的 Mock 服务?

参考:https://blog.csdn.net/hxe116/article/details/120364467

请求的响应结果是 Unicode 编码,如何将其转为中文?

在对应接口下添加一个后置脚本,粘贴如下代码即可:

String s=new String(prev.getResponseData(),"UTF-8");
        char aChar;
        int len= s.length();
        StringBuffer outBuffer=new StringBuffer(len);
        for(int x =0; x <len;){
            aChar= s.charAt(x++);
            if(aChar=='\\'){
                aChar= s.charAt(x++);
                if(aChar=='u'){
                    int value =0;
                    for(int i=0;i<4;i++){
                        aChar= s.charAt(x++);
                        switch(aChar){
                            case'0':
                            case'1':
                            case'2':
                            case'3':
                            case'4':
                            case'5':
                            case'6':
                            case'7':
                            case'8':
                            case'9':
                                value=(value <<4)+aChar-'0';
                                break;
                            case'a':
                            case'b':
                            case'c':
                            case'd':
                            case'e':
                            case'f':
                                value=(value <<4)+10+aChar-'a';
                                break;
                            case'A':
                            case'B':
                            case'C':
                            case'D':
                            case'E':
                            case'F':
                                value=(value <<4)+10+aChar-'A';
                                break;
                            default:
                                throw new IllegalArgumentException(
                                        "Malformed   \\uxxxx  encoding.");}}
                    outBuffer.append((char) value);}else{
                    if(aChar=='t')
                        aChar='\t';
                    else if(aChar=='r')
                    aChar='\r';
                    else if(aChar=='n')
                    aChar='\n';
                    else if(aChar=='f')
                    aChar='\f';
                    outBuffer.append(aChar);}}else
                outBuffer.append(aChar);}
prev.setResponseData(outBuffer.toString());
String s=new String(prev.getResponseData(),"UTF-8");
        char aChar;

接口测试请求体类型为 x-www-form-urlencoded 时,请求体会默认被编码,不想默认被编码需要如何处理?

当类型为 x-www-form-urlencoded 时,是否选择编码都会被默认编码的,如果不需要编码,则请求体类型使用 raw。

如何添加或者修改请求头信息内容?

接口测试的HTTP类型请求,某些情况下需要通过参数化请求体或者修改请求头,可以通过如下前置脚本进行添加或者修改请求头内容。前置脚本如下所示:

import org.apache.jmeter.protocol.http.control.HeaderManager;
import org.apache.jmeter.protocol.http.control.Header;
 
// 获得请求头信息
HeaderManager headers = sampler.getHeaderManager();
// 打印全部请求头信息
log.info("添加前" + headers.getHeaders().getStringValue());
// new一个Header对象
myHeader = new Header("x-parse-session-token", "123456432");
// 添加Header到请求头管理器
headers.add(myHeader);
// 打印全部请求头信息
log.info("添加后" + headers.getHeaders().getStringValue());

MeterSphere 做接口测试添加 SQL 查询,发现 MySQL 数据库存储的是 0 或者 1 ,实际查询出来的是 true 或者 false 该如何处理?

需要在环境配置数据库配置的 URL 内加上 &tinyInt1isBit=false 或者 ?tinyInt1isBit=false ,数据库连接 URL 配置如下图所示:

如何在接口测试中下载文件?

在接口测试中,文件下载类的接口调试之后,文件无法直接查看或者获取,可通过后置脚本添加如下脚本进行下载响应文件到服务器上,然后通过服务器目录文件进行获取,后置脚本详细信息如下:

import java.io.*;
 
byte[] result = prev.getResponseData();
String file_name = "/opt/metersphere/data/xxxx.xxx";
File file = new File(file_name);
FileOutputStream out = new FileOutputStream(file);
out.write(result);
out.close();

接口测试执行过程中提示“调用资源池失败,请检查资源池是否配置正常”,出现如下提示该怎么解决?

错误如下图所示:

解决思路如下:

  1. 确认“项目设置”下“应用设置"开启资源池配置;

  2. 确认“系统参数设置”下“本地站点”地址可以通过 MeterSphere 服务器进行访问,否则 jmx 地址下载失败。

k8s 部署环境无法连接外网,下载离线镜像上传到 Harbor 仓库,该怎么修改配置文件的镜像?

下载并解压 helm 包,将 values.yaml 文件 imagePrefix 字段值修改为 Harbor 仓库地址,如下图所示

k8s 部署环境无法使用 nodePort 暴露端口,部分服务不能正常启动,容器日志提示“ nc: 177.0.0.1 (177.0.0.1 :31304): connection timed out” 问题, 该如何解决?

1、修改 helm 包内 “templates/03-modules” 目录中的 yaml 文件,将 kafka 的地址更改为 Service 名称加上端口,如下图所示。


2、修改“templates/01-config-map” 目录下的 “metersphere-scripts.yaml” 文件中的 kafka 地址,如下图所示

2.2 性能测试使用问题

性能测试结束之后,下载JTL文件提示“JTL文件不存在或者重新执行后下载”,需要如何处理?

JTL 文件能否下载取决于测试资源池是否开启“后置监听器”:

  1. 社区版是默认开启的,不可配置,可直接下载;

  2. 企业版测试资源池提供是否开启“后置监听器”配置项功能,如不开启,则会出现标题中的提示,需要人工开启,开启之后,则支持下载JTL文件。

性能测试资源都是节点类型,有的节点显示不出来CPU的使用情况,该如何解决?

未显示CPU 使用情况如下图所示:


可以升级一下对应测试资源池的 node-controller(v2.10.8-LTS)组件。

性能测试过程中遇到如下报错该怎么解决?2023-07-17 11:11:28,534 QueueWaits: 89; QueueWaitTime: 21777547018 (nanoseconds), you may need to increase queue capacity, see property 'backend_queue_capacity'

这个需要修改 Kafka 的队列参数:如出现上述错误,可以在 /opt/metersphere 目录下 docker-compose-performance-test.yml 里面调整 KAFKA_QUEUE-SIZE 参数,默认为20000 。

2.3 UI 测试使用问题

UI测试针对下拉框出现定位失败的问题怎么解决?

一般错误息如下图所示:

可以通过如下图方式进行定位元素解决此类问题,其中定位方式为 xpath 正则://span[text()="xxx"] 其中 xxx 为目标下拉框所选的值。

UI测试如何将输入值清空?

总共三种方式:
1、快捷键:${KEY_CONTROL+A}${KEY_BACK_SPACE};
2、双击+快捷键:需先设置双击,再加上快捷键:${KEY_BACK_SPACE} (此种方式不能用于多类型的内容 比如:122aass, 只能用于aaaaa 或者22222);

3、脚本:其中 Key 为需要清空元素的 ID。

document.getElementById("key").value = "";

2.4 其他使用问题

如果导出测试计划中的功能用例进行存档?

进入MySQL数据库,执行如下sql命令,再通过 Navicat 之类的工具导出或者原始 sql 导出 CSV 文件即可。

select * from test_case where id in (select case_id from test_plan_test_case left join test_plan on test_plan.id=test_plan_test_case.plan_id where test_plan.name='测试计划名称');

默认的 admin 密码忘记了,怎么找回密码?

连接到数据库后,执行如下 SQL 语句可以将用户 admin 的密码重置为 metersphere。

update user set password='3259a9d7f208ef9690025d1432558c5b' where id='admin';

admin 的系统管理员角色默认被误删的话怎么办?

进入 MySQL 数据库执行以下语句即可:

INSERT INTO user_group (id, user_id, group_id, source_id, create_time, update_time)VALUES (UUID(), 'admin', 'admin', 'system', 1622183788364, 1622183788364);

项目设置下的文件管理上传文件遇到如下提示:“Connection has been closed BEFORE response, while sending request body ”,该如何解决?

调大 /opt/metersphere/docker-compose-project-manage.yml 里的 limit_mem 到 4G,然后msctl reload 即可。

MeterSphere 如何引用第三方python库?

参考:https://mp.weixin.qq.com/s/6-sR3kEbgvgtdcZViRleNw

如何保持 Jira 缺陷类型、需求类型对接MeterSphere后,与Jira 上显示的类型一致?

MeterSphere上获取到的问题类型列表与目标不符(如下图是MeterSphere中的问题类型),需要在JIRA上进行配置。

MeterSphere上的问题类型参照如图所示:

需要基于MeterSphere同步在Jira上设置问题类型:



是否对你有帮助?