软件测试中的压力测试

发表于:2009-05-05来源:作者:点击数: 标签:软件测试压力
压力测试 是一种基本的 质量保证 行为,它是每个重要 软件测试 工作的一部分。压力测试的基本思路很简单:不是在常规条件下运行手动或 自动测试 ,而是在计算机数量较少或系统资源匮乏的条件下运行测试。通常要进行压力测试的资源包括内部内存、CPU 可用性、
   压力测试是一种基本的质量保证行为,它是每个重要软件测试工作的一部分。压力测试的基本思路很简单:不是在常规条件下运行手动或自动测试,而是在计算机数量较少或系统资源匮乏的条件下运行测试。通常要进行压力测试的资源包括内部内存、CPU 可用性、磁盘空间和网络带宽。要减少用于测试的资源,可运行一个称为压力器 (stressor) 的工具。

        图 1 中的图像显示一种运行中的压力工具 EatMem。命名压力器时通常使用"Eat"前缀,后跟要使用的资源类型,因此减少内存、磁盘空间和降低 CPU 可用性的压力器可分别命名为 EatMem、EatDisk 和 EatCpu。EatMem 压力器是一个命令行程序,它接受一个指定运行时长的参数(以分为单位)。EatMem 大约每三秒钟尝试分配随机数量的可用内存。正如您在图 1 中看到的,内存请求可能失败。在这种情况下,EatMem 会一直尝试分配内存,直到成功为止。当然,该压力器工具自身并不执行任何实际测试;它只是准备一个进行测试的计算机状态。通过在测试实际程序的同时运行该程序,您可为应用程序模拟在常规测试环境中很难进行测试的条件。

图 1 运行中的 EatMem 压力器

    整体程序结构

        EatMem 压力器工具(用 C# 编写)的整体结构如图 2 所示。首先,我将一个 using 语句添加到 InteropServices 命名空间,这样就可以调用本机 Win32® 函数。特别地,我调用 GlobalAlloc 和 GlobalFree 函数来分配和释放内存,并调用 GlobalMemoryStatus 函数确定分配多少内存。我还使用了一些 Win32 API 函数来操作控制台文本的颜色。

Figure 2 EatMem Program Structure
using System;
using System.Runtime.InteropServices;

namespace EatMem
{
  class Class1
  {
    [DllImport("kernel32.dll")]
    extern static IntPtr GlobalAlloc(uint uFlags, uint dwBytes);

    [DllImport("kernel32.dll")]
    extern static IntPtr GlobalFree(IntPtr hMem);
   
    [DllImport("kernel32.dll")]
    extern static void GlobalMemoryStatus(ref MEMORYSTATUS lpBuffer);
   
    public struct MEMORYSTATUS
    {
      public  uint dwLength;
      public  uint dwMemoryLoad;
      public  uint dwTotalPhys;
      public  uint dwAvailPhys;
      public  uint dwTotalPageFile;
      public  uint dwAvailPageFile;
      public  uint dwTotalVirtual;
      public  uint dwAvailVirtual;
    }

    static MEMORYSTATUS memStatusBuffer = new MEMORYSTATUS();
   
    [STAThread]
    static void Main(string[] args)

原文转自:http://www.ltesting.net