7.4 断言 1 JSON断言 如果返回的结果是JSON格式,可以使用JSON断言元件进行断言。通过右键在弹出菜单中选择“添加->断言->JSON断言”。如图26所示。
图26 JSON断言
判断方式如下。
8 总结 本章我们对查询商品、新旧2版的查看商品详情、添加购物车和查看购物车几个功能书写了测试脚本。通过学习添加购物车和查看购物车两个功能如何建立脚本,对于JMeter如何处理cookie有了进一步的认识。接下来我们学习了
共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,并且保证运行结果正确。