# 测试工具及脚本

## 接口测试流程

1. **需求理解和分析**：首先，需要理解和分析接口的功能需求、输入/输出参数、错误代码、异常处理等信息。这些信息通常可以从接口文档、需求文档或者开发人员那里获取。
2. **测试用例设计**：基于需求分析的结果，设计测试用例。测试用例通常包括正常的功能测试用例、异常/错误处理测试用例、性能测试用例等。功能测试用例主要验证接口的功能是否符合预期，异常/错误处理测试用例主要验证接口在输入参数异常或系统异常时的表现，性能测试用例主要验证接口在高并发或大数据量下的表现。
3. **测试环境搭建**：根据接口的运行环境要求，搭建测试环境。这可能包括安装和配置服务器、数据库、网络等。
4. **执行测试**：在测试环境中，按照测试用例执行测试，并记录测试结果。
5. **结果分析和报告**：分析测试结果，如果发现问题，需要记录问题的详细信息，并反馈给开发人员。同时，编写测试报告，报告中通常会包括测试的目的、内容、环境、结果、存在的问题等信息。
6. **缺陷跟踪和回归测试**：对于发现的问题，需要进行跟踪，确认问题是否已经被修复。问题修复后，需要进行回归测试，验证问题是否真的已经被修复，以及修复是否对其他功能产生了影响。



## 测试工具

性能测试工具：

| 测试工具                 |               |                        |                               |
| ------------------------ | ------------- | ---------------------- | ----------------------------- |
| **Apache JMeter**        | Gatling       | Locust                 | Apache Bench                  |
| LoadRunner (Micro Focus) | NeoLoad       | Silk Performer         | Rational Performance Tester   |
| Artillery                | Tsung         | Siege                  | nGrinder                      |
| CloudTest by SOASTA      | BlazeMeter    | LoadNinja              | LoadUI NG Pro                 |
| LoadUI                   | WebLoad       | QEngine (ManageEngine) | QA Load                       |
| LoadView                 | OpenSTA       | LoadComplete           | Loadstorm                     |
| WebTesting               | WAPT          | Taurus                 | LoadImpact                    |
| Httperf                  | RedLine13     | Loadstep               | Apica LoadTest                |
| Goad                     | httprunner    | StresStimulus          | Automai's Performance testing |
| Testing Anywhere         | SmartMeter.io | Appvance               | Predator                      |



免费及收费说明：

| 免费          | 收费                          |
| ------------- | ----------------------------- |
| Apache JMeter | LoadRunner (Micro Focus)      |
| Gatling       | NeoLoad                       |
| Locust        | Silk Performer                |
| Apache Bench  | Rational Performance Tester   |
| Artillery     | LoadNinja                     |
| Tsung         | LoadUI NG Pro                 |
| Siege         | QEngine (ManageEngine)        |
| nGrinder      | QA Load                       |
| OpenSTA       | LoadView                      |
| Loadstorm     | LoadComplete                  |
| WebTesting    | Apica LoadTest                |
| Httperf       | StresStimulus                 |
| Goad          | Automai's Performance testing |
| httprunner    | Testing Anywhere              |
| Taurus        | SmartMeter.io                 |
| LoadImpact    | Appvance                      |
| Predator      | LoadUI                        |
| WebLoad       |                               |



## Linux性能测试脚本

### shell脚本

#### Bench.sh

**特点**

- 显示当前测试的各种系统信息；
- 取自世界多处的知名数据中心的测试点，下载测试比较全面；
- 支持 IPv6 下载测速；
- IO 测试三次，并显示平均值。

```
wget -qO- bench.sh | bash
#或者
curl -Lso- bench.sh | bash
#或者
wget -qO- 86.re/bench.sh | bash
#或者
curl -so- 86.re/bench.sh | bash
```



#### SuperBench.sh

**特点**

- 改进了显示的模式，基本参数添加了颜色，方面区分与查找。
- I/O测试，更改了原来默认的测试的内容，采用小文件，中等文件，大文件，分别测试IO性能，然后取平均值。
- 速度测试替换成了 Superspeed 里面的测试，第一个默认节点是，Speedtest 默认，其他分别测试到中国电信，联通，移动，各三个不同地区的速度。

```text
wget -qO- --no-check-certificate https://raw.githubusercontent.com/oooldking/script/master/superbench.sh | bash
#或者
curl -Lso- -no-check-certificate https://raw.githubusercontent.com/oooldking/script/master/superb
```



#### UnixBench.sh

特点

- 自动安装UnixBench和测试脚本
- 系统调用、读写、进程、图形化测试、2D、3D、管道、运算、C库等系统基准性能

使用

```text
wget --no-check-certificate https://github.com/teddysun/across/raw/master/unixbench.sh
chmod +x unixbench.sh
./unixbench.sh
```

参考：https://zhuanlan.zhihu.com/p/117547388



### 命令工具

#### DD

DD命令如下：

```
dd if=/dev/zero of=test bs=8k count=256k conv=fdatasync
dd if=/dev/zero of= test bs=64k count=4k oflag=dsync
```

以上代码中conv=fdatasync与oflag=dsync的区别在于：sync函数只是将所有修改过的块缓冲区排入写队列，然后就返回，它并不等待实际写磁盘操作结束。fsync函数只对由文件描述符filedes指定的单一文件起作用，并且等待写磁盘操作结束，然后返回。

![DD命令工具](https://static.www.toimc.com/blog/picgo/2023/07/27/vps-io_01-680x366-9ac0cb.webp)

所以，不带缓存的IO读写测试才是硬盘的真实读写速度，一般来说低于30MB/s算是慢的了。

#### Hdparmw

Hdparm是Linux的命令行程序，用于设置和查看ATA硬盘驱动器硬件参数并测试性能。首先是安装：

```
yum install hdparm -y

#apt install hdparm -y
```

然后是找出当前的硬盘。

```
fdisk -l
```

接着就可以开始测试了。命令如下：

```
sudo hdparm -tT /dev/sda2
```

测试结果如下图：

[![Hdparm测试工具](https://wzfou.cdn.bcebos.com/wp-content/uploads/2023/02/vps-io_02-680x366.png)](https://wzfou.cdn.bcebos.com/wp-content/uploads/2023/02/vps-io_02.png)

#### Sysbench

网站：https://github.com/akopytov/sysbench

Sysbench是一款压力测试工具，可以测试系统的硬件性能，也可以用来对数据库进行基准测试。sysbench 支持的测试有CPU运算性能测试、内存分配及传输速度测试。首先是安装：

```
sudo apt install sysbench
```

然后是生成需要的测试文件，完成后会在当前目录下生成很多小文件。

```
sysbench --test=fileio --num-threads=20 --file-total-size=1G --file-test-mode=rndrw prepare
```

测试执行：

```
sysbench --test=fileio --num-threads=20 --file-total-size=1G --file-test-mode=rndrw run
```

测试完了，就可以看到相关的读写速度了。

![Sysbench测试工具](https://static.www.toimc.com/blog/picgo/2023/07/27/vps-io_08-680x366-865b04.webp)

清理测试时生成的文件。

sysbench --test=fileio --num-threads=20 --file-total-size=1G --file-test-mode=rndrw cleanup

#### Fio

Fio是Linux下开源的一款IOPS测试工具，主要用来对磁盘进行压力测试和性能验证。它可以产生许多线程或进程来执行用户特定类型的I/O操作，通过编写作业文件或者直接命令去执行测试动作，相当于是一个 多线程的io生成工具，用于生成多种IO模式来测试硬盘设备的性能。

首先是安装：

```
sudo apt install fio
```

测试读命令：

```
fio --name TEST --eta-newline=5s --filename=temp.file --rw=read --size=2g --io_size=10g --blocksize=1024k --ioengine=libaio --fsync=10000 --iodepth=32 --direct=1 --numjobs=1 --runtime=60 --group_reporting
```

![Fio测试工具读速度](https://static.www.toimc.com/blog/picgo/2023/07/27/vps-io_03-680x366-aaa0c1.webp)

测试写命令：

```
fio --name TEST --eta-newline=5s --filename=temp.file --rw=write --size=2g --io_size=10g --blocksize=1024k --ioengine=libaio --fsync=10000 --iodepth=32 --direct=1 --numjobs=1 --runtime=60 --group_reporting
```

![Fio测试工具写速度](https://static.www.toimc.com/blog/picgo/2023/07/27/vps-io_04-680x366-d78dd6.webp)

测试随机读写命令：

```
fio --name TEST --eta-newline=5s --filename=temp.file --rw=randrw --size=2g --io_size=10g --blocksize=4k --ioengine=libaio --fsync=1 --iodepth=1 --direct=1 --numjobs=1 --runtime=60 --group_reporting
```

![Fio测试工具读写速度](https://static.www.toimc.com/blog/picgo/2023/07/27/vps-io_05-c1b267-39757a.webp)

相关的说明如下：

> `-rw=randwrite`：读写模式，`randwrite`是随机写测试，还有顺序读`read`，顺序写`write`，随机读randread，混合读写等。
> `-ioengine=libaio`：libaio指的是异步模式，如果是同步就要用sync。
> `-direct=1`：是否使用directIO。
> `-thread`：使用pthread_create创建线程，另一种是fork创建进程。进程的开销比线程要大，一般都采用thread测试。
> `–numjobs=1`：每个job是1个线程，这里用了几，后面每个用-name指定的任务就开几个线程测试。所以最终线程数=任务数* numjobs。
> `-iodepth=64`：队列深度64.
> `-filename=/dev/sdb4`：数据写到/dev/sdb4这个盘（块设备）。这里可以是一个文件名，也可以是分区或者SSD。
> `-size=10G`：每个线程写入数据量是10GB。
> `-name=job1`：一个任务的名字，名字随便起，重复了也没关系。
> `-offset=0MB`：从偏移地址0MB开始写。
> `-bs=4k`：每一个BIO命令包含的数据大小是4KB。一般4KB IOPS测试，就是在这里设置。
> `-output TestResult.log`：日志输出到TestResult.log。

#### 总结

在给硬盘测试IO时，还可以使用命令查看磁盘的压力，命令：`iostat -x 1 10`，如果没有执行安装：`yum install sysstat`，主要查看`%util `和`%idle` ，如果 `%util` 接近 100%，说明产生的I/O请求太多，I/O系统已经满负荷，`idle`小于70% IO压力就较大了，一般读取速度有较多的wait。

[![VPS磁盘性能](https://wzfou.cdn.bcebos.com/wp-content/uploads/2023/02/vps-io_09.png)](https://wzfou.cdn.bcebos.com/wp-content/uploads/2023/02/vps-io_09.png)

DD、Hdparm、Sysbench、FIO这个工具测试的数据相差比较大，DD命令比较直观，但是准确性不一定高，Sysbench、FIO相当于综合性的测试工具，可以全方位地了解磁盘的IO读写性能，推荐使用。