【mongodb】Jemeter调用Python操作mongoDB压测
由于项目需要,对mongoDB进行压测。
我有两种思路去搞,分别如下:
1.使用Python操作MongoDB,然后使用Jmeter调用Python压测;
2.使用Shell操作MongoDB,然后使用Jmeter调用Shell压测;
下面简要写一下部分要点:
1.shell 操作 mongoDB:
sql="db.c_device.find( { enterpriseId:"ab808081623e258801624136fdad001c", $or:[ {deviceDisplayName:/1356/i}, {deviceSn:/1356/i}, {number:/1356/i}, {'departments.deptName':/1356/i} ] } ).sort({joinTime:-1}).skip(70070).limit(10)" time echo $sql|mongo -u'haochuang' --authenticationDatabase "haochuang" --host '127.0.0.1' -p'haochuang123' 'haochuang'
2.python操作 mongoDB:
#!/usr/bin/env python # encoding: utf-8 ''' @author: haochuang @license: (C) Copyright 2018-2019, MIT Corporation Limited. @contact: nianhuaiju@qq.com @software: api test @file: python_mongodb_ok.py @time: 2019/9/12 11:22 @desc: python-mongodb ''' import pymongo from pymongo import MongoClient ''' python mongodb test ''' host = '127.0.0.1' username = 'haotest' password = 'haotest123' port = '27017' db = 'haotest' mongo_url = 'mongodb://{0}:{1}@{2}:{3}/?authSource={4}&authMechanism=SCRAM-SHA-1'.format(username, password, host, port,db) # 进行连接 client = MongoClient(mongo_url) # 指定数据库 db = client.haotest # 指定集合 collection = db.hao_test print "EXEC START..." # 获取时间 # sql_get_time = collection.find({"enterpriseId":"aasdaasdad321313123sdfsfsdfsdfs","$or":"[{deviceDisplayName:/1356/i},{deviceSn:/1356/i},{number:/1356/i},{'departments.deptName':/1356/i}]"}).sort({"joinTime":"-1"}).skip(70070).limit(10); sql_get_time = collection.find({"enterpriseId":"wqweqeqeqsf1231313dsferwrew",'$or':[{"deviceDisplayName":"/123/i"},{"deviceSn":"/1356/i"},{"number":"/1356/i"},{"departments.deptName":"/1356/i"}]}).count(); print "sql_get_time:" + str(sql_get_time) # -- 统计enterpriseId中的device数量 sql_result = collection.find({"enterpriseId":"a2234dsffsdfasdasda23131"}).count(); print "enterpriseId_count:" + str(sql_result) queue_result=sql_result print queue_result print "EXEC END..." # print(next(sql)) client.close()
也可以使用 BeanShell,在里面用JAVA代码调用shell命令
log.error("开始"); String[] cmd = new String[]{"/bin/sh", "-c", "pwd"}; Process ps = Runtime.getRuntime().exec(cmd); BufferedReader br = new BufferedReader(new InputStreamReader(ps.getInputStream())); StringBuffer sb = new StringBuffer(); String line; while ( (line = br.readLine()) != null ) { sb.append(line).append("\n"); } String result = sb.toString(); log.error("结果:"+result);
补充,python调用JMeter
import os import sys currpath = os.path.dirname(os.path.realpath(__file__)) # 当前文件目录 sys.path.insert(0, currpath) # # print(currpath) JmxTemlFileName = r'/Users/admin/Documents/jmeter/stu_tea_test.jmx' # 要执行的文件 # JMETER_Home = r'''"/Users/admin/Downloads/apache-jmeter-5.1.1/bin/jmeter.bat"''' # jmeter执行文件 Jmeter_Out = currpath + '/result.txt' def runCmd(cmd): print(f"command={cmd}") os.system(cmd) ########### 下面使用subprocess.Popen来调用shell############ # res = subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE, stderr=subprocess.PIPE) # print('sys',sys.path) # stdoutinfo,stderrinfo = res.communicate() # print(f"stderrinfo={stderrinfo}") # print(f"stdoutinfo={stdoutinfo}") # print("returncode={0}".format(res.returncode)) exec_str = f"jmeter -n -t {JmxTemlFileName} -l {Jmeter_Out}" if __name__ == '__main__': runCmd(exec_str)
Jmeter执行python脚本函数方法1
如下摘自:https://blog.csdn.net/q13554515812/article/details/85252149
一、下载地址
插件百度网盘下载地址:https://pan.baidu.com/s/1SvJjyThsXYryXuEEg9rm3g
提取码:q9hd
二、使用说明
1.将下载的 jmeter-functions-execute-python-script-1.0.jar 包放到目录%JMETER_HOME%\lib\ext下
2.启动Jmeter,进入【选项】-【函数助手对话框】找到函数【__ExecutePythonScript】如下图:
参数1:脚本所在路径,示例:G:\测试代码\cloudhua\interfaceTest\pythonScripts\fileBlockScript.py
参数2:parameter1,python脚本接收的第一个参数;(可不填)
参数3:parameter2,python脚本接收的第二个参数;(可不填)
参数4:parameter3,python脚本接收的第三个参数;(可不填)
Jmeter执行Python脚本2:
jmeter 可以通过Jython 执:行python代码
1、下载Jython jar包:http://www.jython.org/downloads.html
2、把下载的Jython 的jar包放到 jmeter的lib文件夹。重启jmeter
3、线程组中添加 JSR223 Sampler
4、设置JSR223 Sampler
python代码
#获取jmeter 参数 param =vars.get("param") print "hello" #设置响应信息 SampleResult.setResponseData("message"); SampleResult.setResponseCode("502") SampleResult.setSuccessful(False)
5、执行,由于代码中标记502 和执行失败,执行结果如下
想要熟悉更多mongoDB相关命令,请参考这篇文章:https://www.runoob.com/mongodb/mongodb-query.html
参考了如下几篇文章:
Python操作mongodb的9个步骤:https://www.jb51.net/article/141395.htm
Python连接MongoDB操作:https://www.yiibai.com/mongodb/mongodb_python.html
使用pymongo连接mongodb时报错:pymongo.errors.OperationFailure: not authorized:https://www.cnblogs.com/benben-wu/p/10312689.html
待续...

赠人玫瑰
手留余香
我们曾如此渴望命运的波澜,到最后才发现:人生最曼妙的风景,竟是内心的淡定与从容……我们曾如此期盼外界的认可,到最后才知道:世界是自己的,与他人毫无关系!-杨绛先生
如果,您希望更容易地发现我的新博客,不妨点击一下绿色通道的
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
2018-09-12 WSDL测试webservice接口记录
2017-09-12 使用Jmeter对API进行性能测试