将Windows 7与Soap 5.2.0免费软件一起使用。
我还在Smart Bear社区中询问了这个问题,并且只提供了推荐的帖子。这些帖子与这个问题无关。
我有一个REST项目,它有一个测试套件,其中一个测试用例包含两个测试步骤。第一步是一个groovy步骤,使用一个groovy脚本调用第二个测试步骤。第二个测试步骤是REST GET请求,它将字符串发送到我们的API服务器并以JSON格式接收响应。第二个测试步骤有一个脚本断言,它执行“log.info Test Is Run”,所以我可以看到第二个测试的运行时间。
当groovy脚本调用第二个测试步骤时,它会在groovy脚本中读取第二个测试步骤的JSON响应,如下所示:
mvn clean install -PnoGenerate
我也可以用它来获取JSON响应:
def response = context.expand('${PingTest#Response}').toString() // read results
当通过Soap UI运行时,项目按预期运行,但是当我使用测试运行器运行项目时,使用上面显示的任一方法,来自groovy脚本调用以获取JSON响应的响应为空。当从testrunner运行时,我知道正在调用第二个测试步骤,因为我在脚本日志中看到了log.info结果。
这是DOS日志的一部分,显示第二个测试步骤正在运行,并且第二个测试步骤运行似乎没有错误。
def response = testRunner.testCase.getTestStepByName(testStepForPing).getPropertyValue("response")
这是我在DOS命令行中使用的testrunner调用:
SoapUI 5.2.0 TestCase Runner
12:09:01,612 INFO [WsdlProject] Loaded project from [file:/C:/LichPublic/_Soap/_EdPeterWorks/DemoPing.xml]
12:09:01,617 INFO [SoapUITestCaseRunner] Running SoapUI tests in project [demo-procurement-api]
12:09:01,619 INFO [SoapUITestCaseRunner] Running Project [demo-procurement-api], runType = SEQUENTIAL
12:09:01,628 INFO [SoapUITestCaseRunner] Running SoapUI testcase [PingTestCase]
12:09:01,633 INFO [SoapUITestCaseRunner] running step [GroovyScriptForPingtest]
12:09:01,932 INFO [WsdlProject] Loaded project from [file:/C:/LichPublic/_Soap/_EdPeterWorks/DemoPing.xml]
12:09:02,110 DEBUG [HttpClientSupport$SoapUIHttpClient] Attempt 1 to execute request
12:09:02,111 DEBUG [SoapUIMultiThreadedHttpConnectionManager$SoapUIDefaultClientConnection] Sending request: GET /SomeLocation/ABC/ping?echoText=PingOne HTTP/1.1
12:09:02,977 DEBUG [SoapUIMultiThreadedHttpConnectionManager$SoapUIDefaultClientConnection] Receiving response: HTTP/1.1 200
12:09:02,982 DEBUG [HttpClientSupport$SoapUIHttpClient] Connection can be kept alive indefinitely
12:09:03,061 INFO [log] **Test Is Run**
当groovy脚本通过测试运行器运行时,我使用ProjectFactoryRegistry和WsdlProjectFactory获取项目。关于为什么我在使用testrunner时无法读取JSON响应的任何建议将不胜感激。
如果需要,我可以提供更多信息/代码。
感谢。
答案 0 :(得分:2)
请尝试以下脚本:
import groovy.json.JsonSlurper
//provide the correct rest test step name
def stepName='testStepForPing'
def step = context.testCase.getTestStepByName(stepName)
def response = new String(step.testRequest.messageExchange.response.responseContent)
log.info response
def json = new JsonSlurper().parseText(response)
答案 1 :(得分:0)
谢谢Rao!当我使用它时你的建议有效,如下所示。 DOS窗口显示响应文本:
//将stepName设置为要运行的测试步骤名称的变量。
def stepName =" PingTest"
//使用stepName来获取调用测试步骤的测试步骤(testCase是一个 测试用例名称的字符串变量。)
def step = context.testCase.getTestStepByName(stepName)
//调用测试步骤。
step.run(testRunner,context)
//显示结果。
def response = new String(step.testRequest.messageExchange.response.responseContent)
log.info响应//此响应在DOS窗口中正确显示
json slurper也有效。在您方便的时候,如果您有任何建议的链接或书籍描述您在这里使用的技术,请告诉我们。
感谢。