当前位置: 首页 > 知识库问答 >
问题:

从单元测试Python解析XML文件

李永寿
2023-03-14

我正在尝试用解析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()

即使我在实现方法中以同样的方式进行解析,我也会得到以下错误:

错误:读取文件“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不熟悉,所以有很多错误。

共有1个答案

红朝
2023-03-14

在编辑后的第二个版本中,您将对字符串而不是解析的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.py的文件夹test.xsd位于名为data的子文件夹中,并且在修复测试中的错误(添加列表括号)之后,输出为

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

OK
 类似资料:
  • 我正在学习Spring,正在进行单元测试,bean在XML配置文件中指定。我想知道我是如何告诉它在文件系统中使用文件的。 将运行以下代码*: 豆子。xml文件与测试类位于同一个包中。 但是在使用的时候 它给了我这个错误信息: 组织。springframework。豆。工厂BeanDefinitionStoreException:IOException解析来自类路径资源[Users/pabernat

  • 我想解析以下网站的地址:https://filialen.migros.ch/de/center:46.8202、6.9575/zoom:8/ null 有什么建议吗? 我的问题类似于前面的问题:如何在Python中解析具有相同类名的网站的多个属性?对于Selenium-debugging:在点(X,Y)不能单击元素

  • 本文向大家介绍Python单元测试实例详解,包括了Python单元测试实例详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python单元测试。分享给大家供大家参考,具体如下: 在Python中进行单元测试需要用到自动单元测试框架PyUnit,Python2.1及其以后的版本都将PyUnit作为一个标准模块(即python的unittest模块),如果你很out,那么你需要从PyUni

  • 本文向大家介绍详解python单元测试框架unittest,包括了详解python单元测试框架unittest的使用技巧和注意事项,需要的朋友参考一下 一:unittest是python自带的一个单元测试框架,类似于java的junit,基本结构是类似的。 基本用法如下: 1.用import unittest导入unittest模块 2.定义一个继承自unittest.TestCase的测试用例类

  • 本文向大家介绍python单元测试unittest实例详解,包括了python单元测试unittest实例详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了python单元测试unittest用法。分享给大家供大家参考。具体分析如下: 单元测试作为任何语言的开发者都应该是必要的,因为时隔数月后再回来调试自己的复杂程序时,其实也是很崩溃的事情。虽然会很快熟悉内容,但是修改和调试将是一件痛苦

  • 本文向大家介绍Python单元测试及unittest框架用法实例解析,包括了Python单元测试及unittest框架用法实例解析的使用技巧和注意事项,需要的朋友参考一下 例题取用登录模块:代码如下 单元测试是什么: 单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证 如何进行单元测试: 第一我们得写出测试用例,而测试用例主要的要素为(编号,标题,前置条件,操作步骤,