从单元测试 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
我正在尝试使用某些方法编写一些单元测试来解析我的 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'
我也试过
在您编辑后的第二个版本中,您在字符串而不是已解析的 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