robotframework获取中文文件名并且去掉后缀

问题背景

项目上有个模型文件一直在变动,但是自动化脚本里面导入该模型是把模型名称写死了的,因此更新了模型文件之后,自动化测试代码里面为了导入该文件也一直要修改,所以想通过模糊匹配文件名称来获取该文件名称并导入。

解决方案

使用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自带的处理字符串的关键字

与字符串处理相关的关键字

  1. 基本字符串操作
    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"
  1. 字符串检查
    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
# 验证字符串以指定内容结尾
  1. 字符串转换
    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"
  1. 字符串清理

    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"
  1. 字符串比较
    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,}$
# 使用正则表达式匹配
  1. 高级字符串处理
    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
# 处理编码转换
相关推荐
蒸鱼Yuzheng6 天前
性能 CI 成本优化:设备分钟、风险分层与自适应测试选择
自动化测试·ci/cd·性能测试·测试平台·成本优化
自动化测试行业观察7 天前
AI智能测试用例生成技术解析:多源融合+LLM混合生成方案与实践
自动化测试·人工智能·科技·测试用例·智能化测试·ai测试平台·ai智能遍历
LabVIEW开发8 天前
风洞 50 米/秒,LabVIEW 采哪几路信号
自动化测试·数据采集·labview
LabVIEW开发11 天前
核聚变要的功率半导体,LabVIEW 怎么测
自动化测试·数据采集·labview·功率半导体
蒸鱼Yuzheng12 天前
自动化长任务治理:租约、心跳、孤儿进程与安全回收
自动化测试·python·任务调度·可靠性·分布式系统
LabVIEW开发14 天前
光子芯片测试仪国产突破:这正是 LabVIEW 的主场
自动化测试·数据采集·labview
龙智DevSecOps解决方案14 天前
赋能汽车/金融/游戏研发:龙智正式引入AI测试管理平台aqua cloud
自动化测试·devops·需求管理·测试管理·研发管理·aqua cloud
纳米软件15 天前
电源时序测试专题:多轨上电顺序怎么验
自动化测试·电源时序测试·多轨上电顺序·上电时序验证
Keith Guo17 天前
Understanding the Layers of Wireless Chips: RF, Baseband, and MAC in ESP32-S31
mac·rf·baseband
大貔貅喝啤酒19 天前
Unittest框架使用教程
自动化测试·python