MeterSphere 如何连接Mongodb数据库
前言:最近有在使用Metersphere的时候遇到了需要连接Mongodb的需求,而Metersphere只支持以下四种通过数据库驱动连接:mysql、sql server、oracle、pgsql,现在给大家分享一种通过前置脚本连接mongo的方法
原理:
通过导入mongo的相关驱动包,引用相关的数据包,在前置脚本中使用Groovy脚本进行连接并查询数据库。
1、导入对应的jar包
关于jar包大家可以直接到我提供的免费资源下载,也可以通过这个网址搜索下载:https://mvnrepository.com
在jar包下载后上传到MS平台。这里的上传分两种:①、普通管理元上传在项目的文件管理下,上传后文件的作用域只有在该项目下生效
②、admin管理员上传的系统的环境配置下-在项目管理菜单中上传jar包,上传后jar包的作用域为对应的应用空间
2、设置前置脚本
在MS的case编辑页面,点击添加前置脚本,并且前置脚本语言选择Groovy语言
3、编写前置脚本
3.1、连接Mongdb
//导入所有相关依赖
import com.mongodb.*
import com.gmongo.*
//连接数据库 这里的数据路连接信息为虚拟信息 大家对应替换就可以,端口一般都是27017
MongoCredential credentials = MongoCredential.createCredential("username","admin", "userpassword" as char[])
GMongoClient client = new GMongoClient(new ServerAddress("172.192.120.110",Integer.valueOf(27017)), [credentials])
log.info("<<<<<<<<<<<<<<<<<<<<<连接数据库成功<<<<<<<<<<<<<<<<<<<<<<<")
3.2、指定操作数据库和集合并查询数据
//这里的db_name指的就是一个数据库实例下多个数据库中的一个
def DB = client.getDB("db_name")
// 这里的tablename就是我们指定要操作的集合,在mysql中和表的概念对应,查询这个表中year字段为2020的一个文档
def datadb=DB.tablename.findOne([year:2020])
String redata=datadb
log.info("查询结果为:"+ redata)
//这里的paperId就类似与我们查找mysql的时候其中的一列属性,有一列字段是paperId,以上的datadb返回的是一个文档类似于mysql中的一行数据
def paperid= datadb.paperId
3.3、将获取的数据设置为变量
//将获取的数据设置为全局变量
vars.putObject(${__metersphere_env_id}+"test_paperid",paperid);
//设置为局部变量
vars.putObject("test_paperid",paperid);
//打印查询学生id结果
log.info("查询到的paperid为{}。", paperid)
client.close()
3.4、无注释版
//导入所有相关依赖
import com.mongodb.*
import com.gmongo.*
MongoCredential credentials = MongoCredential.createCredential("username","admin", "userpassword" as char[])
GMongoClient client = new GMongoClient(new ServerAddress("172.192.120.110",Integer.valueOf(27017)), [credentials])
log.info("<<<<<<<<<<<<<<<<<<<<<连接数据库成功<<<<<<<<<<<<<<<<<<<<<<<")
def DB = client.getDB("push_listen")
def datadb=DB.listen.findOne([year:2020])
String redata=datadb
log.info("查询结果为:"+ redata)
def paperid= datadb.paperId
vars.putObject(${__metersphere_env_id}+"test_paperid",paperid);
vars.putObject("test_paperid",paperid);
log.info("查询到的paperid为{}。", paperid)
client.close()
4、使用获取到的变量
1、在入参中使用获取到的变量
可以直接按照变量的引用方式使用:比如入参为:
{
“name”:“xaiohong”,
“year”: 2020
“id”:${paperId}
}
2、在断言中使用获取到的变量
在断言中使用比如:
断言响应结果中的某个数据与我们查询到的数据相等 或者 我们查询到的数据等于我们预期的某个值:
一种使用jsonpath断言,一种使用脚本断言
脚本断言:
5、常用的查询语句
//在对应的表中取出一个文档数据
def DB = client.getDB("db_name")
def datadb=DB.table_name.findOne()
//多条件查询出一条文档数据
def DB = client.getDB("db_name")
def datadb=DB.table_name.findOne(isValid:1,voiceId:"2053",voiceTime:827)
//查询 并按照升序排序
def DB = client.getDB("db_name")
def datadb=DB.table_name.findOne(isValid:1,year:2020).sort({_id:1})
//根据查询条件,指定查询一个文档的 _id和 year两列数据
def DB = client.getDB("db_name")
def datadb=DB.table_name.findOne([year:2020],[_id:1,year:1])
//查询一个文档 year的值在2020和2021之间的数据
def DB = client.getDB("db_name")
def datadb=DB.table_name.findOne(year:[$in:[2020,2021]])
6、mysql语法与mongodb查询语法对照比较
供大家参考学习!