zoukankan      html  css  js  c++  java
  • jmeter接口性能测试【CSV文件读取+接口关联+设置集合点】

    一、前言

    周计划上安排了个接口性能测试的任务,便开始了职业生涯的第一个接口性能测试。。。

    接口进行压测之前,首先需要调通脚本。有两种方式,一种是通过抓包工具(如fiddler)抓取业务接口;另一种是通过jmeter进行脚本录制。

    两者分别有各种的优缺点:

    (1)Fiddler手工抓包:【优点】直接抓取业务接口;【缺点】对于性能测试小白可能比较困难(比如笔者自身,很难找到业务接口间的关联关系);

    (2)Jmeter录制脚本:【优点】各业务接口间的关联关系可以从脚本中体现;【缺点】需要自己过滤无关紧要的相关接口(如下图中圈出部分已禁用的接口);

    因笔者还是性能测试小白,所以选择了用jmeter进行脚本录制这种方式。

    二、脚本录制

     根据性能测试要求,对所需要测的业务系统进行分析大概有多少个事务。如上图,分析得出业务系统有信息自检、填写信息、填写表单、上传材料、提交办件这5个事务。在测试计划下添加HTTP请求默认值、察看结果树、聚合报告,接下来添加线程组。

    (1)测试计划右键添加线程组

    (2)线程组右键新增事务控制器

     

    添加事务控制器后,在录制脚本时,可以在“目标控制器”中选择对应的事务。

    Generate parent sample:是否生成一个父取样,即将事务控制器下的请求看成一个整体(一般勾选该选项)。勾选后,在察看结果树和聚合报告中,只显示事务名称,不显示事务下具体的请求。

     (3)工作台右键添加HTTP代理服务器,(对应浏览器设置代理后)选择对应的目标控制器,并启动录制。

    启动录制后,可去业务系统进行相关操作,此时jmeter会录制相关的脚本,产生的脚本就会显示在对应事务下,如图中“信息自检”下的很多接口,就是录制产生的。事务操作结束后,记得回到jmeter代理服务器页面停止录制,此时该事物的脚本录制结束。

    PS:上图中,事务“基本信息”、“填写表单”、“上传材料”、“完成”的录制步骤同上,此处不过多描述。

    三、关联参数

    存在这样场景:上一个接口产生的数据,是下一个接口的入参。因此,可以用正则表达式提取器,提取上一个接口产生的数据,在下一个接口的传入参数中进行引用。 

     (1)通过正则表达式提取响应参数

    选择对应接口>右键,添加>后置处理器>正则表达式提取器。以提取userCode为例。在正则表达式中填写引用名称、正则表达式以及匹配规则,在接口执行后即可提取对应参数;可通过添加Debug PostProcessor验证提取的参数值是否正确。

    -------------------------------------------------------------------

    正则表达式提取器相关说明:

    Apply to:应用范围;

    要检查的响应字段:数据源;

    引用名称:其他地方引用时的变量名称,可自定义设置。引用方法为:${引用名称}

    正则表达式:正则提取器,()括号里为要获取的的值。"userCode":"为左边界 ,"为右边界。括号里为正则表达式,用来匹配所需要获取的数据;

    ".":匹配除了换行符以外的任何字符;

    "+":重复一次或更多次;

    "?":重复零次或一次;

    模板:$$对应正则表达式提取器类型。-1全部,0 随机,1第一个2第二个,以此类推,若只有一个正则一般就填写$1$;

    匹配数字:匹配数据的所有结果。-1表示全部,0随机,1第一个,2第二个,以此类推。若只要获取到匹配的第一个值,则填写1;

    缺省值:匹配失败时的默认值。可以不写。

    ---------------------------------------------------------------------

    (2)引用参数

    在对应的接口对应的入参的值中进行引用,引用方法:${引用名称}。这样提取的参数值就会变成下一个接口的入参值,接口参数实现关联。

    四、读取CSV文件

    脚本基本跑通之后,为了可以进行多用户的并发,可以通过读取CSV文件引用多个用户变量(userCode)。上篇文章中有提及jmeter如何读取CSV文件,这里不过多描述。

    (上篇博文传送门:https://www.cnblogs.com/dnjiang/p/11290521.html#4349303)

    五、设置集合点

    在进行接口性能测试(多用户并发)时,为了对一些接口施加压力,可以在对应的地方设置集合点(添加Synchronizing Timer)。根据Synchronizing Timer设置的集合点【一般小于或等于线程数】,当请求没有达到集合点时,会处于等待状态;当请求达到集合点时,会一起执行,从而实现并发的效果。

    执行脚本,可在察看结果树中查看同时提交的请求效果。同时可在聚合报告中查看各事务的性能测试结果分析。

     六、自定义变量

    日常接口压测过程中,存在每个接口请求头中都有带token的情况,当token过期后,执行脚本异常;因此我们需要替换接口请求头中的token信息,一个一个替换的话麻烦费时,因此我们可通过自定义变量并在对应位置引用;替换token时,只需改变量值即可。

     七、番外话

    性能测试还可能存在对接口进行持续施压的要求,可在线程组中进行设置。

  • 相关阅读:
    Java如何编写自动售票机程序
    install windows service
    redis SERVER INSTALL WINDOWS SERVICE
    上传文件
    This problem will occur when running in 64 bit mode with the 32 bit Oracle client components installed.
    解决Uploadify上传控件加载导致的GET 404 Not Found问题
    OracleServiceORCL服务不见了怎么办
    Access to the temp directory is denied. Identity 'NT AUTHORITYNETWORK SERVICE' under which XmlSerializer is running does not have sufficient permiss
    MSSQL Server 2008 数据库安装失败
    数据库数据导出成XML文件
  • 原文地址:https://www.cnblogs.com/dnjiang/p/11468878.html
Copyright © 2011-2022 走看看