0

所以目前我有一个代码可以将信息从 XML 文件传递​​到报告门户,这个 xml 文件位于它自己的文件夹中,它适用于许多文件夹。目前,解析器只传递存储在内存中的最后一个 xml 数据,即使它识别所有其他文件

这是我现在的代码:

launch = service.start_launch(name=launch_name,
                              attributes=rp_attributes,
                              start_time=timestamp(),
                              description=launch_doc)

r_path='\\\\esw-fs01\\esw_niagara_no_bck\\BuildResults\\master\\0.1.52.68_390534\\installation_area\\autotestlogs_top'

root = os.listdir(r_path)

for entry in root:
    subdir_path = os.path.join(r_path, entry) #  create the absolute path of the subdir
    if os.path.isdir(subdir_path):  # check if it is a folder
        subdir_entries = os.listdir(subdir_path)  # get the content of the subdir
        for subentry in subdir_entries:
            if subentry.endswith('.xml'):
                subentry_path = os.path.join(subdir_path, subentry)

                tree = ET.parse(subentry_path)
                root=tree.getroot()


for subentry_path in root.iter('entry'):
    if subentry_path.get('type') == "TM":
        if suite_item_id != None:
            service.finish_test_item(item_id=suite_item_id, end_time=timestamp(), status=tm_verdict)
        suite=subentry_path.find('name').text
        description=subentry_path.find('messages').text
        verdict=subentry_path.find('verdict').text
        if verdict=="True":
            tm_verdict="PASSED"
        elif verdict=="False":
            tm_verdict="FAILED"
        suite_item_id = service.start_test_item(name=suite,
                                  description=description,
                                  attributes=rp_attributes,                                  
                                  start_time=timestamp(),
                                  item_type="SUITE")
    if subentry_path.get('type') == "TR":
        name    = subentry_path.find('name').text 
        verdict = subentry_path.find('verdict').text
        link    = subentry_path.find('link').text
        duration = 10
        description = subentry_path.find('messages').text
        if verdict=="True":
            verdict="PASSED"
        elif verdict=="False":
            verdict="FAILED"
        start_time=timestamp()
        item_id = service.start_test_item(name=name,
                                        description=description,
                                        start_time=start_time,
                                        parent_item_id=suite_item_id,
                                        item_type="STEP",
                                        parameters={"key1": "val1",
                                                    "key2": "val2"})

目标是让它读取所有文件,任何帮助都将不胜感激

4

1 回答 1

1

您可以首先构建路径列表,然后在第二个循环中解析文件。

# don't use 'root' here
src = os.listdir(r_path)
files = list()

for entry in src:
    subdir_path = os.path.join(r_path, entry)
    if os.path.isdir(subdir_path):
        subdir_entries = os.listdir(subdir_path)
        for subentry in subdir_entries:
            if subentry.endswith('.xml'):
                subentry_path = os.path.join(subdir_path, subentry)
                files.append(subentry_path)


for f in files:
    tree = ET.parse(f)
    root = tree.getroot()

    for subentry_path in root.iter('entry'):
        ...

作为旁注,建议使用更规范的方法来获取所有文件,例如glob

import glob

filelist = glob.glob(os.path.join(rpath, "**/*.xml"), recursive=True)

filelist现在是源目录中所有 xml 文件的路径列表。这将为您节省几行和缩进。

于 2021-06-15T09:07:50.437 回答