# Scenario Test Suite

场景测试用例集。

场景的负载目前有：CC（`Betting`），360 广告（`QHAd`）等。

## 运行调试方法

```sh
tcctl create -f testbed.yaml

ginkgo -focus "#{your_test_case}#" -- scenario --configstr="$(cat config.json)"
```

## 代码风格说明

### 测试用例

*scenario_test.go* 文件包含了所有的通用场景测试用例，比如 X 负载下的扩缩容、升级、
基础故障注入等。它通过 Describe/Context 等 ginkgo dsl 来组织这些用例。
而每个用例的具体试逻辑的代码实现则分散在其它文件中。

每个用例的函数名以 `T` 为前缀。比如用例 `oltp_scenario_scale_001` 对应的函数名为
`TScale001`。

测试用例的公共逻辑存放在 BeforeEach/AfterEach 中。

### 公共库以及工具函数

公共库以及工具函数以包（package）的形式存放在 scenario 的子文件夹中。比如
betting 包存放 betting 相关的库或者工具函数。

一般来说，不要在公共库以及工具函数中使用断言，而应该返回 error。断言不利于代码复用。
断言逻辑只应该出现在测试用例的主题逻辑中。

### 思考

当前测试用例的代码中，会存在较多类似的条件判断，比如判断当前是测试哪个场景的负载。
这些代码当前存在一定的重复，当前还没有处理，因为当前需求不是特别明确。
如果后续重复代码代码越来越多，可以再考虑使用消除它们。比如设计一个负载接口：

```golang
type Workload interface{
    Run(xxx) error
    Load(xxx) error
    FullScan001(xxx) error
    AddIndex(xxx) error
}
```
