【发布时间】:2019-08-20 18:31:56
【问题描述】:
我有这个 jmeter 文件,它在多个端点上进行多次调用(这是一个回归测试)。对于每个端点,都有相同的 JSR223 PreProcessor 脚本来生成 JWT。 JWT 是使用在“用户定义的变量”中设置的变量(每个线程不同)创建的(每个线程也有一个),并使用 vars.get() 在脚本中导入。
在运行时,脚本不会更新每个线程(或每个循环)的变量。如果脚本运行两次,则运行 1 中最后一个线程的脚本将在运行 2 的第一个线程中使用。
我想它与缓存有关,但我不知道是什么。
我尝试检查而不是检查复选框:“缓存已编译的脚本(如果可用)”。
// get values from 'User defined variables'
String sharedSecret = vars.get("sharedSecret");
String uitgifteDatumTijdOffset = vars.get("uitgifteDatumTijdOffset");
String uitgifteDatumTijd = Instant.now().minusMillis(Long.parseLong(uitgifteDatumTijdOffset)).toString();
String kvkNummer = vars.get("kvkNummer");
String ean13Code = vars.get("ean13Code");
String cnCertificaat = "Test met uitgiftedatum: " + uitgifteDatumTijd + " en EAN13-code: " + ean13Code;
// construct your body data - JSON entity in case below
JsonObject jo = new JsonObject();
jo.addProperty("KvKNummer", kvkNummer);
jo.addProperty("EAN13-code", ean13Code);
jo.addProperty("UitgifteDatumTijd", uitgifteDatumTijd);
jo.addProperty("CN-Certificaat", cnCertificaat);
String jsonString = jo.toString();
// perform JWT-signing of body data
byte[] bytesEncoded = Base64.encodeBase64(sharedSecret.getBytes());
String secret = new String(bytesEncoded);
try {
String jwtToken = Jwts.builder()
.setHeaderParam("alg","HS512")
.setHeaderParam("typ","JWT")
.setPayload(jsonString)
.signWith(SignatureAlgorithm.HS512, secret) // base64EncodedSecretKey
.compact();
// put JWT-signed body data into variable
vars.put("jwtToken", "Bearer " + jwtToken);
} catch (Exception ex) {
prev.setSuccessful(false);
log.error(ex.getMessage());
System.err.println(ex.getMessage());
}
我希望这个脚本为每个线程使用不同的变量。但现在它正在复制最后一个值。
【问题讨论】:
标签: multithreading groovy jmeter jwt jsr223