7.4 断言
1 JSON断言
如果返回的结果是JSON格式,可以使用JSON断言元件进行断言。通过右键在弹出菜单中选择“添加->断言->JSON断言”。如图26所示。
图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所示。
图1 选择java下面的JAR file
4)点击【Next>】按键。
5)在下面的窗口中,选择刚才建立的java文件所在的项目,如图2所示。
图2 选择java文件所在的项目
6)点击【Finish】按键。
7)将建好的jar文件存入到:%JMETER_HOME%/ lib\ext目录下。
8)右击登录HTTP请求,在弹出菜单中选择“添加->前置处理器->BeanShell 预处理程序”。
9)修改名字:获取加密后的password,然后把下面代码写入Script中。
import com.jerry.myDigest; String password = vars.get("pram_g1"); String username = vars.get("pram_g2"); String newpassword = myDigest.getSHA256StrJava(password); vars.put("password_shell",newpassword); vars.put("username_shell",username)
如图3所示。
图3 获取加密后的password
10)在商品列表HTTP请求中username的值改为username_shell;password的值改为password_shell。
11)运行测试脚本,观察参数username_shell和password_shell,并且保证运行结果正确。
关于BeanShell预处理程序,将在第4.1-1节中进行介绍。本节的Java代码在本书的配套代码java\util目录下。