Robot Framework(RIDE)中匹配未知完整名称XML文件并解析的方法
在Robot Framework中查找符合数字前缀格式的XML文件
我来帮你解决这个问题,在Robot Framework搭配RIDE开展测试时,要找到命名格式为「数字+NameOfTheFile」的XML文件(比如1NameOfTheFile.xml或25NameOfTheFile.xml),可以用正则结合内置/扩展库来实现,下面是两种实用方案:
方案一:用内置库结合正则过滤文件列表
这个方案不需要额外安装依赖,只用Robot Framework自带的OperatingSystem和BuiltIn库就能完成:
步骤说明
- 先获取目标目录下所有的XML文件
- 遍历文件列表,用正则表达式匹配文件名格式
- 收集符合条件的文件后,再进行解析操作
示例代码
*** Settings *** Library OperatingSystem Library BuiltIn Library Collections *** Test Cases *** Locate And Process Target XML # 替换成你的目标目录路径 ${target_dir}= Set Variable ./test_data # 获取目录下所有XML文件 ${all_xml_files}= List Files In Directory ${target_dir} *.xml # 初始化列表存储匹配的文件 ${matching_files}= Create List # 遍历文件,用正则筛选 :FOR ${file_name} IN @{all_xml_files} \ # 正则规则:以一个或多个数字开头,接着是NameOfTheFile,最后是.xml后缀 \ ${is_match}= Run Keyword And Return Status Should Match Regexp ${file_name} ^[0-9]+NameOfTheFile\.xml$ \ IF ${is_match} \ Append To List ${matching_files} ${target_dir}/${file_name} \ END # 处理匹配结果(假设只需要第一个匹配文件) IF ${matching_files} \ Log Found matching file: ${matching_files[0]} INFO \ Parse Target XML ${matching_files[0]} \ELSE \ Fail No XML file matching the pattern found in ${target_dir} \END *** Keywords *** Parse Target XML [Arguments] ${file_path} # 读取XML文件内容 ${xml_content}= Get File ${file_path} # 这里可以结合XML库(需安装)解析数据,比如提取节点值 # 示例:用XML库解析(先执行pip install robotframework-xml) # ${xml_doc}= Parse XML ${xml_content} # ${target_value}= Get Element Text ${xml_doc} //target_node # Log Extracted value: ${target_value} INFO
方案二:自定义Python关键字(更简洁高效)
如果需要更灵活的筛选逻辑,可以写个Python自定义关键字,用glob和re模块直接匹配,然后导入到Robot Framework中使用:
1. 编写Python关键字文件(比如FileFinder.py)
import os import glob import re from robot.api.deco import keyword @keyword(name="Find Matching XML Files") def find_matching_xml_files(directory): # 定义正则匹配规则:数字开头 + NameOfTheFile + .xml后缀 pattern = re.compile(r'^\d+NameOfTheFile\.xml$') # 获取目录下所有XML文件的完整路径 all_xml = glob.glob(os.path.join(directory, "*.xml")) # 筛选符合文件名规则的文件 matching_files = [file for file in all_xml if pattern.match(os.path.basename(file))] return matching_files
2. 在Robot Framework中使用自定义关键字
*** Settings *** Library OperatingSystem Library ./FileFinder.py # 替换成你的Python文件路径 *** Test Cases *** Use Custom Keyword To Find XML ${target_dir}= Set Variable ./test_data ${matching_files}= Find Matching XML Files ${target_dir} IF ${matching_files} \ Log Found ${len(matching_files)} matching files INFO \ # 遍历处理所有匹配文件 \ :FOR ${file} IN @{matching_files} \ \ Parse Target XML ${file} \ELSE \ Fail No matching XML file found! \END
额外注意事项
- 如果文件名大小写不敏感(比如存在
1nameofthefile.xml),可以给正则加上不区分大小写的修饰符:^(?i)[0-9]+NameOfTheFile\.xml$ - 如果目标目录有子文件夹,需要递归查找的话,方案一可以用
List Files In Directory的recursive=True参数,方案二可以把glob.glob换成glob.glob(f"{directory}/**/*.xml", recursive=True) - 解析XML时,推荐使用官方的
XML库,它提供了丰富的节点查找、属性提取等关键字,能大幅简化解析逻辑
内容的提问来源于stack exchange,提问作者Manon Ingrassia
相关产品推荐
相关产品推荐

