内容


更环保地测试软件

Comments

简介

有两种软件测试方法:黑箱测试和白箱测试,它们旨在使产品符合功能需求规范(Functional Requirement Specification,FRS)和系统需求规范(System Requirement Specifications,SRS)。SRS 包含要开发的软件的所有功能的完整描述和行为。FRS 包含针对每项软件功能的输入的预期输出。

在白箱测试中,测试工程师能够访问内部数据结构和算法。

黑箱测试将软件看作一个 “黑箱”,测试工程师没有关于内部实现的知识,他们以将使用该产品的客户身份在软件上执行测试。系统测试是一种黑箱测试方法,由一个完整、紧密集成的系统执行,以在 FRS 和 SRS 上下文中判断软件的遵从性。在产品测试期间应该考虑的不同测试类型包括:

  • 安装测试
  • 构建验证测试
  • 功能验证测试
  • 实用性测试
  • GUI 软件测试
  • 安全性测试
  • 负载测试
  • 压力测试
  • 性能测试
  • 可伸缩性测试
  • 回归测试

每种测试方法确定软件产品在不同功能区域的质量。

虚拟化是一种增强系统完成任务的能力的现代化方法。可以在计算领域的多个区域采用虚拟化,比如硬件虚拟化、操作系统虚拟化、网络和存储虚拟化、表示虚拟化以及应用程序虚拟化。操作系统级的虚拟化是一种服务器虚拟化方法,在这种方法中,操作系统的内核支持多个相互隔离的用户空间实例。从最终用户的角度看,每个实例的观感与实际的服务器类似。每个实例都是相互隔离的,内核通常提供资源管理特性来限制供每个实例使用的资源。本文介绍如何在不同的测试类型中采用操作系统虚拟化方法,进而最小化对硬件、软件和测试工程师等资源的利用。

软件测试类型

以下是在软件产品测试阶段将执行的一些测试示例

安装测试

在此测试中,测试工程师安装和设置软件。测试流程可能包括完整、部分安装/删除产品,或升级产品的安装和删除。最简单的安装方法是运行安装程序(有时候称为打包软件)。测试工程师应该在每种安装模式下执行每种可能的配置,应该得到较好的测试质量,以便能够自信地将软件发布给客户。

构建验证测试 (BVT)

此测试包括对产品的基本功能测试,用于确保开发团队在特定构建版本中所做的代码更改不会影响产品中任何已存在的特性,或者使任何特性退化。如果成功通过此测试并且构建版本通过验证,就可以用其他测试方法来测试产品功能了。作为全球化的一部分,将在具有可用的软件支持的地区执行 BVT。

功能验证测试 (FVT)

此测试用于检查产品是否符合其功能规范。作为 FVT 的一部分,要针对产品的所有受支持特性来测试其功能,然后验证产品的系统测试就绪程度。

在全球化验证测试 (GVT) 中,同样要在所有受支持地区执行 FVT,以确保产品功能的一致性。

GUI 软件测试

GUI 测试用于测试支持图形用户界面的软件,确保软件满足 FRS 中要求的规范。大部分产品都会使用 GUI 来向客户端交付系统功能。测试设计人员必须让测试套件涵盖具有 GUI 的产品的所有功能,还必须确保测试套件能够全面测试 GUI 提供的附加功能。也需要在所有支持地区执行 GUI 测试,并且测试工程师需要验证针对不同地区、GUI 中的不同对象定义的标准。

负载测试

在负载测试中,多个用户同时访问程序,以模拟预期的软件程序使用情况。要模拟负载,可以使用从供应商获得的软件。当许多用户同时访问应用程序或产品时,这些测试类型的 CPU 使用率、网络或磁盘 I/O 操作以及磁盘空间需求都比较大。

压力测试

压力测试注重于产品在较大负载下的健壮性、可用性和错误处理效率。这些测试的主要目的是确保软件在计算资源(比如内存或磁盘空间)不足的情况下不会崩溃。它还会在超出正常操作容量的情况下进行测试,以确定产品的稳定性。在较大负载条件下测试产品时,无法在服务器上执行其他测试。

回归测试

此测试揭示软件回归。当为了新的测试运行而使以前能够正常工作的功能停止工作时,就认为发生了回归。通常,回归表现为执行故障修复期间执行程序更改得到的意外结果。回归测试包括重新运行以前的测试和检查以前修复的问题是否再次发生。回归测试用于确定产品的正确性和质量。

这里讨论的不同测试类型需要不同的环境来运行测试。一些测试类型需要较少的 CPU 和磁盘空间,而另一些测试类型需要较高的 CPU 使用率、I/O 操作和磁盘使用率。所以,特定测试类型的资源利用率取决于在该测试类型中执行的测试序列。由于依赖关系的原因,不可能对所有测试类型都采用操作系统虚拟化。以下各节介绍如何选择测试区域。

选择测试区域

以下一般性问题有助于确定要使用操作系统虚拟化技术来最小化系统和人力资源的测试区域。

选择测试类型的一般性问题:

  • 需要分配多少 CPU 和内存资源?
  • 执行测试需要运行多少个进程?
  • 运行测试需要多少虚拟内存?
  • 测试是否需要物理设备?
  • 测试是否需要在运行时修改内核参数?
  • 测试是否将访问原始或路由套接字?
  • 测试是否需要挂载/卸载文件系统?

在操作系统虚拟化实例内部,无法执行挂载文件系统、向原始套接字读/写数据、动态更改内核参数等实用操作。文件系统挂载既可以在全局系统环境中执行,也可以在特定 OS 实例中执行。虚拟 OS 实例可以正常访问挂载的文件系统,但是无法直接从 OS 实例挂载文件系统。类似地,也无法从虚拟实例中访问物理设备。尽管可以通过从全局环境导出这些设备来进行访问,但这不适用于不支持导出设备的应用程序。因此,要基于测试类型所需的资源来对产品测试采用虚拟操作系统技术。

要考虑的示例测试区域

前面已经讨论过,产品测试包括多种测试类型,每种测试类型都需要不同的硬件、软件和网络资源。例如,在负载测试、压力测试和性能测试中,产品在较高的负载中进行测试,每种测试都使用相同的系统资源。因此,这些测试不应该在相同的物理服务器上同时运行。如果这些测试在一个物理服务器上的不同虚拟化实例上运行,您需要谨慎配置系统来为这些经过了操作系统虚拟化的系统分配资源。负载测试需要较多的资源,所有资源都来自同一个物理服务器,所以这些基准测试不应该在经过了操作系统虚拟化的系统上执行。

对于安装测试、构建验证测试、全球化验证测试和 GUI 软件测试,您可以使用操作系统虚拟实例。在安装测试中,产品在所有受支持的安装模式下进行测试。大部分时间,安装测试都在一个新安装的操作环境中执行。安装产品之后,产品将在系统环境中添加一组配置。即使在测试之后删除了产品,一些环境也仍将保留在系统中。相同机器上的后续安装将使用现有配置。这有时将隐藏可在新安装的操作系统环境中发现的安装问题。但是从实际角度看,不可能让每个安装测试场景都在新安装的操作系统环境中执行,因为每种测试都会在服务器中包含额外的操作系统和第三方必要软件设置。作为全球化的一部分,安装测试应该在所有受支持的地区执行。因此,需要的计算机数量将更多。操作系统虚拟化技术有助于执行安装测试。一旦在物理服务器中安装了操作系统和其他去第三方必备软件,您就可以创建任意多个虚拟操作系统实例,并且所有这些实例都将拥有与全局物理系统相同的系统操作环境。只需要较少的时间就可以创建这些虚拟实例。

表 1. 传统方法中涉及的不同测试区域
测试类型需要的服务器数量管理工作测试工作
安装测试24x12x
BVT24x 12x
FVT36x24x
GUI 测试24x12x

表 1 列出了不同的测试区域,它们的服务器使用率,操作系统、软件设置所需的管理工作,以及配置和执行测试案例所需的测试工作,其中 x 为时间单位。

大多数产品都至少支持 3 种安装模式,比如 GUI、控制台和静默安装。对于安装测试,如果产品在所有模式下针对所有受支持地区进行了测试(假设产品支持 10 个地区),那么安装必须在 30 种不同配置下进行测试。类似地,BVT/FVT 需要在所有地区运行,以验证产品功能。通过使用操作系统虚拟化技术,管理和测试工作显著减少,如表 2 所示。管理工作随着使用的服务器数量和测试工作的减少而减少,因为操作系统虚拟实例包含安装在全局系统中的所有软件。因此,无需在每个实例中安装从供应商获得的产品。这还节省了能源,减少了释放的热量,从而减少了冷却系统所需的投资。

表 2. 不同测试区域在使用 OS 虚拟化方法时需要的工作
测试类型无需服务器管理工作测试工作
安装测试12x8x
BVT1 2x 8x
FVT13x12x
GUI 测试12x4x

使用虚拟化方法的另一个测试区域是 GVT。作为 GVT 的一部分,应该在所有受支持地区执行 BVT 和 FVT。如果产品安装在一个全局物理系统中,并且在系统内部创建了虚拟实例,那么无需在每个实例中安装产品。只需要进行一些额外的配置来执行测试套件。如果全局系统中的产品映像更新了,那么更新会立即传播到所有虚拟实例中,从而减少了测试工作。

操作系统级虚拟化技术

可以在不同的级别进行虚拟化,而且根据使用情况的不同,每种虚拟化技术都具有不同的优势。对于产品测试,硬件和操作系统级虚拟化有助于减少需要的物理服务器数量和设置服务器所需的时间。在操作系统虚拟化中,将创建操作系统的相互隔离的不同实例,并且所有实例都共享系统中可用的物理资源,如图 1 所示。可以在创建实例时配置每个实例的最大资源使用量。本文讨论要在产品测试中使用的不同服务器虚拟化方法。

图 1. 操作系统虚拟化
图 1. 操作系统虚拟化
图 1. 操作系统虚拟化

有多种不同的操作系统虚拟化技术可供使用,比如 AIX® V6.1 工作负载分区(WPAR)和 Solaris 10 容器。

AIX 6.1 提供了一个 WPAR 实用程序,该程序提供了一种应用程序隔离的环境,并且能够控制应用程序资源。WPAR 监控在全局环境的特定 WPAR 上运行的进程。可以将不同的自动化测试脚本添加到 WPAR 的启动配置文件中。启动 WPAR 之后,将在不同的 WPAR 上同时执行所有自动化测试。如果需要,也可以在每个 WPAR 上执行手动测试。使用共享的系统 WPAR 配置,无需在每个 WPAR 上安装产品。测试套件将使用在全局环境中安装的产品来运行产品的测试的不同测试区域。一旦启动测试,全局环境可以监控被初始化的测试的状态日志。一些测试需要极少的系统资源,这些测试可以同时运行。这节省了资源,尤其是服务器和成本。

Solaris 容器支持单一操作系统实例中完全隔离的虚拟服务器,这些服务器成为专区(zone)。专区使用程序支持共享系统资源。每个专区充当一个独立系统。也可以在其他操作系统(比如 HP-UX、Linux 和 Windows)上使用类似的虚拟化技术。

AIX 6.1 中的 WPAR

AIX 6.1 支持两种类型的工作负载分区:应用程序 WPAR 和系统 WPAR。应用程序 WPAR 在一种隔离的资源环境中创建并启动应用程序,并在应用程序终止时将其自动删除。系统 WPAR 是一个完整的虚拟化操作系统环境,它运行多个服务器和应用程序。有两种不同类型的系统 WPAR:

  • 共享系统 WPAR
  • 非共享(私有)系统 WPAR.

每类系统 WPAR 都是一个完全隔离的操作环境。

共享系统 WPAR 使用安装在全局系统中的软件,私有 WPAR 支持将软件安装在 WPAR 内部。

  1. 创建一个 WPAR

    您可以执行以下步骤来创建系统 WPAR:

    1. 以根用户身份登录到 AIX 6.1 系统。注意,这适用于 WPAR 环境中的全局系统。
    2. 选择您想要创建的 WPAR 名称。
    3. 如果您想要在特定挂载点上挂载 WPAR 文件系统,请创建一个目录;否则,WPAR 默认使用 /wpars 目录。
    4. 如果您已创建了一个目录,那么将目录权限更改为 700(也就是 drwx------)。
    5. 将 WPAR 的 IP 地址添加到 /etc/hosts 文件中。

      例如:

      123.456.789.128 txwpar.domain_name txwpar # IP address of WPAR

      其中:

      123.456.789.128 是 WPAR 的 IP 地址。

      txwpar 是 WPAR 名称。

    6. 运行 mkwpar 命令来创建共享系统 WPAR,如图 2 所示。
    图 2. 创建共享系统 WPAR
    创建共享系统 WPAR
    创建共享系统 WPAR

    在如图 2 所示的示例中,txwpar 是 WPAR 名称。

    -r 用于将全局网络名称解析配置复制到工作负载中。它将复制以下内容:

    /etc/resolve.conf
    /etc/hosts
    /etc/netsvc.conf
    /etc/irs.conf
    /etc/networks   
    -N is network settings ( [-N attr=value ...] ) 
    address= 123.456.789.12 is the IP address 
    interface = en0

    要找到接口编号,运行 ifconfig -a 命令。例如:

    # ifconfig -a en0:
    flags=5e080863,c0<UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST,
    GROUPRT,64BIT,CHECKSUM_OFFLOAD(ACTIVE),PSEG,LARGESEND,CHAIN>
    inet 123.456.789.126 netmask 0xffffff00 broadcast 123.456.789.255
    tcp_sendspace 131072 tcp_recvspace 65536 
    netmask=255.255.255.0 is the netmask value

    对于非共享(私有)WPAR,您可以使用 -l 选项。这将创建一个私有、可写的 /usr 和 /opt 版本。

    成功创建之后,将显示一条成功消息,如图 3 所示。还会将网络配置更新为从外部访问 WPAR。

    图 3. 创建 WPAR
    创建 WPAR
    创建 WPAR
  2. 启动 WPAR:
    startwpar -v WPAR_name

    其中 -v 表示详细信息,-m 表示维护模式。成功启动 WPAR 之后,如图 4 所示,将返回状态 SUCCESS。

    图 4. 启动 WPAR 并检查 WPAR 状态
    启动 WPAR 并检查 WPAR 状态
    启动 WPAR 并检查 WPAR 状态
  3. 检查 WPAR 状态:

    在图 4 中,使用 lswpar 命令查看 WPAR 的运行状态,其中 S 表示 txwpar 是一个系统 WPAR,A 表示 txwpar 是活动的。

  4. 登录到 WPAR:
    clogin txwpar.
  5. 现在可以将 WPAR 用于测试了。

    由于它是一个共享系统 WPAR,所以它包含安装在全局系统中的所有软件。假设创建并配置了两个 WPAR:WPAR1 FVT 和 WPAR2 BVT,如图 5 所示。两个 WPAR 可以并行启动。一旦它检查并确保所有测试案例都在每个 WPAR 内部完成,它就可以开始下一个测试案例了。结果将写入 WPAR 内部的一个测试日志文件。在 AIX 6.0 系统上运行的应用程序将继续监控这些日志,并执行必要的步骤。对于 GVT,通过逐个设置地区,可以使用相同的 WPAR 来在不同地区运行 BVT 和 FVT。这节省了大量资源,比如服务器数量、每台服务器上不同产品的能源消耗、安装和配置、测试执行时间,以及服务器管理。

    图 5. 使用 WPAR 进行产品测试
    使用 WPAR 进行产品测试
    使用 WPAR 进行产品测试

Solaris 中的专区

Solaris 专区特性能够创建独立的操作系统环境,这些环境用于运行分配了专门的资源(比如 CPU 和内存)的应用程序。有两种专区类型,全局和非全局。启用了专区特性的服务器具有一个全局专区和至多 8191 个非全局专区。非全局专区包含在全局专区中安装的 Solaris 操作系统子集以及一些附加包。每个非全局专区完全隔离,具有自己的包数据库,并且不会与全局专区或其他非全局专区共享包信息。

  1. 要创建专区,您需要为每个专区配置一个 IP 地址。
    • 以管理员身份连接到 Solaris 10 系统。
    • 选择专区的名称。
      1. 使用 zonecfg 命令并执行图 6 中显示的步骤来创建一个专区。
        图 6. 创建 Solaris 专区
        创建 Solaris 专区
        创建 Solaris 专区
      2. 为创建的专区设置 IP 地址和物理网卡接口 ID,如 图 7 所示。通过发出 info 命令,可以获取关于专区的更多信息。
  2. 输入 ifconfig -a 命令来获取接口卡名称。
    图 7. 配置专区的网络接口
    配置专区的网络接口
    配置专区的网络接口
  3. 成功创建专区之后,安装专区。这会把全局专区中安装的不同软件复制到新创建的专区。安装专区所需的时间取决于全局专区中安装的包数量,如图 8 所示。安装专区之后,将显示以下输出:Successfully installed zone <zone name> "
    图 8. 创建专区之后安装它
    创建专区之后安装它
    创建专区之后安装它
  4. 现在您回到了正常的登录系统提示符位置。要检查专区状态,运行 zoneadm list -cv

    如果专区名称对应的 ID 列中的值为 “-”,则表示专区已创建并安装,但没有运行。运行 boot 命令启动专区,专区名对应的 ID 列将显示 “1”,如图 9 所示。

    图 9. 从全局专区列出所有专区
    从全局专区列出所有专区
    从全局专区列出所有专区
  5. 要向专区分配资源,从全局专区使用 zonecfg,然后为特定专区指定资源。如果创建多个专区,可以适当共享资源,如图 10 所示。在此示例中,zonecfg 将 40% 的 CPU 时间分配给了 txzone。
    图 10. 向专区分配资源
    向专区分配资源
    向专区分配资源
  6. 重启专区,使为特定专区分配的资源生效。从全局专区使用 prctl,也可以为全局专区限定 CPU 共享。以下示例限定全局专区可共享 60% 的 CPU 时间。
    prctl -r -n zone.cpu-shares -v 60 -i process $$.
    prctl -i zone global
  7. 创建专区并为其分配资源之后,连接到该专区来设置其他配置,比如设置密码、DNS 名称、IP 地址、地区等。使用 zlogin 命令连接到专区,如图 11 所示。登录到专区内部以后,全局专区将不可见。要验证这一点,可以使用 uname -a 命令。要从专区注销,输入 “~.” 命令。
    图 11. 登录到专区
    登录到专区
    登录到专区
  8. 现在专区已具有了需要的配置。新创建的专区与其他专区以及全局专区完全隔离。从最终用户的角度看,它就像是一个独立的 Solaris 系统。Solaris 专区对于产品安装测试、GVT 测试和资源管理器测试非常有用。
    图 12. Solaris 专区
    Solaris 专区
    Solaris 专区

    在图 12 中,在全局专区内配置了 3 个专区,为专区 1 和 2 分配了 15% 的 CPU 共享时间。对于专区 2,从全局专区分配了 25% 的 CPU 共享时间。所有这些专区(包括全局专区)都使用相同的内核来访问物理系统中可用的硬件。一些测试应用程序在专区 2 中运行,数据库服务器也在此专区中配置。安装在专区 1 和专区 3 中的数据库客户端将连接到专区 2,以执行基于数据库的测试应用程序。

结束语

采用虚拟化技术能够节省服务器数量、每台服务器上不同产品的安装和配置、测试执行时间以及人力等资源。它还能够节省维护服务器所需的管理工作。

在 AIX WPAR 上,即使一台服务器需要停机进行维护,也可以使用工作负载分区管理器,轻松地将 WPAR 从一台服务器移动到另一台服务器。

有了所有这些优势,虚拟化技术就能够推动测试环境向环保 IT 演化。


相关主题


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=AIX and UNIX
ArticleID=429901
ArticleTitle=更环保地测试软件
publish-date=09212009