如何用robotframework提取中文文件名并去掉后缀成?

摘要:问题背景 项目上有个模型文件一直在变动,但是自动化脚本里面导入该模型是把模型名称写死了的,因此更新了模型文件之后,自动化测试代码里面为了导入该文件也一直要修改,所以想通过模糊匹配文件名称来获取该文件名称并导入。 解决方案 使用List Fi
问题背景 项目上有个模型文件一直在变动,但是自动化脚本里面导入该模型是把模型名称写死了的,因此更新了模型文件之后,自动化测试代码里面为了导入该文件也一直要修改,所以想通过模糊匹配文件名称来获取该文件名称并导入。 解决方案 使用List Files In Directory关键字列出目录下面符合模糊匹配的文件名称,该关键字返回一个列表,获取列表中的第一个文件名称(项目中该文件名称前缀固定,后面携带的日期在变化) ${list}= List Files In Directory ${filepath}/mdaf/common/中文/应急中心/EMC_Package/ pattern=DC资源池级应急* Log ${list} ${dc_model}= Set Variable ${list[0]} Log ${dc_model} ${file_name} Remove String ${dc_model} .zip Set Suite Variable ${dc_file_name} ${file_name} 踩的坑 最开始直接AI提供的方案是使用 {dc_model}= Evaluate str('{dc_model}') {filename_without_ext}= Evaluate '{dc_model}'.replace('.zip', '') 结果却报错了UnicodeDecodeError: 'utf8' codec can't decode byte 0xe8 in position 0: unexpected end of data 类似的这种报错都是字符编码格式的。 出现这个问题的原因是使用了python的模块去处理字符串,默认转成了unicode字符串。 建议 建议优先使用robotframework自带的处理字符串的关键字 与字符串处理相关的关键字 基本字符串操作 Remove String ${result}= Remove String Hello World World # 结果: "Hello " ${result}= Remove String filename.zip .zip # 结果: "filename" Replace String ${result}= Replace String Hello World World Robot # 结果: "Hello Robot" Get Substring ${result}= Get Substring Hello World 0 5 # 结果: "Hello" Split String @{parts}= Split String one,two,three , # 结果: @{parts} = ['one', 'two', 'three'] Catenate ${result}= Catenate Hello World # 结果: "Hello World" ${result}= Catenate SEPARATOR=- Hello World # 结果: "Hello-World" 字符串检查 Should Contain Should Contain Hello World World # 验证字符串包含指定内容 Should Not Contain Should Not Contain Hello World Robot # 验证字符串不包含指定内容 Should Start With Should Start With Hello World Hello # 验证字符串以指定内容开头 Should End With Should End With Hello World World # 验证字符串以指定内容结尾 字符串转换 Convert To Lowercase ${result}= Convert To Lowercase Hello World # 结果: "hello world" Convert To Uppercase ${result}= Convert To Uppercase Hello World # 结果: "HELLO WORLD" Convert To String ${result}= Convert To String 123 # 结果: "123" 字符串清理 Strip String ${result}= Strip String ${SPACE}Hello World${SPACE} # 结果: "Hello World" (去除前后空格) Fetch From Left ${result}= Fetch From Left Hello World o # 结果: "Hell" Fetch From Right ${result}= Fetch From Right Hello World o # 结果: "rld" 字符串比较 Should Be Equal Should Be Equal Hello Hello # 验证两个字符串相等 Should Be Equal As Strings Should Be Equal As Strings 123 123 # 将参数转为字符串后比较 Should Match Should Match Hello World Hello* # 使用通配符模式匹配 Should Match Regexp Should Match Regexp example@email.com ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ # 使用正则表达式匹配 高级字符串处理 Get Length ${length}= Get Length Hello World # 结果: 11 Count Values In String ${count}= Count Values In String Hello World l # 结果: 3 (统计'l'出现的次数) Encode String To Bytes & Decode Bytes To String ${bytes}= Encode String To Bytes Hello World UTF-8 ${string}= Decode Bytes To String ${bytes} UTF-8 # 处理编码转换