1、测试需求来源:
项目背景:基于某云产品前端的测试,其中产品包括对日志管理的操作,由于产品型号默认的磁盘规格及日志写入速率不同,且用户日志数据量较大,比如 标准版产品,每天最大入库日志量2.6亿条,默认磁盘容量500G,需要确定500G容量能存储的日志量,以及根据日志保存时间需要扩容多少。
测试需求:
- 测试存储日志量与磁盘占用的关系,是否呈线性关系;
- 磁盘最大存储日志量;
- 防止磁盘写满保护措施--存储量达到总量的80%报警,达到90%进行磁盘日志清理操作。
2、测试范围包括:
本次测试范围覆盖需求C
3、性能指标:
压力测试,磁盘最大日志量写入速率;
磁盘最大日志量存储阈值。
4、测试场景设计
基于当前测试场景,构造磁盘写入大文件,达到磁盘容量的80%阈值,验证是否触发报警系统,发送报警信息;继续写入大文件,达到磁盘容量的90%阈值,验证是否进行日志清理操作。
基于测试场景,此次测试需要往日志存储的磁盘中写入大文件(400G),而测试环境中缺少这样的测试资源;则使用linux的dd命令快速的复制出所需要的大文件
5、测试脚本开发
dd命令实现创建指定大小的文件
[root@XXXXXXXXXXX /]# dd if=/dev/zero of=./bigfile40g bs=2M count=5000
5000+0 records in
5000+0 records out
10485760000 bytes (10 GB) copied, 8.55833 s, 1.2 GB/s
在当前目录下会生成一个1000M大文件,文件内容为全0(因从/dev/zero中读取,/dev/zero为0源),但是这样为实际写入硬盘,文件产生速度取决于硬盘读写速度,如果欲产生超大文件,速度很慢。
在某种场景下,我们只想让文件系统认为存在一个超大文件在此,但是并不实际写入硬盘
dd if=/dev/zero of=./bigFile_1g bs=1M count=0 seek=100000
此时创建的文件在文件系统中的显示大小为100000MB,但是并不实际占用block,因此创建速度与内存速度相当,seek的作用是跳过输出文件中指定大小的部分,这就达到了创建大文件,但是并不实际写入的目的。当然,因为不实际写入硬盘,所以你在容量只有10G的硬盘上创建100G的此类文件都是可以的。
随机生成1百万个1K的文件
seq 1000000 | xargs -i dd if=/dev/zero of={}.dat bs=1024 count=1
shell脚本自动化写入磁盘 bigFile.sh
#!/bin/bash
cd ./BigFile/
for i in {1..500};
do
dd if=/dev/zero of=./bigfile_1g_$i bs=1M count=1024;
sleep 2;
done
6、测试结果
1、登陆主机,进入日志所在目录,查看当前磁盘容量,确定需要写入的磁盘文件大小
[root@XXXXXXXXXXX /]# df -h
2、编辑脚本并运行
[root@XXXXXXXXXXX /]# bash ./bigFile.sh
3、查看磁盘容量,是否满足要求。
[root@XXXXXXXXXXX /]# df -h