我必须为测试场景编写一个 bat 脚本,其中我们正在测试的软件由于磁盘已满错误而无法写入文件。例如,测试脚本必须是自动化的,以便我们可以在夜间测试中运行它。测试脚本还必须在不同的计算机上运行,因此在这种情况下安装虚拟机之类的软件并不是最好的解决方案。
如何在 Windows 环境中模拟该错误?
我必须为测试场景编写一个 bat 脚本,其中我们正在测试的软件由于磁盘已满错误而无法写入文件。例如,测试脚本必须是自动化的,以便我们可以在夜间测试中运行它。测试脚本还必须在不同的计算机上运行,因此在这种情况下安装虚拟机之类的软件并不是最好的解决方案。
如何在 Windows 环境中模拟该错误?
您可以尝试写入完整的软盘。
编辑:
根据您编辑的问题,您可以设置没有磁盘空间配额的网络共享并写入。无论登录的用户或机器如何,都会产生错误。
对于 Windows XP 或更高版本:
此命令可以获得 c:\ 驱动器的可用空间量:
for /f "usebackq tokens=1-5" %%A in (`dir c:\ ^| find "bytes free"`) do (
set FREE_SPACE=%%C
)
根据需要将 c:\ 替换为您的驱动器。
然后,您可以从该值中取出一些空间,以便您有一点空间可以使用:
set /a FREE_SPACE=FREE_SPACE-1024
或者你想保留多少空间。
您可以使用该fsutil
命令创建一个文件来填充磁盘上的可用空间:
fsutil file createnew c:\spacehog.dat %FREE_SPACE%
运行测试,写入驱动器。写入 1024 字节左右后,您应该会用完空间。
下载并安装TrueCrypt。然后,您可以创建一个任意大小(几兆字节)的虚拟分区,挂载它,然后用几个文档填充它。
最佳选择:微软的消费计划
原因:
脚步:
cd "%ProgramFiles(x86)%\Windows Resource Kits\Tools"
(或安装在任何地方)consume.exe -disk-space
命令输出:
C:\Program Files (x86)\Windows Resource Kits\Tools>consume.exe
Universal Resource Consumer - Just an innocent stress program, v 0.1.0
Copyright (c) 1998, 1999, Microsoft Corporation
consume RESOURCE [-time SECONDS]
RESOURCE can be one of the following:
-physical-memory
-page-file
-disk-space
-cpu-time
-kernel-pool
C:\Program Files (x86)\Windows Resource Kits\Tools>consume.exe -disk-space
Consume: Message: Total disk space: 96049 Mb
Consume: Message: Free disk space: 14705 Mb
Consume: Message: Free per user space: 14705 Mb
Consume: Message: Attempting to use: 14705 Mb
Consume: Message: Reattempting to use: 14705 Mb
Consume: Message: Sleeping ...
其他选项:
这可能看起来有点多,但我能想到的一件事是使用虚拟机,并将其虚拟磁盘设置为足够大以适应操作系统。用一些垃圾文件填充它以使其超出边缘,然后运行您的程序。
创建一个辅助分区,用垃圾填充它,然后在那里运行您的程序。
您可以设置一个小型 ramdisk 并写入它。请参阅此页面了解一些免费的 ramdisk 产品。
可以在每台计算机上运行的最好的东西(因为不必在专用机器上进行测试)是可以即时设置的 ramdrive/ramdisk。
到目前为止,只找到了一个虚拟磁盘 SDK,请参见此处,它可能包含在您的 buzild 进程中。
不同的想法:也许您的测试计算机可以设置为写入共享网络文件夹(即已满)作为驱动器挂载?
创建一个新的用户帐户,为其设置配额,并使用 runas 以该用户身份运行您的应用程序。(与磁盘已满不完全相同,但应该有类似的后果。)
操作系统对其系统驱动器填充的响应与对其他驱动器填充的响应不同,因此您的应用程序肯定也会这样做吗?无论使用什么物理介质,简单地填充驱动器都不是准确的测试。
您不能模拟完整磁盘的文件系统事件吗?为什么要等到磁盘已满?您不想定期监控磁盘空间并在磁盘有一定百分比的填充余量时警告用户吗?与其等到磁盘空间耗尽,不如简单地阻止您的应用程序工作,直到问题得到解决,否则可能会影响任何数据 IO 并且无法恢复!
如果测试必须是硬集成测试,那么自动化虚拟机、部署应用程序然后用递归脚本填充剩余空间是可行的。
我已经对上面的脚本进行了修改,使其与 Windows 7 兼容......基本上将开关“/-c”添加到 for 语句中。这将删除千位分隔符,因为 fsutil 在语句中不喜欢它。
for /f "usebackq tokens=1-5" %%A in (`dir /-c d:\ ^| find "bytes free"`) do (set FREE_SPACE=%%C)
fsutil file createnew d:\largefile.txt %FREE_SPACE%
使用非常小的 iSCSI 目标