Разбор XML файла из модульного теста Python - PullRequest
0 голосов
/ 06 марта 2020

Я пытаюсь написать некоторые модульные тесты с определенными методами, которые анализируют различные элементы моего 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: Ошибка чтения файла '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' нет атрибут 'get root'

Я также пытался этот ответ , но я не знаком с Django, поэтому получал кучу ошибок.

1 Ответ

1 голос
/ 09 марта 2020

Во второй версии после редактирования вы вызываете 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...