有个需求,需要在压测环境中,创建几十万的账号数据,然后再根据创建结果,查询到某些账号信息。
按照之前我的做法,直接Python调用API,然后再数据库查询;
但是近期所有开发人员的数据库访问权限被限制,我也不能例外。没法访问数据库,但是有没有查询的API,不好弄。
后来我想到了一个解决办法,试验了一下,可行。简要记录如下:
拿到创建数据的 post API,用Jmeter实现以下,然后提取返回值,并保存到本地文件。
顺便说一下,其实这个用Python实现也没问题,选择哪个,其实都行。
我之前用Python弄得多一些,这里把用Jmeter实现,也给做一下简要的简要记录。如下:
步骤如下:
一.新建TestPlan
二.增加如下组件:
1.TestPlan
2.增加setUp Thread Group
3.增加 HTTP HTTP信息头管理器
配置:Content-Type:application/json
4.增加HTTP Request
POST http://haochuangtest.com/api/rest/internal/v1/en/XXXenterprise/${具体参数}/cloudXXXXX
POST data:
{
"id": "",
"XXXXXNumber": "",
"displayName": "HAO-TEST",
"password": "",
"XXXXXPassword": "",
"autoXXX": 2,
"XXXModel": false,
"smartXXXX": 6,
"expireTime": -1,
"adminUserId": 0,
"adminDisplayName": "null",
"permanent": "true",
"XXXXXNumberType": 4,
"XXXXXId": "null",
"userXXXXXXXDisplayName": "null",
"configs": {
"conXXXX": "2"
}
}
5.增加 Regular Expression Extractor
<hashTree>
<RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Regular Expression Extractor" enabled="true">
<stringProp name="RegexExtractor.useHeaders">false</stringProp>
<stringProp name="RegexExtractor.refname">meetingNumber</stringProp>
<stringProp name="RegexExtractor.regex">"meetingNumber":"(.+?)",</stringProp>
<stringProp name="RegexExtractor.template">$1$</stringProp>
<stringProp name="RegexExtractor.default"></stringProp>
<stringProp name="RegexExtractor.match_number">1</stringProp>
</RegexExtractor>
<hashTree/>
6.增加 BeanShell PostProcessor
FileWriter fstream = new FileWriter("D:\\WORK_2020\\20200224_HAOCloud\\meetingId.txt",true);
BufferedWriter out = new BufferedWriter(fstream);
out.write(vars.get("meetingNumber")+ "\n");
out.close();
fstream.close();
7.增加 View Result Tree 察看结果树
1.对于返回结果的正则部分要注意,差一个双引号或者.都可能出错,导致获取的结果为null;
2.对于两个引用的组件要注意,不要选错;
3.其中主要的就是这个 BeanShell后置处理器 ,要注意使用;
但是该文章有点问题错误,看的时候要注意辨别;
当做性能压测时,可能会需要把响应数据的一些字段统计出来。这里简单介绍一下。
1、首先把接口调通,确定需要统计的字段,这里以统计ccmpSeq字段来做例子。
2、添加正则表达式提取器,用来提取响应结果中的ccmpSeq
正则表达式用""包起来,如HTTP请求完成后的响应数据
{
"ccmpSeq":"CBS_queryBalance20171023131825491588",
"respTime":"20180820105000",
"respCode":"0",
"respDesc":"操作成功",
"data":{
"totalAmount":19999991000,
"accountID":"acct1470001090166"
}
}
我们只需要统计ccmpSeq,所以正则表达式为 "ccmpSeq":"(.+?)"
() 表示括起来的部分就是要提取的。
. 表示匹配任何字符串。
+ 表示一次或多次。
?表示不要太贪婪,在找到第一个匹配项后停止。
(3)模板:用$$引用起来,如果在正则表达式中有多个正则表达式,则可以是$2$,$3$等等,表示解析到的第几个值给seq。如:$1$表示解析到的第1个值,我们这里只有一个正则表达式,所以是$1$
(4)匹配数字:0代表随机取值,1代表全部取值,通常情况下填1
(5)缺省值:如果参数没有取得到值,那默认给一个值让它取,通常情况下为空
3、在本地新建一个123.csv文件,然后添加一个BeanShell PreProcessor,用于提取结果并将之保存到123.csv文件。
4、添加线程数为10,运行后,打开123.csv,查看结果。
JMeter学习-009-JMeter 后置处理器实例之 - 正则表达式提取器(二)多参数获取JMeter学习-008-JMeter 后置处理器实例之 - 正则表达式提取器(一)
前文简述了通过后置处理器 - 正则表达式提取器 获取 HTTP请求 响应结果中的特定数据,未看过的亲,敬请参阅 JMeter学习-008-JMeter 后置处理器实例之 - 正则表达式提取器(一)。 此文主要对正则表达式提取器的 正则表达式、模板、匹配数字,三者的关系,做进一步的讲解。 截取商品列表
python中with语句的作用 python里面的with语句
这篇文章主要介绍了理解Python中的With语句,本文讲解了With语句是什么、with如何工作等内容,并给出了代码实例,需要的朋友可以参考下
With语句是什么? 有一些任务,可能事先需要设置,事后做清理工作。对于这种场景,Python的with语句提供了一种非常方便处理方式。一个很好的例子是文件处理,你需要获取一个文件句柄,从文件中读取数据,然后关闭文件句。 如果不用wit