RobotFramework关键字之List Should Contain Sub List

RobotFramework关键字之List Should Contain Sub List

List Should Contain Sub List 是 Robot Framework 中 Collections 标准库提供的一个断言关键字,用于验证一个列表(主列表)是否包含另一个列表(子列表)中的所有元素。它检查的是子列表的每个元素是否都存在于主列表中,但并不要求元素的顺序一致或连续出现

关键参数与用法

在编写测试用例时,你需要至少提供两个必要参数:

  • list1:主列表,即被检查的较大列表。
  • list2:子列表,即需要确认其所有元素是否都包含在 list1 中的较小列表。
    此外,还有一个可选参数:
  • msg:当断言失败时,可以自定义显示的错误信息

基本语法如下:

List Should Contain Sub List    ${主列表变量}    ${子列表变量}    # 可选的自定义错误信息

操作示例与相关关键字

下面是一个简单的使用示例,帮助你理解它的行为:

*** Settings ***
Library    Collections 
*** Test Cases ***
示例:检查列表包含关系
    @{所有水果}    Create List    Apple    Banana    Orange    Grape
    @{喜欢的水果}    Create List    Banana    Grape
    # 断言:所有"喜欢的水果"都存在于"所有水果"列表中
    List Should Contain Sub List    ${所有水果}    ${喜欢的水果}

为了让你更好地在上下文使用这个关键字,下面表格列出了 Collections 库中其他几个常用的列表断言关键字,你可以对比它们的用途

关键字 主要作用 List Should Contain Sub List 的区别
Lists Should Be Equal 断言两个列表完全相等,包括元素的顺序数量 检查的是两个列表是否完全一致,更为严格。
List Should Contain Value 断言列表中包含某个特定的元素 检查单个元素,而非一个子列表。
Should Contain (BuiltIn库) 断言一个容器(如列表、字符串)包含某个元素 功能更通用,可用于列表、字符串等,但也是检查单个元素。

特别注意:关于空字符串的边界情况

需要特别注意的是,根据搜索结果,List Should Contain Sub List 关键字在处理子列表中包含空字符串时,存在一个边界问题。

  • 问题现象:当子列表中包含空字符串,且主列表也包含空字符串时,即使主列表缺少子列表里的其他有效元素,断言也可能不会失败。

  • 原因:这通常与关键字内部的实现逻辑,特别是差异信息格式化方式有关。

  • 建议:在使用此关键字时,如果您的测试数据可能涉及空字符串,需要特别留意这个边界情况。对于关键的业务断言,可以考虑结合其他验证方法,或者确保在测试前对数据进行清理。

核心要点总结

总而言之,List Should Contain Sub Sub List 是一个用于检查列表间包含关系的实用断言。当你的测试逻辑只关心某些关键元素是否存在于一个更大的集合中,而不在乎它们的顺序时,这个关键字就非常有用。

要使用它,别忘了在测试套件的设置部分通过 Library Collections 来导入 Collections 库。

实战

    @{default_list}    Create List    10066    41266    70066    70077    94288
    @{table_data}=    Create List
    ${cell_data}=    Get Table Cell    xpath=//*[@id="mhg_table"]//*[@class="el-table__body-wrapper"]//table    2    3
    ${row_count}=    Get Element Count    xpath=//*[@id="mhg_table"]//*[@class="el-table__body-wrapper"]//table/tbody/tr
    ${col_count}=    Get Element Count    xpath=//*[@id="mhg_table"]//*[@class="el-table__body-wrapper"]//table/tbody/tr[1]/td
    FOR    ${row}    IN RANGE    1    ${row_count}+1
        ${cell_data}=    Get Table Cell    xpath=//*[@id="seplatConfig_table"]//*[@class="el-table__body-wrapper"]//table    ${row}    1
        Append To List    ${table_data}    ${cell_data}
    END
    Log    ${table_data}
    List Should Contain Sub List    ${table_data}    ${default_list}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容