python - 从单元测试 Python 解析 XML 文件
问题描述
我正在尝试使用解析我的 XML 的不同元素的某些方法编写一些单元测试。但是我在单元测试中解析“测试”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:读取文件“dir/testxsd.xsd”时出错:加载外部实体“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”对象没有属性“getroot”
我也试过这个答案,但我不熟悉 Django,所以遇到了一堆错误。
解决方案
在您编辑后的第二个版本中,您调用getroot
的是字符串而不是解析的 XML 树。不过,如果您使用绝对路径正确解析文件,这可以解决您的问题。
架构示例 (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
推荐阅读
- css - 使用 p-contextMenu 和 p-table 右键单击第二个表后如何隐藏第一个表的菜单选项?
- linux - 修改使用 CPIO 提取生成的文件的权限
- android - 如何让我的 retrofit2 模型解析这个?
- performance - 如何知道哪个模块最慢#pytorch
- python-3.x - sqlite3.ProgrammingError:提供的绑定数量不正确。当前语句使用 3,提供了 47 个
- math - 当某些gt在预测中没有对应时,如何计算ground-truth和预测地标之间的NME(归一化平均误差)?
- azure - Azure Web 作业总是失败
- data-structures - 有其他类型数据的绳索名称吗?
- python - ValueError:尺寸必须相等 keras
- javascript - Datepicker重复问题javascript