文档
注册

UT测试

简介

MindStudio提供了基于gtest框架的新的UT测试方案,简化了开发者开发UT测试用例的复杂度。

UT(Unit Test:单元测试)是开发人员进行单算子运行验证的手段之一,主要目的是:

  • 测试算子代码的正确性,验证输入输出结果与设计的一致性。
  • UT侧重于保证算子程序能够正常运行,选取的场景组合应能覆盖算子代码的所有分支(一般情况下覆盖率要达到100%),从而降低不同场景下算子代码的编译失败率。

测试类的详细定义可参见Ascend-cann-toolkit安装目录/ascend-toolkit/latest/python/site-packages/op_test_frame/ut/op_ut.py文件。

前提条件

  • 需完成自定义算子的开发,包括算子实现代码和算子原型定义,详情可参见算子代码实现算子原型定义
  • 安装lcov依赖,gcc 8及以下的版本可以安装1.14版本的lcov依赖 ,gcc 9及以上的版本建议安装1.16版本的lcov依赖。
  • 安装CMake,要求版本为3.14及以上,若CMake版本不满足要求,请升级CMake版本。

CentOS7.8 arm容器暂不支持UT测试功能。

操作步骤

  1. 创建UT测试用例。
    1. 创建UT测试用例,有以下两种方式:

      右键单击算子工程根目录,选择“New Cases > AI CPU UT Case”

      若已经存在了算子的UT测试用例,可以右键单击“testcases”目录或“testcases > ut”目录,选择“New Cases > AI CPU UT Case”,创建UT测试用例。

    2. 在弹出的算子选择界面,选择需要创建UT测试用例的算子,单击“OK”,如下图所示。

      若已存在此算子的UT测试用例,系统会提示“testcases/ut/ops_test/xx already exists. Do you want to overwrite?”

      可以选择“Overwrite”覆盖当前测试用例或者“Cancel”取消覆盖。

      创建完成后,会在算子工程根目录下生成testcases文件夹,目录结构如下所示:

      ├── MyOperator            //工程根目录  
      │   ├──  testcases                            
      │   │   ├── libs                  // gtest框架,为第三方依赖,用户无需关注
      │   │   ├──  ut                              
      │   │   │   ├── aicpu_test
      │   │   │   │   ├── reshape_cust   
      │   │   │   │   │   ├── CMakeLists.txt        //用于编译可执行文件
      │   │   │   │   │   ├── test_reshape_cust_impl.cc      //算子实现代码的测试用例文件
      │   │   │   │   │   ├── test_reshape_cust_proto.cc    //算子原型定义代码的测试用例文件,MindSpore框架的算子不包含该文件
      │   │   │   │   ├── CMakeLists.txt             //用于编译可执行文件
      │   │   │   │   ├── test_main.cc             //测试用例调用总入口
      │   │   │   ├ CMakeLists.txt
  2. 在中标麒麟和银河麒麟运行时,请在./testcases/aicpu_test/reshape_cust/CMakeLists.txt文件中添加加粗内容,其他操作系统请忽略此步骤。
    cmake_minimum_required(VERSION 3.14)
    set(CMAKE_CXX_FLAGS "-std=c++11")
    
    ...
    
    link_directories(
                "${ATC_DIR}/lib64"
                "${GTEST_DIR}"
                "/usr/local/gcc7.3.0/lib64/"   //若用户自己配置dockerfile请修改为实际gcc7.3.0的lib64路径
        )
    
        set(CUSTOM_OBJECT_NAME "reshape_cust_proto_test")
        add_executable(${CUSTOM_OBJECT_NAME}
                ${PROJECT_DIR}/testcases/ut/aicpu_test/test_main.cc
                ${OP_PROTO_SOURCE_SRCS}
                ${OP_PROTO_TEST_FILES})
    
        target_link_libraries(${CUSTOM_OBJECT_NAME} gtest c_sec alog pthread error_manager graph register)
    endif()

    使用AI CPU UT测试功能时,gcc版本为7.3.0及以上,若gcc版本不满足要求,请升级gcc版本。

  3. 编写算子实现代码的UT C++测试用例。

    在“testcases/ut/aicpu_test/reshape_cust/test_reshape_cust_impl.cc”文件中,编写算子实现代码的UT C++测试用例,计算出算子执行结果,并取回结果和预期结果进行比较,来测试算子逻辑的正确性。

  4. 编写算子原型定义的UT C++测试用例,其中MindSpore框架不支持编写。

    在“testcases/ut/aicpu_test/reshape_cust/test_reshape_cust_proto.cc”文件中,编写算子原型定义的UT C++测试用例,用于定义算子实例、更新算子输入输出并调用InferShapeAndType函数,最后验证InferShapeAndType函数执行过程及结果的正确性。

  5. 运行算子实现文件的UT测试用例。

    开发人员可以执行当前工程中所有算子的UT测试用例,也可以执行单个算子的UT测试用例。

    • 右键单击“testcases/ut/aicpu_test”文件夹,选择“Run AI CPU Operator‘All’UT Impl with coverage”,运行整个文件夹下算子实现代码的测试用例。
    • 右键单击“testcases/ut/aicpu_test/算子名称”文件夹,选择“Run AI CPU Operator 算子名称’UT Impl with coverage”,运行单个算子实现代码的测试用例。
    • 右键单击“testcases/ut/ops_test/算子名称/test_算子名称_impl.cc”文件,选择“Run AI CPU Operator‘算子名称’UT Impl with coverage”,执行单个算子实现代码的测试用例。
    第一次运行时会弹出运行配置页面,请参考配置,然后单击“Run”。后续如需修改运行配置,请参考修改运行任务配置
    图1 运行配置页面
    表1 运行配置信息

    参数

    说明

    Name

    运行配置名称,用户可以自定义。

    Test Type

    选择ut_impl。

    Compute Unit

    选择计算单元。

    • AI Core/Vector Core
    • AI CPU

    选择不同的计算单元可以实现AI Core/Vector Core和AI CPU UT测试配置界面的切换。

    Operator Name

    选择运行的测试用例。

    • all表示运行所有用例。
    • 其他表示运行某个算子下的测试用例。

    Case Names

    勾选需要运行的测试用例,即算子实现代码的UT C++测试用例。支持全选和全不选所有测试用例。

    查看运行结果。
    1. 运行完成后,通过界面下方的“Run”日志打印窗口查看运行结果。
    2. “Run”窗口中单击report index.html的URL(URL中的localhost为MindStudio安装服务器的IP,建议直接单击打开),查看UT测试用例的覆盖率结果。

      查看UT测试用例运行结果需要使用浏览器,如果未安装浏览器,请用户自行安装。

      如果出现"Page'http://***.html'requested without authorization, you can copy URL and open it in browser to trust it."提示,请参考配置不受信任的网址访问浏览器解决。

    3. 在html页面中单击对应算子,进入UT用例覆盖率详情页面,如图2所示,通过绿色和红色标签区分是否覆盖。
      图2 UT覆盖率详情页面

  6. (可选)调试算子实现文件的UT测试。
    1. 右键单击“testcases/ut/aicpu_test/算子名称”文件夹,选择“Debug AI CPU Operator‘算子名称’UT Impl ”,调试单个算子实现代码的测试用例。

      调试详细操作请参见工程调试,调试快捷键设置方法请参见其他

      第一次运行时会弹出运行配置页面,请参考配置,然后单击“Debug”。后续如需修改运行配置,请参考修改运行任务配置
      表2 运行配置信息

      参数

      说明

      Name

      运行配置名称,用户可以自定义。

      Test Type

      选择ut_impl。

      Compute Unit

      选择计算单元。

      • AI Core/Vector Core
      • AI CPU

      选择不同的计算单元可以实现AI Core/Vector Core和AI CPU UT测试配置界面的切换。

      Operator Name

      选择运行的测试用例。

      • all表示运行所有用例。
      • 其他表示运行某个算子下的测试用例。

      Case Names

      勾选需要运行的测试用例,即算子实现代码的UT C++测试用例。支持全选和全不选所有测试用例。

    2. 查看调试信息。

      调试过程中,通过界面下方的“Debug”窗口进行调试、查看调试信息和调试结果。

  7. 运行算子原型定义的UT测试用例。

    开发人员可以执行当前工程中所有算子的UT测试用例,也可以执行单个算子的UT测试用例。

    • 右键单击“testcases/ut/aicpu_test”文件夹,选择“Run AI CPU Operator‘All’UT Proto”,执行整个文件夹下算子原型定义代码的测试用例。
    • 右键单击“testcases/ut/aicpu_test/算子名称”文件夹,选择“Run AI CPU Operator‘算子名称’UT Proto”,执行单个算子原型定义代码的测试用例。
    • 右键单击“testcases/ut/ops_test/算子名称/test_算子名称_proto.cc”文件,选择“Run AI CPU Operator‘算子名称’UT Proto”,执行单个算子原型定义代码的测试用例。
    第一次运行时会弹出运行配置页面,请参考配置,然后单击“Run”。后续如需修改运行配置,请参考修改运行任务配置
    图3 配置页面
    表3 运行配置信息

    参数

    说明

    Name

    运行配置名称,用户可以自定义。

    Test Type

    选择ut_proto。

    Compute Unit

    选择计算单元。

    • AI Core/Vector Core
    • AI CPU

    选择不同的计算单元可以实现AI Core/Vector Core和AI CPU UT测试配置界面的切换。

    Operator Name

    选择运行的测试用例。

    • all表示运行所有用例。
    • 其他表示运行某个算子下的测试用例。

    Case Names

    勾选需要运行的测试用例,即TEST_F中定义的用例。支持全选和全不选所有测试用例。

    运行完成后,通过界面下方的日志打印窗口,查看运行结果。结果中展示测试用例运行成功和失败的情况。

旧的UT测试工程在更新Ascend-cann-toolkit开发套件包后,可能会出现UT测试运行失败。解决方法为删除旧的UT测试依赖文件夹后重新运行UT测试。旧的UT测试依赖文件夹路径为“AI CPU算子工程目录/testcases/libs/aicpu_depend”

其他

AI CPU算子的UT测试支持单步调试,在顶部菜单栏中选择File > Settings > Keymap > Main menu > Run > Debugging Actions修改调试快捷键。

搜索结果
找到“0”个结果

当前产品无相关内容

未找到相关内容,请尝试其他搜索词