Jmeter3.1接口测试使用技巧

本文主要总结windows下使用apache-jmeter-3.1测试接口时使用的技巧。因将各点写在不同的文章,不易查找,遂整理在一个篇章里,篇幅略长。

当然,最好在官网学习相关的功能
http://jmeter.apache.org/usermanual/component_reference.html#introduction

一、Config Element(配置元件)

1.http信息头管理器

JMeter不是浏览器,因此其行为并不和浏览器完全一致。这些JMeter提供的配置元件中的HTTP属性管理器用于尽可能模拟浏览器行为,在HTTP协议层上发送给被测应用的http请求

  • HTTP Request Defaults(请求默认值)
      用于设置其作用范围内的所有HTTP的默认值,可被设置的内容包括HTTP请求的host、端口、协议等
    Jmeter3.1接口测试使用技巧_第1张图片
  • HTTP Authorization Manager(授权管理器)
      用于设置自动对一些需要NTLM验证的页面进行认证和登录
  • HTTP Cache Manager
      用于模拟浏览器的Cache行为。为Test Plan增加该属性管理器后,Test Plan运行过程中会使用Last-Modified、ETag和Expired等决定是否从Cache中获取相应的元素
    Jmeter3.1接口测试使用技巧_第2张图片
  • HTTP Cookie Manager(cookie管理器)
      用于管理Test Plan运行时的所有Cookie。HTTP Cookie Manager可以自动储存服务器发送给客户端的所有Cookie,并在发送请求时附加上合适的Cookie
      同时,用户也可以在HTTP Cookie Manager中手工添加一些Cookie,这些被手工添加的Cookie会在发送请求时被自动附加到请求
    Jmeter3.1接口测试使用技巧_第3张图片
  • HTTP Header Manager(信息头管理器)
      用于定制Sampler发出的HTTP请求的请求头的内容。不同的浏览器发出的HTTP请求具有不同的Agent
      访问某些有防盗链的页面时需要正确的Refer…这些情况下都需要通过HTTP Header Manager来保证发送的HTTP请求是正确的
    Jmeter3.1接口测试使用技巧_第4张图片

2.Counter(计数器)

Jmeter3.1接口测试使用技巧_第5张图片
  从18000329开始,每次递增+1,一直到18005429为止,格式是00000000,引用该值为${sno}

  • 不勾"Track…"
    与线程无关,用户#1 获取值为1,用户#2获取值为2;
  • 勾选"Track…",不勾"Reset…"
    每个线程从18000329开始取值,且递增;
  • 勾选"Track…",勾选"Reset…"
    每个线程每迭代都取18000329(即每次线程组迭代,都会重置计数器的值)。

3.CSV Data Set Config

Jmeter3.1接口测试使用技巧_第6张图片
Jmeter3.1接口测试使用技巧_第7张图片

  • Allow quoted data?
    当参数值包含双引号如"1,true取值"1,false取值1
  • Recycle on EOF?(到了文件尾是否循环)
    True:继续从文件第一行开始读取
    False:不再循环
  • Stop thread on EOF?(到了文件尾是否停止线程)
    True:停止
    False:不停止
    注:当Recycle on EOF设置为True时,此项设置无效
  • sharing mode
  • All threads
      计划中所有线程,假如说有线程1到线程n (n>1),线程1取了一次值后,线程2取值时,取到的是csv文件中的下一行,即与线程1取的不是同一行。
  • Current thread group
      当前线程组,假设有线程组A、线程组B,A组内有线程A1到线程An,线程组B内有线程B1到线程Bn。取之情况是:线程A1取到了第1行,线程A2取第2行,现在B1取第1行,线程B2取第2行。
  • Current thread
      当前线程。假设测试计划内有线程1到线程n (n>1),则线程1取了第1行,线程2也取第1行。

4.JDBC Connection Configuration

Jmeter3.1接口测试使用技巧_第8张图片

  • Variable name(变量名称)
      与JDBC Request的Variable name保持一致
  • Max Number of Connections(该数据库连接池的最大连接数)
      一般可设置为0,意思是每个线程都使用单独的数据库连接,线程之间数据库连接不共享
  • Time Between Eviction Runs (ms)
      在空闲对象驱逐线程运行期间,可以休眠的毫秒数。当非正值时,将运行无空闲对象驱逐器线程。(默认为“60000”,1分钟)(如果当前连接池中某个连接在空闲了time Between Eviction Runs Millis时间后任然没有使用,则被物理性的关闭掉。
  • Transaction Isolation
      事务间隔级别设置
  • Test While Idle
      当空闲的时候测试连接是否断开
  • Soft Min Evictable Idle Time(ms)
      最少的时间连接可能在池中闲置,然后才有资格被闲置的对象驱逐出去,额外的条件是至少在池中保持连接。默认值为5000(5秒)
  • Validation Query(验证查询)
      检验连接是否有效(数据库重启后之前的连接都失效,需要验证查询)
      Jmeter3.1接口测试使用技巧_第9张图片
    配合Sample里的JDBC Request使用
    Jmeter3.1接口测试使用技巧_第10张图片
  • Query Type
  • Select 选择Select Statement;
  • Insert, Update, Delete 选择 Update Statement.
  • 如果使用预编译(语句中带问号)必须选择 Prepared Select(Update) Statement
  • Parameter values(参数值)
      选择Prepared或Callable 时必填,多个值时使用逗号分隔,数量必须与sql语句中的参数个数相同。
  • Parameter types(参数类型)
      多个值时使用逗号分隔。数量必须与参数值相同。常见的比如varchar, int。
  • Variable Names(查询结果变量名称)
      每个字段都可以设置一个变量,逗号分隔。
  • Result variable name(结果变量名称)
      将所有的查询结果保存到一个变量中。这是一个List>类型的变量。查询结果每行存为一个Map, 字段名为 key, 字段内容为value.比如要bean shell 中可以这样调用:
      columnValue = vars.getObject(“resultObject”).get(0).get(“Column Name”);
  • Handle ResultSet
      Store As String(默认)、Store As Object、Count Record

JDBC Request实例
Jmeter3.1接口测试使用技巧_第11张图片
Jmeter3.1接口测试使用技巧_第12张图片
引用值
  ${sno_1} : 19000124
  ${sno_2} : 19000205
  ${name_1}: 雷小赟
  ${name_2}: 我
注:单条sql末尾无需分号

添加需要的驱动jar包

  • 方式1:直接将jar包复制到jmeter的lib目录
    mysql数据库:无需引入其他数据库驱动jar包。
    sql server数据库:下载sqljdbc4.jar 放到 jmeter根目录的lib目录下
    oracle数据库:将oracle数据的安装目录下面的\product\10.2.0\db_1\jdbc\lib\ojdbc14.jar
    放到jmeter根目录下的lib目录下
  • 方式2:通过Test Plan Jmeter3.1接口测试使用技巧_第13张图片
    注:位置不能粘贴,只能通过"浏览"来操作

执行多条sql语句
1.要在【JDBC Connection Configuration】的DataBase URL后面加参数:
 jdbc:mysql://192.168.0.183:3306/mysql?allowMultiQueries=true
2.【JDBC Request】Query Type一定要选择 Callable statement
Jmeter3.1接口测试使用技巧_第14张图片

二、Logic Controller(逻辑控制器)

1.Once Only Controller(仅一次控制器)

该控制器下的子结点对每个线程只执行一次,相当于LR中Vuser的init,登录常常放于此控制器下。如
Jmeter3.1接口测试使用技巧_第15张图片

2.If Controller(If 控制器)

Jmeter3.1接口测试使用技巧_第16张图片

  • 勾选"Interpret…"

  • 在Condition输入框中,需将判断条件解释为变量表达式,并使用__jexl3函数或__groovy函数对该变量表达式求值为true/false,如
    Jmeter3.1接口测试使用技巧_第17张图片

  • 可输入值为true/false的表达式
    如设置了变量test为true
    Jmeter3.1接口测试使用技巧_第18张图片

  • 可填true和false

  • 勾选"Evaluate…"
    在每个子结点执行前都会计算表达式

三、Post Processors(后置处理器)

1.Regular Expression Extractor(正则表达式)

Jmeter3.1接口测试使用技巧_第19张图片

  • APPly to
  • Main sample and sub-samples
      作用于父节点的取样器及对应子节点的取样器
  • Main sample only
      仅作用于父节点的取样器
  • Sub-samples only
      仅作用于子节点的取样器
  • JMeter Variable
      作用于jmeter变量(输入框内可输入jmeter的变量名称),从指定变量值中提取需要的值。
  • Field to check
  • Body(响应报文的主体)
  • Body(unescaped)
      主体,响应的主体内容且替换了所有的html转义符,注意html转义符处理时不考虑上下文,因此可能有不正确的转换,不太建议使用
  • Body as a Document
      从不同类型的文件中提取文本,注意这个选项比较影响性能
  • Response Headers(响应信息头)
  • Request Headers(请求信息头)
  • URL(统一资源定位符)  
      Internet上用来描述信息资源的字符串
  • Response Code(响应状态码)
      比如200、404等
  • Response Message(响应信息)
  • Reference Name
      引用值为${orderNo}
  • Regular Expression
      ():括起来的部分就是要提取的。
      .:匹配任何字符串。
      +:一次或多次。
      ?:在找到第一个匹配项后停止
  • Template
      用$$引用,如果在正则表达式中有多个取值,则可以是$2$ $3$等等,表示解析到的第几个值给orderNo。如:
      $1$表示解析到的第1个值
  • Match No.(0 for Random)
      0代表随机取值,正数n则表示取第n个值(比如1代表取第一个值),负数则表示提取所有符合条件的值,通常情况下填0
  • Default Value
      如果参数没有取得到值,那默认给一个值让它取。

提取多个字符串
Jmeter3.1接口测试使用技巧_第20张图片
引用的值将会被设定:
${msg}:   true成功
${msg_g0}:  success":true,“result”:0,“msg”:“成功”
${msg_g1}:  true
${msg_g2}:  成功

四、Assertions

1.Response Assertion

Jmeter3.1接口测试使用技巧_第21张图片
注:判断response包含000000或400016都为真

  • Pattern Matching Rules
  • Contains
    如果文本包含正则表达式模式则为true
  • Matches
    如果整个文本匹配正则表达式模式则为true
  • Equals
    如果整个文本等同于模式字符串(大小写敏感)则为true
  • Substring
    如果文本包含模式字符串(大小写敏感)则为true
  • Not
    用于反转检查结果

五、Random随机函数

Options>>Function Helper Dialog,填入值,点击Generate
Jmeter3.1接口测试使用技巧_第22张图片

你可能感兴趣的:(理论知识)