使用Groovy脚本读取XML文件并使用文件内容更新下一步请求

3

需求: 从文件夹中读取xml文件,并将文件内容传递给Soap请求。

问题: 我正在尝试使用Groovy脚本读取保存在文件夹中的文件,但无法读取文件的内容。在尝试打印xml文件的内容时,我遇到了空指针异常。

def fileList = []
new File("C:\\Users\\Documents\\Groovy Scripts\\requests").eachFile
{ f ->
if (f.isFile()&& f.name.endsWith('.xml'))
{
 def filename = f.name[0..-5]
 fileList.add(filename)
 log.info filename

 }
}
if (fileList.size() <1)
{
testRunner.fail("No request files found")
}
context.put('fileList', fileList)

def f = new File("C:\\Users\\Documents\\Groovy Scripts\\requests\\${context.fileList}.last().text")
log.info f

根据评论更新,补充问题。

我的测试用例包含3个步骤。步骤1:从文件夹中读取XML文件。步骤2:使用XML文件内容作为SOAP请求输入。步骤3:将步骤2的响应保存在输出文件夹中作为XML。


你正在进行“数据驱动”测试吗?你能展示一下你的测试用例结构吗? - Rao
可能是如何在Groovy中将文件读入字符串?的重复问题。 - Rao
文件大小在文件夹中会有所不同...我知道根据我的要求和发布的代码,我有些错误...请纠正我。 - user3212324
您仍未回答第一条评论和第二条评论中的问题。所有文件是否均具有对同一SOAP操作的请求? - Rao
看起来你之前在这里有类似的问题链接。现在你需要从文件中设置整个请求,而不仅仅是订单ID吗?如果是这样,那么之前提供的答案中只需要进行第一次更改。可以吗?你能澄清一下吗? - Rao
显示剩余5条评论
1个回答

3

据了解,您需要进行数据驱动测试,其中请求保存在目录中。

之前,提供了一种方法这里来循环遍历数据并保存响应。

现在您可能需要的所有更改都在第一步中 - 读取目录,并循环遍历您的文件,并将文件内容设置为请求并运行soap请求步骤。

Step1的Groovy脚本:

import groovy.io.FileType

//change your input directory name below
def dir = new File('path/to/input/dir')
dir.eachFile (FileType.FILES) { file ->  

   //Get the step
   def step = context.testCase.getTestStepAt(1)
   //Set the file content as test step request
   step.testRequest.requestContent = file.text
   log.info "New request is set for step2 : ${request}"
   //Run the step2
   step.run(testRunner, context)
}
//By now all the orders got executed, now need to exit the step without additionally running step2
//So, jump to step2, index is 2
testRunner.gotoStep(2)

你可以继续按照上述链接中提供的步骤进行操作。

1
很高兴知道它有帮助。如果您愿意,您可以给对您有帮助的答案点赞以示感激。 - Rao
我正在尝试为我的自动化添加一些新功能。这里我正在尝试在Excel表格中添加字段。但是只有最后一个文件的响应被记录。你能否帮助我编写所有文件响应的响应。注意:每个文件的响应必须在新行中。 - user3212324
code import jxl.* import jxl.write.*def groovyUtils = new com.eviware.soapui.support.GroovyUtils( context ) def holder = groovyUtils.getXmlHolder("Step2#Response") def request=groovyUtils.getXmlHolder("Step2#Request")WritableWorkbook workbook = Workbook.createWorkbook(new File("C:\Users\Documents\ Groovy Scripts\response\output.xls")) WritableSheet sheet = workbook.createSheet("Worksheet 1", 0) code - user3212324
xPath1 = "//:description/text()" xPath2 = "//:commonOrderId/text()" xPath3 = "//*:m/text()" def row=1 Label orderid = new Label(0,row ,request.getNodeValue(xPath2)); sheet.addCell(orderid); Label mode = new Label(1,row ,request.getNodeValue(xPath3)); sheet.addCell(m); Label description = new Label(2,row , holder.getNodeValue(xPath1)); sheet.addCell(description); Label response = new Label(3, row, context.expand('${Step2#Response}')); sheet.addCell(response); row=row+1 workbook.write(); workbook.close(); - user3212324
我已经在步骤2中使用了上述代码。我相信每次创建一个新的Excel表格都会导致问题。请帮忙解决。 - user3212324
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接