如何在运行时刷新XML资源文件

时间:2018-06-05 11:47:09

标签: java xml cucumber rest-assured domparser

我的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();

0 个答案:

没有答案