我的java项目中有一个存储在src / main / resources中的有效XML文件,该文件用于对某些功能进行测试。
我正在使用Cucumber和REST Assured来测试我在收到的URL中包含无效属性值时收到的HTTP响应。
在每个测试场景中,我正在测试无效的属性值(例如字符串而不是int)。
目前,我正在将XML转换为DOM文档,分配无效值(字符串),然后覆盖 src / main / resources 中的原始文件。
然后将XML发布到URL。在发布XML之后,我将原始(有效)值重新分配给XML文件,并再次覆盖资源文件。
我面临的问题是,当第二个场景运行时,我认为它使用的是不正确的XML版本。
除非我进入XML文件并接受更新,否则测试将失败。有没有办法在运行时更新此XML文件?
//1. Retrieve the XML request file
String filePath = "C:\\filepath\\src\\main\\resources\\VALID_REQUEST.xml";
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.parse(filePath);
Node attributeToUpdate = doc.getElementsByTagName(fieldNameToUpdate).item(0);
//2. Extract/Retrieve the sourceID from the XML File, store this (will be re-installed at later stage)
String originalAttributeValue = attributeToUpdate.getTextContent();
System.out.println("Source ID before updating file: " + originalAttributeValue);
//3. Update the sourceID to be equal to the invalid Value which we are testing in this scenario
attributeToUpdate.setTextContent(invalidValueToUpdate);
String newValue = attributeToUpdate.getTextContent();
System.out.println("Source ID after updating file: " + newValue);
//4. Write the above update to the XML file (in resources)
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new File(filePath));
transformer.transform(source, result);
BufferedReader br = new BufferedReader(new FileReader(new File(filePath)));
String line;
StringBuilder sb = new StringBuilder();
while((line=br.readLine())!= null){
sb.append(line.trim());
}
theXMLBody = sb.toString();