在SOAPUI中,我有一个JDBC Request步骤,具有下一个结果:
INSERT INTO "TRANSACTION"
(TRANSACTIONID ....
VALUES('00012' .....`
UPDATE INVENTORY
SET Count = Count - ItemQuantity
WHERE ROWID='ProductA'
自定义属性:“ ResponseAsXml”
我与下一个来源进行了一次所有权转移:
来源:JDBC请求
属性:ResponseAsXml
路径语言:XPath
文本框:结果/结果集/行[1] /客户ID [1]
我需要获取 Row [Random node] / CUSTOMER_ID [1] ,(这是为了避免在多次测试执行中使用同一位客户),但是我不知道这句话是怎么回事得到一个随机节点。
谢谢!
朱利安
答案 0 :(得分:1)
欢迎使用堆栈溢出。 (或者像某些人所说的那样)
我认为您无法使用xpath做到这一点。但这在Groovy脚本测试步骤中相当简单。
您可能希望同时查看XmlSlurper。很想知道,什么时候您想做些额外的事情。
在JDBC Teststep之后添加Groovy脚本Teststep。使用它来查找您的数据库搜索返回了多少客户。使用该数字可在0到客户数量减去1的区间内的任意位置生成随机整数。
然后使用该随机数从该特定客户那里获取客户ID。然后只需从脚本返回ID。现在可以在其他地方轻松使用此值。
亲自尝试。如果您无法正常使用它,请在此处提交代码,我会为您提供帮助。
编辑
我刚刚研究了它,您几乎可以仅使用xpath来完成它。但是您也将需要一些随机数生成器。并且将其嵌入到您的xpath中并不是一件很漂亮的事情。所以我的第二个建议是:
创建一个Groovy脚本测试步骤来计算行数。将其命名为“ RandomInteger”。如果您总是得到10行,则只需对其进行硬编码即可。根据该数字,返回一个介于0到行数减一之间的随机整数。
将此脚本放在JDBC请求测试步骤和属性传输测试步骤之间。
将xpath修改为
Results / ResultSet / Row [$ {RandomInteger#result] / CUSTOMER_ID [1]
答案 1 :(得分:0)
感谢您的回答,
我没有使用属性转移,而是用一个普通的脚本替换了它:
随机rnd =新的Random() def rowCount = context.expand('$ {COUNT#ResponseAsXml#Results / ResultSet / Row / COUNTDISTINCTAD.CUSTOMER_ID}').toInteger()
int randomNumber = rnd.nextInt(rowCount +1-0)
testRunner.testCase.testSteps [“属性”] .setPropertyValue(“ x”,randomNumber.toString())
def customer = context.expand('$ {CustomerQuery#ResponseAsXml#Results / ResultSet / Row [$ {Properties#x}] / CUSTOMER_ID}'
testRunner.testCase.testSteps [“属性”] .setPropertyValue(“ CustomerId”,客户)