从单元测试 Python 中解析 XML 文件

Parse XML file from unit test Python

我正在尝试使用某些方法编写一些单元测试来解析我的 XML 的不同元素。但是我在单元测试中解析 "test" xml 文件时遇到了一些问题。

我的问题与 XML/XSD 文件无关,而是关于如何在我的单元测试中正确解析它们。

到目前为止,这是我的代码:

import unittest
from lxml import etree
from Directory.method_in_class import ClassName #changed the names for security

class TestXmlData(unittest.TestCase):
    def setUp(self):
        self.method_in_class = ClassName()
        XSDDoc = etree.parse("dir/testxsd.xsd")
        rootXSD = XSDDoc.getroot()

    def test_whatever(self):
        # Test whatever

if __name__ == '__main__':
    unittest.main()

即使我在实现方法中以相同的方式解析,我还是收到以下错误:

OSError: Error reading file 'dir/testxsd.xsd': failed to load external entity "dir/testxsd.xsd"

我尝试了其他几个替代方法,例如从 加载文件,但这样做会给我一个错误:

import unittest
from lxml import etree
import os

THIS_DIR = os.path.dirname(os.path.abspath(__file__))

class TestSpecData(unittest.TestCase):
    def setUp(self):
        my_data_path = os.path.join(THIS_DIR, os.pardir, 'dir/testxsd.xsd')
        rootXSD = my_data_path.getroot()

    def test_whatever(self):
        data = sum(1, 2)
        self.assertEqual(data, 3)

if __name__ == '__main__':
    unittest.main()

AttributeError: 'str' object has no attribute 'getroot'

我也试过 ,但我不熟悉 Django,所以遇到了一堆错误。

在您编辑后的第二个版本中,您在字符串而不是已解析的 XML 树上调用 getroot。不过,如果您使用绝对路径正确解析文件,这可能会解决您的问题。

架构示例 (test.xsd)

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="unqualified">

    <xs:element name="config" type="xs:string" />

</xs:schema>

Python代码(test.py)

import unittest
from lxml import etree
import os

THIS_DIR = os.path.dirname(os.path.abspath(__file__))

class TestSpecData(unittest.TestCase):
    def setUp(self):
        my_data_path = os.path.join(THIS_DIR, 'data/test.xsd')

        tree = etree.parse(my_data_path)
        root = tree.getroot()

    def test_whatever(self):
        data = sum([1, 2])
        self.assertEqual(data, 3)

if __name__ == '__main__':
    unittest.main()

输出

假设文件夹 test 包含 test.py,并且 test.xsd 位于名为 data 的子文件夹中,并且在修复测试中的错误后(添加列表括号)输出是

$ python test.py
.
----------------------------------------------------------------------
Ran 1 test in 0.001s

OK