zoukankan      html  css  js  c++  java
  • 【Jmeter】jmeter提取response中的返回值,并保存到本地文件--BeanShell后置处理器

    有个需求,需要在压测环境中,创建几十万的账号数据,然后再根据创建结果,查询到某些账号信息。

    按照之前我的做法,直接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">&quot;meetingNumber&quot;:&quot;(.+?)&quot;,</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")+ "
    ");
    out.close();
    fstream.close();

    7.增加 View Result Tree 察看结果树

    3.调试配置并运行;

    运行过程,查看结果数的返回结果就行,此处不做截图;

    4.检查结果:

    可见文件已经成功生成 :

       

    注意点:

    1.对于返回结果的正则部分要注意,差一个双引号或者.都可能出错,导致获取的结果为null;

    2.对于两个引用的组件要注意,不要选错;

    3.其中主要的就是这个 BeanShell后置处理器 ,要注意使用;


    部分参考:https://www.cnblogs.com/yrxns/p/10912816.html ,但是该文章有点问题错误,看的时候要注意辨别;

    当做性能压测时,可能会需要把响应数据的一些字段统计出来。这里简单介绍一下。

    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,查看结果。 

  • 相关阅读:
    文件比较运算符
    中山慧海人才市场9月份 现场招聘会预告
    80后智能科技公司诚聘业务人员
    元豪路灯厂诚聘
    对Discuz的简单认识
    discuz阅读权限的设置作用
    个人对织梦系统的认识
    awvs的用法
    cain使用方法
    CCNA笔记(1)
  • 原文地址:https://www.cnblogs.com/haochuang/p/12357215.html
Copyright © 2011-2022 走看看