我试图在JSR223预处理器中使用groovy脚本创建哈希,然后将其传递给父HTTP请求的主体数据,但是我不确定我在哪里做错了。当我在线程组中有一个HTTP请求时,它不起作用,但是如果有两个HTTP请求,则它对第二个请求起作用。 注意:在第一个请求之后将设置变量HASH。尽管我已经尝试将预处理器作为第一个HTTP请求的子级,或者将其放在HTTP请求之前的线程组中,但是没有任何效果。
脚本数据:
import java.security.MessageDigest
def requestBody = sampler.getArguments().getArgument(0).getValue()
def data = new XmlParser().parseText(requestBody)
String method=data.method.text()
String token=data.token.text()
String time=data.time.text()
String xyz ='method'+method+'token'+token+'time'+time+'3VDEY-6ZHLH-D27C0-T2ALI'
String hash = MessageDigest.getInstance("MD5").digest(xyz.bytes).encodeHex().toString()
vars.put("HASH", hash)
HTTP请求正文数据:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<method>ping</method>
<token>-</token>
<time>1575542978</time>
<signature>${HASH}</signature>
<params/>
</root>
测试计划图片
https://drive.google.com/file/d/1vGbwyDo8eWUDL7EDZlK8bdbApxtFpWGT/view?usp=sharing https://drive.google.com/file/d/1Us6tSuRw6MJ__YrnX0tTCKL8S9QSgp-v/view?usp=sharing https://drive.google.com/file/d/10hobprJcga6_y23VWd5U3X1aaSEXzGkb/view?usp=sharing
答案 0 :(得分:0)
这听起来像是JMeter中的错误,我建议通过JMeter Bugzilla提出问题
同时,您可以通过直接在请求正文中替换JMeter Variable并将新生成的哈希替换为“旧”请求正文来进行操作。
建议的代码修订:
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
<button type="button" @click="btnOnClick">Add</button>
<table class="table table-striped table-hover table-bordered mainTable" id="Table">
<thead>
<tr>
<th class="itemName">Item Name</th>
<th>Quantity</th>
<th>Selling Price</th>
<th>Amount</th>
</tr>
</thead>
<tbody>
<form-row v-for="(row, key) in tableDatas" :key="key" v-bind.sync="row"></form-row>
</tbody>
</table>
<div>
<label>Total Row's Amount</label>
<input type="text" disabled :value="calculate">
</div>
</div>
<script type="text/x-template" id="row-template">
<tr>
<td>
<input class="form-control" readonly :value="itemname" />
</td>
<td>
<input class="form-control text-right" type="number" min="0" step="1" v-model="quantitySynced" />
</td>
<td>
<input class="form-control text-right" type="number" min="0" step=".5" v-model="sellingpriceSynced" />
</td>
<td>
<input readonly class="form-control text-right" type="number" min="0" step="1" :value="amountSynced" />
</td>
</tr>
</script>
有关JMeter中Groovy脚本的更多信息:Apache Groovy - Why and How You Should Use It
答案 1 :(得分:0)
提供屏幕快照或测试计划树的文本表示可能会有帮助,因为我怀疑您的范围存在问题。
作为解决方法,您可以将JSR223预处理器替换为JSR223采样器,然后以正确的顺序将其放入测试计划中。为避免该采样器出现在结果中,您可以将JSR223 PostProcessor附加到prev.setIgnore()