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 # 处理编码转换 

发表评论

评论已关闭。

相关文章