如何在Windows环境中模拟磁盘已满错误?

时间:2009-02-09 15:20:07

标签: windows automated-tests batch-file

我必须为测试场景编写一个bat脚本,由于磁盘已满,我们测试的软件无法写入文件。测试脚本必须是自动化的,以便我们可以在夜间测试中运行它。测试脚本也必须在不同的计算机上运行,​​因此在这种情况下安装像虚拟机这样的软件不是最好的解决方案。

如何在Windows环境中模拟该错误?

12 个答案:

答案 0 :(得分:12)

您可以尝试写入完整的软盘。

修改

根据您编辑的问题,您可以设置没有磁盘空间配额的网络共享并写入。无论登录用户或计算机如何,都会产生错误。

答案 1 :(得分:11)

对于Windows XP或更高版本:

此命令可以获取c:\ drive的可用空间量:

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个字节后,你应该用完空间。

答案 2 :(得分:10)

下载并安装TrueCrypt。然后,您可以创建任何大小的虚拟分区(几兆字节),安装它,然后用几个文档填充它。

答案 3 :(得分:7)

它可能看起来有点多,但我能想到的一件事是使用虚拟机,并将其虚拟磁盘设置得足够大以适应操作系统。填充一些垃圾文件,将其翻到边缘,然后运行程序。

答案 4 :(得分:7)

最佳选择:微软的消费计划

原因:

  • 测试系统磁盘(与单独的驱动器对比)
  • 快速 - 运行程序立即填充磁盘 ,不再需要时停止
  • 很简单 - 不创建和删除文件。没有额外的测试分区。需要安装,但之后可以使用简单的命令。
  • 可编写脚本

步骤:

  1. 安装Windows Server 2003 Resource Kit Tools(在Windows 7上正常工作)
  2. cd "%ProgramFiles(x86)%\Windows Resource Kits\Tools"(或安装时)
  3. consume.exe -disk-space
  4. 命令输出:

    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 ...
    

    其他选项:

    • Windows 7有一个virtual hard drive feature。基本上做以下事项:计算机管理>磁盘管理>动作菜单>创建VHD>右键单击磁盘并初始化>右键单击
    • 使用shell命令或Dummy File Generator程序生成大文件(应该是即时的),直到磁盘已满。另一个原则:SpaceHog

答案 5 :(得分:5)

创建一个辅助分区,用垃圾填充它,然后在那里运行你的程序。

答案 6 :(得分:4)

你可以设置一个小的ramdisk并写入。请参阅此页面了解一些free ramdisk products

答案 7 :(得分:2)

适用于每台计算机的最佳功能(因为测试不是在专用计算机上进行的)将是一个可以即时设置的ramdrive / ramdisk。

到目前为止只找到了一个虚拟磁盘SDK see here,它可能包含在你的buzild进程中。

不同的想法:也许您的测试计算机可以设置为写入共享网络文件夹(即已满)作为驱动器安装?

答案 8 :(得分:2)

创建新用户帐户,为其设置配额,并使用runas以该用户身份运行您的应用。 (与磁盘已满不完全相同,但应该有类似的后果。)

答案 9 :(得分:2)

操作系统对其系统驱​​动器填充的响应不同于对其他驱动器填充的响应,因此您的应用程序也会这样做,当然?无论使用何种物理介质,简单地填充驱动器都不是一个准确的测试。

无法为完整磁盘模拟文件系统事件吗?为什么要等到磁盘已满?您不想定期监视磁盘空间并在磁盘填充百分比时警告用户吗?而不是等到磁盘空间终端只是阻止您的应用程序工作,直到问题得到解决,不这样做可能会影响任何数据IO并且无法恢复!

如果测试进行硬集成测试,则自动化虚拟机,部署应用程序然后使用递归脚本填充剩余空间是可行的。

答案 10 :(得分:2)

我对上面的脚本进行了修改,使其与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%

答案 11 :(得分:1)

使用非常小的iscsi目标