# 上传自定义测试用例指引

测试用例上传到平台后，平台会将zip包进行解压，然后利用Python内置的inspect模块分析出`test`打头的测试函数名称。

在inspect过程中，会把每个Python文件执行一遍，可能会出现因为case目录结构不合理导致的分析失败。

## 推荐目录结构
推荐两种用例目录组织结构：

①
```
___my_case
   |___test_a.py  // from util.base import xxxx
   |___test_b.py  // from util.base import xxxx
   |___util
       |___ __init__.py
       |___base.py

```

 选择test_a.py、test_b.py和util目录一起打包压缩成case.zip 

②
```
___my_case
   |___test_pack
        |___ __init__.py   // 注意这里，加上__init__.py使整个test_pack成为一个包
        |___test_a.py      // from test_pack.util.base import xxxx
        |___test_b.py      // from test_pack.util.base import xxxx
        |___util
           |___ __init__.py
           |___base.py

```

 选择test_pack目录压缩成case.zip 

 注意：以上两种方式中，不要直接选中"my_case"这层目录进行压缩！！！

## 本地调试
出现问题时可以 [下载脚本](https://res.wx.qq.com/op_res/r_ZV6lkE3usfeftcuqstBoaxkP3qu0KMxbYq9psZbO3hnAylc9-ZABqsi3_y3AgtFzHUnkL8TZ4YQ2OdnyeOOg) 来辅助debug

```
cd ${your_path}/local_script

python3 debug_analyse.py -d ${your_case_path}
```

参考示例：

```
cd /leviwu/test/local_script
python3 debug_analyse.py -d /leviwu/minitest-case/user_case/my_case
```
如果控制台有标准输出，说明case分析成功

常见错误如下：
1. ValueError: source code string cannot contain null bytes
请确保文件是UTF-8编码

## 用例需要额外第三方库文件
目前云测服务已经安装了常用的第三方库，如`dateutil` `xlwt` `xlrd` `pandas` `nose` `pandas`，但是无法覆盖所有的第三方库，如果用例解析出现了 `ModuleNotFoundError, ImportError` 类似的错误，一般是用例使用的第三方库文件，这时需要将第三方库也上传过来。

特别注意，强烈建议在`Linux`或`Mac`环境下安装。因为云测服务和真机跑测处于Linux环境，很多第三方库如果对不同的平台（Win、Mac、Linux）有不同的版本，此时在Windows下安装的包体，上传到Linux下无法解析。

下面以 `faker`（注：faker库云测已安装，此处只是用来举例）库为例，在云测使用具体步骤如下：

### 1、将第三方库安装在minitest_lib文件夹下面
pip支持可以将库安装在指定的文件夹下面，在云测中，统一都放在 `minitest_lib` 文件夹下。请注意，云测服务只识别`minitest_lib`文件夹，其他文件夹不识别！

以faker为例，在case的目录下执行安装，参考命令如下：
```shell
 # 注意只需要将faker替换成你需要的库，其他参数保留
 pip3 install faker -t minitest_lib -I --no-deps

 # 参数解释：
 # -t: 指定路径，此处必须为 minitest_lib
 # --no-deps: 不安装库的依赖包
```

### 2、使用debug_analyse.py调试
安装完库文件后，用本地调试中的debug_analyse.py脚本调试case。常见的错误情况如下：

- 如果还有ModuleNotFoundError等错误，说明还有其他的依赖库文件没有安装，需要继续安装对应的库文件
- 在测试用例的代码中，如果要引用第三方库文件，直接引用就好了，如 `import faker`，不需要 `from minitest_lib import faker`

### 3、上传到云测，再次调试

本地调试成功后，将用例上传到云测服务即可，此时如果还有报错，请检查：
- 有些库可能本地python3环境已经安装了，这时候在debug_analyse.py中也会执行成功，但是上传云测报错。例如本地已经安装dateutil，云测没有安装，上传时会继续报错 `ModuleNotFoundError: No module named 'dateutil'`，此时需要将datetutil也安装即可，如执行 `pip3 install python-dateutil -t minitest_lib --no-deps -I`
- 一些特别复杂的库文件还需要安装二进制文件才能使用，云测无法支持
- 再次提醒，尽量在`linux`或`Mac`环境下安装包体，调试脚本。这样和云测环境保持一致，避免window环境出现安装包环境或字符编码错误

如果还出现错误，请加入云测服务官方企微群，联系MiniTest小助手反馈

### [需要帮助](help)
