---
title: 生成/执行测试用例
description: "指导用户根据算子测试用例定义文件生成ST测试数据及测试用例执行代码，在硬件环境上执行算子测试用例。"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/others/tbeaicpudevg/atlasopdev_10_0098.html
sourcePath: /source/zh/canncommercial/900/others/tbeaicpudevg/atlasopdev_10_0098.html
indexId: 2749031fd93652fbf5e60886e4f8ccf3d0f1d9778e6c3aab216f29b4e038139a73
---
# 生成/执行测试用例

指导用户根据算子测试用例定义文件生成ST测试数据及测试用例执行代码，在硬件环境上执行算子测试用例。

#### 开发环境与运行环境合设场景

1. 请参见环境准备，配置CANN软件所需基本环境变量。
2. ST测试用例执行时，会使用AscendCL接口加载单算子模型文件并执行，所以需要配置AscendCL应用编译所需其他环境变量，如下所示。

```
export DDK_PATH=${INSTALL_DIR}
export NPU_HOST_LIB=${INSTALL_DIR}/
{arch-os}
/devlib
```


  ${INSTALL_DIR}请替换为CANN软件安装后文件存储路径。以root用户安装为例，安装后文件默认存储路径为：/usr/local/Ascend/cann。 {arch-os}中arch表示操作系统架构，os表示操作系统。

3. 进入msopst工具所在目录，执行如下命令生成/执行测试用例。

```
./msopst run -i
{**.json}
-soc
{Soc Version}
-out
{output path}
-c
{case name}
-d
{device id}
-conf
{msopst.ini path}
-err_thr "[threshold1,threshold2]"
```


**表1 参数说明**

| 参数名称 | 参数描述 | 是否必选 |
| --- | --- | --- |
| run | 用于执行算子的ST测试用例。 | 是 |
| \-i，\-\-input | 算子测试用例定义文件（\*.json）的路径，可配置为绝对路径或者相对路径。 此处的json文件为执行msopst create命令后的输出，算子测试用例定义文件的详细说明请参见表2。 | 是 |
| \-soc, \-\-soc\_version | 配置为AI处理器的类型。 说明： 如果无法确定具体的<soc\_version>，则在安装AI处理器的服务器执行npu\-smi info命令进行查询，在查询到的“Name”前增加Ascend信息，例如“Name”对应取值为xxxyy，实际配置的<soc\_version>值为Ascendxxxyy。 | 是 |
| \-out，\-\-output | 生成文件所在路径，可配置为绝对路径或者相对路径，并且工具执行用户具有可读写权限。若不配置该参数，则默认生成在执行命令的当前路径。 | 否 |
| \-c，\-\-case\_name | 配置为需要执行的case的名字，若需要同时运行多个case，多个case之间使用逗号分隔。 若配置为“all”，或者不配置此参数，代表执行所有case。 | 否 |
| \-d，\-\-device\_id | NPU设备ID，设置运行ST测试用例的AI处理器的ID。 若未设置此参数，默认为：0。 | 否 |
| \-err\_thr，\-\-error\_threshold | 配置自定义精度标准，取值为含两个元素的列表："[threshold1，threshold2]" threshold1：算子输出结果与标杆数据误差阈值，若误差大于该值则记为误差数据。 threshold2：误差数据在全部数据占比阈值。若误差数据在全部数据占比小于该值，则精度达标，否则精度不达标。 默认值为："[0.01,0.05]"。 取值范围为："[0.0,1.0]"。 说明： 配置的列表需加引号以避免一些问题。例如配置为：\-err\_thr "[0.01,0.05]"。 若测试用例json文件和执行msopst命令时均配置该参数，以执行msopst命令时配置的精度标准进行比对。若均未配置，则以执行msopst命令时默认精度标准[0.01,0.05]进行比对。 | 否 |
| \-conf，\-\-config\_file | ST测试高级功能配置文件（msopst.ini）存储路径，可配置为绝对路径或者相对路径。 用户可通过修改msopst.ini配置文件，实现如下高级功能： ST测试源码可编辑 已编辑的ST测试源码可执行 设置host日志级别环境变量 设置日志是否在控制台显示 设置atc模型转换的日志级别 设置atc模型转换运行环境的操作系统类型及架构 设置模型精度 读取算子在AI处理器上运行的性能数据 | 否 |
| \-err\_report，\-\-error\_report | 针对比对失败的用例，获取算子期望数据与实际用例执行结果不一致的数据。若未设置此参数，默认为：“false”。 true：针对比对失败的用例，将算子期望数据与实际用例执行结果不一致的数据保存在{case.name}\_error\_report.csv文件中。 false：不保存比对失败的数据结果。 说明： 设置此参数为“true”时，获取的比对数据会根据每个case\_name生成独立的csv文件，{case.name}\_error\_report.csv文件所在目录为{output\_path}/{time\_stamp}/{op\_type}/run/out/test\_data/data/st\_error\_reports。 单个csv文件保存数据的上限为5万行，超过则依次生成新的.csv文件，文件命名如：{case.name}\_error\_report0.csv。 | 否 |


4. 查看执行结果。

  - 若运行模式为仅生成ST测试用例代码，不执行ST测试用例，会在-out指定的目录下生成时间戳目录，时间戳目录下将生成以算子的OpType命名的存储测试用例代码的文件夹，目录结构如下所示：

```
{time_stamp}
│   ├──
OpType
│   │   ├── CMakeLists.txt            // 编译规则文件
│   │   ├── inc                       // 测试用例代码所用头文件
│   │   │   └── common.h
│   │   │   └── op_execute.h
│   │   │   └── op_runner.h
│   │   │   └── op_test_desc.h
│   │   │   └── op_test.h
│   │   ├── run                       // 测试用例执行相关文件存储目录
│   │   │   └── out
│   │   │       └── test_data
│   │   │          └── config
│   │   │             └── acl.json      //用于进行acl初始化，请勿修改此文件
│   │   │             └── acl_op.json   // 用于构造单算子模型文件的算子描述文件
│   │   │          └── data
│   │   │             └── expect
│   │   │             └── Test_xxx.bin
│   │   ├── src
│   │   │   └── CMakeLists.txt    // 编译规则文件
│   │   │   └── common.cpp         // 公共函数，读取二进制文件函数的实现文件
│   │   │   └── main.cpp            // 初始化算子测试用例并执行用例
│   │   │   └── op_execute.cpp        //针对单算子调用的AscendCL接口进行了封装
│   │   │   └── op_runner.cpp         //加载单算子模型文件进行执行的接口进行了封装
│   │   │   └── op_test.cpp          //定义了算子的测试类
│   │   │   └── op_test_desc.cpp      //对算子测试用例信息的加载和读入
│   │   │   └── testcase.cpp             //测试用例的定义文件
```


  - 若运行模式为既生成ST测试代码，又运行ST测试代码，命令执行完成后，会屏显打印测试用例执行结果，并会在-out指定的目录下生成时间戳目录，时间戳目录下将生成以算子的OpType命名的存储测试用例及测试结果的文件夹，目录结构如下所示：

```
{time_stamp}
│   ├──
OpType
│   │   ├── build
│   │   │   └── intermediates             //编译产生中间文件
│   │   │       └── xxx
│   │   ├── CMakeLists.txt    // 编译规则文件
│   │   ├── inc
│   │   │   ├── common.h
│   │   │   ├── op_execute.h
│   │   │   ├── op_runner.h
│   │   │   ├── op_test_desc.h
│   │   │   └── op_test.h
│   │   ├── run                           // 测试用例执行相关文件存储目录
│   │   │   └── out
│   │   │       ├── fusion_result.json
│   │   │       ├── main           // 算子测试用例执行的可执行文件
│   │   │       ├── op_models         // 单算子的离线模型文件
│   │   │          ├── xx.om
│   │   │       ├── result_files
│   │   │          ├── result.txt
│   │   │          ├── Test_xxx_output_x.bin   // 运行测试用例生成的结果数据的二进制文件
│   │   │       └── test_data         //测试数据相关文件存储目录
│   │   │          ├── config
│   │   │             ├── acl_op.json    // 用于构造单算子模型文件的算子描述文件
│   │   │             ├── acl.json       //用于进行acl初始化，请勿修改此文件
│   │   │          ├── data                //构造的测试数据
│   │   │             ├──expect
│   │   │                 ├──Test_xxxx.bin      //期望的输出结果的二进制文件
│   │   │             ├──st_error_reports
│   │   │                 ├──Test_xxxx.csv       //用于保存比对结果不一致的数据
│   │   │             ├──Test_xxxx.bin      //测试数据的二进制文件
│   │   └── src
│   │       ├── CMakeLists.txt    // 编译规则文件
│   │       ├── common.cpp         // 公共函数，读取二进制文件函数的实现文件
│   │       ├── main.cpp            // 初始化算子测试用例并执行用例
│   │       ├── op_execute.cpp        //针对单算子调用的AscendCL接口进行了封装
│   │       ├── op_runner.cpp         //加载单算子模型文件进行执行的接口进行了封装
│   │       ├── op_test.cpp          //定义了算子的测试类
│   │       ├── op_test_desc.cpp      //对算子测试用例信息的加载和读入
│   │       └── testcase.cpp             //测试用例的定义文件
│   └── st_report.json        //运行报表
```


    命令运行成功后会生成报表st_report.json，保存在“The st_report saved in”路径下，记录了测试的信息以及各阶段运行情况。

    同时，st_report.json报表可以对比测试结果，如果用户运行出问题，也可基于报表查询运行信息，以便问题定位。 表2 st_report.json报表主要字段及含义 字段 说明 run_cmd - - 命令行命令。 report_list - - 报告列表，该列表中可包含多个测试用例的报告。 trace_detail - 运行细节。 st_case_info 测试信息，包含如下内容。 expect_data_path：期望计算结果路径。 case_name：测试用例名称。 input_data_path：输入数据路径。 planned_output_data_paths：实际计算结果输出路径。 op_params：算子参数信息。 stage_result 运行各阶段结果信息，包含如下内容。 status：阶段运行状态，表示运行成功或者失败。 result：输出结果 stage_name：阶段名称。 cmd：运行命令。 case_name - 测试名称。 status - 测试结果状态，表示运行成功或者失败。 expect - 期望的测试结果状态，表示期望运行成功或者失败。 summary - - 统计测试用例的结果状态与期望结果状态对比的结果。 test case count - 测试用例的个数。 success count - 测试用例的结果状态与期望结果状态一致的个数。 failed count - 测试用例的结果状态与期望结果状态不一致的个数。


#### 开发环境和运行环境分设场景

1. 根据运行环境的架构在开发环境上搭建环境。

  a. 请参见    环境准备
，根据运行环境架构安装对应的CANN开发套件包（开发环境和运行环境架构相同时，无需重复安装CANN开发套件包）。
  b. ST测试用例执行时，会使用AscendCL接口加载单算子模型文件并执行，需要在开发环境上根据运行环境的架构配置AscendCL应用编译所需其他环境变量。

    - 当开发环境和运行环境架构相同时，环境变量如下所示。

```
export DDK_PATH=${INSTALL_DIR}
export NPU_HOST_LIB=${INSTALL_DIR}/
{arch-os}
/devlib
```


    - 当开发环境和运行环境架构不同时，环境变量如下所示。

```
export DDK_PATH=${INSTALL_DIR}/
{arch-os}
export NPU_HOST_LIB=${INSTALL_DIR}/
{arch-os}
/devlib
```


- ${INSTALL_DIR}请替换为CANN软件安装后文件存储路径。以root用户安装为例，安装后文件默认存储路径为：/usr/local/Ascend/cann。
- {arch-os}中arch表示操作系统架构（需根据运行环境的架构选择），os表示操作系统（需根据运行环境的操作系统选择）。


2. 在开发环境启动msopst工具的高级功能，仅生成ST测试用例。

  a. 执行命令，编辑msopst.ini文件。

```
vim ${INSTALL_DIR}/python/site-packages/bin/msopst.ini
```


    ${INSTALL_DIR}请替换为CANN软件安装后文件存储路径。以root用户安装为例，安装后文件默认存储路径为：/usr/local/Ascend/cann。

  b. 将msopst运行模式修改为模式2，修改“only_gen_without_run”和“only_run_without_gen”参数的取值。只生成ST测试代码，不运行ST测试代码。
  c. 若开发环境和运行环境架构不同，修改“HOST_ARCH”和“TOOL_CHAIN”参数的取值。
  d. 进入msopst工具所在目录，执行如下命令生成ST测试源码。

```
./msopst run -i
{**.json}
-soc
{Soc Version}
-out
{output path}
-conf
xx/
msopst.ini
```


    -conf参数请修改为msopst.ini配置文件的实际路径。ST测试用例生成后，用户可根据需要自行修改ST测试用例代码。

  e. 执行完成后，将在{output path}下生成ST测试用例，并使用g++编译器生成可执行文件main。同时，屏显信息结果中展示此次一共运行几个用例，测试用例运行的情况，并生成报表st_report.json，保存在屏显信息中“The st report saved in”所示路径下，报表具体信息请参见    表2
。
3. 请参见环境准备，在运行环境上安装CANN软件并配置所需基本环境变量。
4. 执行测试用例。

  a. 将开发环境的算子工程目录的run目录下的out文件夹拷贝至运行环境任一目录，例如上传到/home/HwHiAiUser/Ascend_project/run_add/目录下。
  b. 在运行环境中执行out文件夹下的可执行文件。
    进入out文件夹所在目录，执行如下命令：

```
chmod +x main
./main
```


5. 查看运行结果。
  执行完成后，屏显信息显示此次用例运行的情况，如图1所示。

  图1 运行结果
