1、背景
在实现导入功能的自动化测试场景时,需要先下载导入模板,但文件存在于MinIO对象存储服务中,而不是metersphere服务器中,所以要在脚本中访问MinIO,获取文件
2、使用案例
步骤1:先将导入模板上传到metersphere文件管理中,从文件路径中可看出当前文件在MinIO中的桶名和对象名,脚本中要用到

步骤2:自定义脚本获取文件(示例脚本中包含了将文件内容转base64的步骤) 注意,要填入相应的MinIO 的账号信息,可以在 MeterSphere 的服务器的 /opt/metersphere/.env 里查看
import io.minio.MinioClient;
import io.minio.GetObjectArgs;
import io.minio.errors.MinioException;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;
// 初始化MinioClient
//MinIO 的账号信息,可以在 MeterSphere 的服务器的 /opt/metersphere/.env 里查看
String endpoint = "http://**********:9000";
String accessKey = "*****";
String secretKey = "*****";;
MinioClient minioClient = MinioClient.builder()
.endpoint(endpoint)
.credentials(accessKey, secretKey)
.build();
// 桶名和对象名
String bucketName = "metersphere";
String objectName = "52ed7621-1034-41fa-a69e-14dc61cce1d9/自动化测试实体-导入视图1 (2).xls";
// 获取文件内容的InputStream
InputStream is = minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(objectName).build());
// 使用ByteArrayOutputStream来收集文件内容的字节
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[4096]; // 4KB缓冲区
int bytesRead;
while ((bytesRead = is.read(buffer)) != -1) {
baos.write(buffer, 0, bytesRead);
}
// 关闭InputStream
is.close();
// 将收集的字节转换为Base64编码的字符串
byte[] fileBytes = baos.toByteArray();
String base64EncodedString = Base64.getEncoder().encodeToString(fileBytes);
// 输出或处理Base64编码的字符串
// System.out.println(base64EncodedString);
log.info("base64EncodedString:"+base64EncodedString);
vars.put("base64EncodedString", base64EncodedString);
// 关闭ByteArrayOutputStream
baos.close();
后续步骤中,可以使用变量base64EncodedString,实现导入功能
遇到的坑:
1、参考网上的方案下载文件,一直失败,后来才知道metersphere集成了Minio对象存储服务,所以文件上传后,存储在了minio中,而不是安装服务器中
网上的方案(文件存在安装服务器中):zhuanlan.zhihu.com/p/607189282 飞致云官方文档:kb.fit2cloud.com/?p=7cd13b53…
910

被折叠的 条评论
为什么被折叠?



