我有这个jmeter文件,它在多个端点上进行多次调用(这是回归测试)。对于每个端点,都有相同的JSR223预处理器脚本生成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());
}
我希望该脚本为每个线程使用不同的变量。但是现在它正在复制最后一个值。
答案 0 :(得分:0)
在CSV数据集配置中保留以下设置
Sharing Mode = All Threads
现在,如果要运行5个线程,请确保CSV中有5个条目。
在JSR223预处理器中使用vars.get() and vars.put
在采样器中传递该值
每个线程将从CSV中选择唯一值并进行处理。
答案 1 :(得分:0)
该脚本生成相同的JWT令牌值,因为您为其提供了相同的输入变量。
User Defined Variables文档中的几个相关引号:
“用户定义的变量”元素使您可以定义一组初始变量,就像在“测试计划”中一样。
请注意,测试计划中的所有UDV元素(无论它们在哪里)都将在开始时进行处理。
有关在测试运行期间定义变量的信息,请参见用户参数。 UDV按从上到下的顺序在计划中显示。
为简单起见,建议将UDV仅放置在线程组的开头(或可能在测试计划本身的下面)。
因此,我的期望是将您的多个“用户定义的变量”实例合并为一个,并且您的Groovy脚本使用的是底部“用户定义的变量”配置元素中定义的值。您可以使用Debug Sampler and View Results Tree listener combination仔细检查变量值。
要为每个用户提供不同的初始变量,请去User Parameters,因为用户定义变量设置了“全局”变量集,该变量集在不同线程甚至Thread Groups之间共享。