软件测试中的压力测试
发表于: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