通过案例带你轻松玩转JMeter连载(36)

简介: 通过案例带你轻松玩转JMeter连载(36)

7.4 断言



1 JSON断言


如果返回的结果是JSON格式,可以使用JSON断言元件进行断言。通过右键在弹出菜单中选择“添加->断言->JSON断言”。如图26所示。

image.png

图26 JSON断言


  • Assert JSON Path exists:需要断言的JSON表达式。
  • Additionally assert value:是否需要根据值去断言。
  • Match as regular expression:是否需要根据正则表达式去断言。
  • Expect Value:期望匹配的断言内容。
  • Expect null:是否期望是 null。
  • Invert assertion(will fail if above condition met):结果取反。

判断方式如下。

  • 如果响应结果不是JSON格式的,断言失败。
  • 如果JSON Path找不到元素,断言失败。
  • 如果JSON Path找到元素,没有设置条件,断言成功。
  • 如果JSON Path找到元素,但不符合条件,断言失败。
  • 如果 JSON Path找到元素,且符合条件,断言成功。
  • 如果 JSON Path返回的是一个数组,会迭代判断是否有元素符合条件,有则断言成功,否则断言失败。


8 总结



本章我们对查询商品、新旧2版的查看商品详情、添加购物车和查看购物车几个功能书写了测试脚本。通过学习添加购物车和查看购物车两个功能如何建立脚本,对于JMeter如何处理cookie有了进一步的认识。接下来我们学习了


  • 逻辑控制器:仅一次控制器。
  • 函数助手:random函数和CSVRead函数。
  • 后置处理器:CSS/JQuery提取器、JOSN提取器和JSON JMSPath提取器。
  • 断言:JSON断言。

共6个元件进行了学习。并且在最后比较了JOSN提取器和JSON JMSPath提取器2个提取器。


JMeter的二次开发


对于一些复杂的逻辑,使用JMeter自带的元件来搭建接口测试脚本可能就力不从心了。比如一个安全性较高的软件系统,所有数据在传输过程前,根据数据的特征,采用自定义的各种不同的加密手段后再进行传输。由于JMeter自身是一个开源软件,所以可以只通过二次开发来解决这个问题。


为了大家的学习方便,我们假设JMeter中没有函数助手mdash;mdash;digest函数。我们使用二次开发的方式自己来开发一个与digest等同的功能。我们仍旧以电子商务登录为例给大家进行介绍。


1 利用BeanShell调用外部jar文件


1)在Eclipse中建立项目,在包com.jerry下面建立java文件myDigest.java。


package com.jerry;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class myDigest {
   public static String getSHA256StrJava(String str){
      MessageDigest messageDigest;
      String encodeStr = "";
      try {
       messageDigest = MessageDigest.getInstance("SHA-256");
       messageDigest.update(str.getBytes("UTF-8"));
       encodeStr = byte2Hex(messageDigest.digest());
       } catch (NoSuchAlgorithmException e) {
       e.printStackTrace();
       } catch (UnsupportedEncodingException e) {
       e.printStackTrace();
       }
       return encodeStr;
       }
    public static String byte2Hex(byte[] bytes){
       StringBuffer stringBuffer = new StringBuffer();
       String temp = null;
       for (int i=0;i<bytes.length;i++){
         temp = Integer.toHexString(bytes[i] & 0xFF);
         if (temp.length()==1){
         //1得到一位的进行补0操作
         stringBuffer.append("0");
         }
         stringBuffer.append(temp);
         }
         return stringBuffer.toString();
         }            
}


注意:这里的文件必须为static。


2)在Eclipse点击菜单“File->Export”。


3)选择java下面的JAR file。如图1所示。


image.png

图1 选择java下面的JAR file


4)点击【Next>】按键。


5)在下面的窗口中,选择刚才建立的java文件所在的项目,如图2所示。


image.png

图2 选择java文件所在的项目


6)点击【Finish】按键。


7)将建好的jar文件存入到:%JMETER_HOME%/ lib\ext目录下。


8)右击登录HTTP请求,在弹出菜单中选择“添加->前置处理器->BeanShell 预处理程序”。


9)修改名字:获取加密后的password,然后把下面代码写入Script中。


import com.jerry.myDigest;
String password = vars.get(&quot;pram_g1&quot;);
String username = vars.get(&quot;pram_g2&quot;);
String newpassword = myDigest.getSHA256StrJava(password);
vars.put(&quot;password_shell&quot;,newpassword);
vars.put(&quot;username_shell&quot;,username)


如图3所示。

image.png

图3 获取加密后的password


10)在商品列表HTTP请求中username的值改为username_shell;password的值改为password_shell。


11)运行测试脚本,观察参数username_shell和password_shell,并且保证运行结果正确。


关于BeanShell预处理程序,将在第4.1-1节中进行介绍。本节的Java代码在本书的配套代码java\util目录下。

目录
相关文章
|
Java 测试技术 API
通过案例带你轻松玩转JMeter连载(49)
通过案例带你轻松玩转JMeter连载(49)
233 1
通过案例带你轻松玩转JMeter连载(49)
|
存储 Linux
通过案例带你轻松玩转JMeter连载(60)
通过案例带你轻松玩转JMeter连载(60)
166 0
通过案例带你轻松玩转JMeter连载(60)
|
算法
通过案例带你轻松玩转JMeter连载(59)
通过案例带你轻松玩转JMeter连载(59)
216 0
通过案例带你轻松玩转JMeter连载(59)
|
XML JavaScript Java
通过案例带你轻松玩转JMeter连载(58)
通过案例带你轻松玩转JMeter连载(58)
115 0
通过案例带你轻松玩转JMeter连载(58)
通过案例带你轻松玩转JMeter连载(57)
通过案例带你轻松玩转JMeter连载(57)
117 0
通过案例带你轻松玩转JMeter连载(57)
|
存储 索引
通过案例带你轻松玩转JMeter连载(56)
通过案例带你轻松玩转JMeter连载(56)
104 0
通过案例带你轻松玩转JMeter连载(56)
|
存储 Prometheus 监控
通过案例带你轻松玩转JMeter连载(55)
通过案例带你轻松玩转JMeter连载(55)
134 0
通过案例带你轻松玩转JMeter连载(55)
|
存储 监控 数据可视化
通过案例带你轻松玩转JMeter连载(54)
通过案例带你轻松玩转JMeter连载(54)
150 0
通过案例带你轻松玩转JMeter连载(54)
|
存储 Prometheus 监控
通过案例带你轻松玩转JMeter连载(53)
通过案例带你轻松玩转JMeter连载(53)
131 0
通过案例带你轻松玩转JMeter连载(53)
|
JSON 监控 数据可视化
通过案例带你轻松玩转JMeter连载(52)
通过案例带你轻松玩转JMeter连载(52)
188 0
通过案例带你轻松玩转JMeter连载(52)