Jmeter-用python连接MongoDb(Jmeter中执行python代码)
一、下载jython-standalone-2.7.2.jar包放到jmeter安装目录lib下,重启jmeter
二、python安装pymongo
三、在线程组里添加 JSR223 Sampler,注意选择Language
代码 如下:注意鞋面是调试代码,最后往jmeter里放的时候记得在代码最后面加 SampleResult.setResponseData(res) 才能在响应中看到
import sys import json sys.path.append("D:\Python\Lib\site-packages") from pymongo import MongoClient client = MongoClient("IP",27017)#MongoDb数据库的IP地址 db = client.testdb#testdb是数据库的集合名称 db.authenticate("username", "password")#连接数据库的用户名和密码 res = db.test_user.find_one({"_id" : "90000036598"})#test_user集合名称 res = str(json.dumps(res, ensure_ascii=True))#编码后转换成str
四、在jmeter中添加后置处理器,用来处理中文显示
代码如下:
prev.setDataEncoding("UTF-8"); 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());
五、添加查看结果树
六、但是直接想返回单一的字符串时,又发现中文乱码了,不要慌改一下编码就OK,应为解释器适用是python2,不能用python3的解释器来调试
res = '张三'.decode('utf-8').encode('unicode_escape')
so 总结就是:
单个字符串显示就是
res = '张三'.decode('utf-8').encode('unicode_escape') SampleResult.setResponseData(res)
dict就用
import json name = {"name":"张三"} res = str(json.dumps(name, ensure_ascii=True)) SampleResult.setResponseData(res)
最后不要忘记加后置处理器处理中文