JMeter入门9---Tcp sampler AES加密
Max.Bai
2018-06
压测tcp请求的时候需要对数据进行处理才发送,比如AES数据加密。实现方法可以有两种,一种自己写java请求,不使用默认tcp sampler, 第二种用默认的Tcp sampler,beanshell实现AES加密。
记录下beanshell实现过程。
1. 添加TCP Sampler
EOL 设置为10 表示回车符号
2. 在TCP sampler添加 Add->Pre Process -> BeanShell PreProcess
3. 在BeanShell PreProcess 脚本里面添加如下代码。
AES 加密
import org.apache.jmeter.protocol.tcp.sampler.*; // tcp sample lib
import org.apache.jmeter.samplers.*; // jmeter samplers lib
import org.apache.jmeter.config.*;
import com.alibaba.fastjson.JSON; //fastjson jar save in /lib/ext folder or load in testplan
import com.alibaba.fastjson.JSONObject;
source("./telutils/AESCryptUtils.java"); //path start with bin as default
String IV_PARAMETER = "941c2d70a830c950";
String key = "941c2d70a830c950";
String body = sampler.getRequestData(); // get tcp sample request data
log.info("PreProcessor===========================================" + body);
timestamp = System.currentTimeMillis(); // timestamp
String seq_num ="201806071746210003";
String s = String.format("abc %s %s", new Object[]{timestamp, seq_num}); //format string
log.info("formate test --->" + s);
log.info("dev id------->" + vars.get("dev_num")); // get vars, set vars.put("abc", "123");
//parse json string to object
JSONObject parseObject = JSON.parseObject(body);
// get data
// data to string
String data = parseObject.getString("data");
// string aes encode
String aesbody = AESCryptUtils.encode(data, key, IV_PARAMETER);
// String aesbody = "MTIzNDU2Nzg5MDA5ODc2NTQzMjExMjM0NTY3ODkwMDk";
// set data
parseObject.put("data", aesbody);
parseObject.put("deviceID", "DEVDD" + vars.get("dev_num"));
// add header to request
String postData = "CST(" + parseObject.toJSONString() + ")\r\n"; // object to json string
log.info("PreProcessor===========================================" + postData);
//postData = "{\"code\":1002,\"deviceId\":\"0000111122223333aaaabbbb\&#