如何编写有效测试用例

转载

如何编写有效测试用例

测试用例,是一份关于具体测试步骤的文档,它描述了测试的输入参数、条件及配置、预期的输出结果等,以判断被测软件的工作是否正常。

设计、书写和执行测试案例是测试活动中重要的组成部分,测试案例通常由测试案例管理系统或工具进行管理。

一、编写测试用例的原则

测试用例的重要性是毋庸置疑的,它是软件测试全部过程的核心,是测试执行环节的基本依据。测试用例编写应该遵循的原则:

  1. 测试用例要达到最大覆盖软件系统的功能点。
  2. 测试用例对测试功能点、测试条件、测试步骤、输入值和预期结果应该有准确的定义。
  3. 测试用例的设计应包括各种类型的测试用例。在设计测试用例的时候,除了满足系统基本功能需求外,还应该考虑各种异常情况、边界情况和承受压力的能力等。
  4. 测试用例的管理。使用测试用例管理系统对测试用例进行管理。

特性:

一个好的测试用例应该具有较高的发现某个尚未发现的错误的可能性,而一个成功的测试案例能够发现某个尚未发现的错误,通常一个好的测试案例有以下特性:

  1. 具有高的发现错误的概率
  2. 没有冗余测试和冗余的步骤
  3. 测试是 “最佳类别”
  4. 既不太简单也不太复杂
  5. 案例是可重用和易于跟踪的
  6. 确保系统能够满足功能需求

测试用例不可能设计得天衣无缝,也不可能完全满足软件需求的覆盖率,测试执行过程里肯定会发现有些测试路径或数据在用例里没有体现,那么事后该将其补充到用例库里,以方便他人和后续版本的测试。

二、如何编写测试用例

测试用例的信息有很多,可以根据实际的情况进行增删,一般来说一个优秀的测试用例应该包含以下信息:

1.产品相关信息

  1. 软件产品或项目的名称
  2. 软件产品或项目的版本
  3. 功能模块名
  4. 功能描述
  5. 测试平台这些信息建议可以在测试案例手工选择。

2.基本记录信息

  1. 测试用例入库者
  2. 测试用例入库时间
  3. 测试用例更新者
  4. 测试用例更新时间

这些信息建议可以由测试案例自动生成。

3.测试用例的属性

  1. 测试用例ID:测试用例的ID(由案例管理系统自动生成,方便跟踪管理)
  2. 测试用例名称:测试用例的名称
  3. 测试功能点:测试的功能检查点
  4. 测试目的:该测试功能点的测试目的
  5. 测试级别:主路径测试、烟雾测试、基本功能测试、详细功能测试。

测试级别进行说明:

  • 主路径测试:对照需求中重要模块和功能的最主要功能路径,主路径测试为设计探针模块,快速检查程序的可测试性(可测试性还包括安装测试是否成功)的主要依据的测试案例
  • 烟雾测试:对照需求中所有模块的主要功能路径,主路径测试案例为烟雾测试案例的子集,烟雾测试为做回归测试的主要依据的测试案例。
  • 基本功能测试:对照需求和总体设计中所有模块和功能的基本功能路径,基本功能测试为测试软件产品的非重要级别模块,书写完全的自动测试脚本的主要依据。
  • 详细功能测试:对照总体设计中所有模块和功能的功能路径,测试各个模块及功能各个层次,各种类型。详细功能测试案例为对重点模块,易发生错误的模块的主要依据

6.测试类型:功能测试、边界测试、异常测试、性能测试、压力测试、兼容测试、安全测试、恢复测试、安装测试、界面测试、启动/停止 测试、文档测试、配置测试、可靠性测试、易用性测试、多语言测试。
7.预置条件:对测试的特殊条件或配置进行说明
8.测试步骤:详细描述测试过程,案例的操作步骤建议少于15个。
9.预期结果:预期的测试结果

实例说明

例如:假设目前测试中国移动互联短信网关是否能正确发送短信给中国联通互联网关,测试用例的设计如下:
(1)测试用例ID:TC000001
(2)测试用例名称:中国移动全球通手机用户成功发送短信给中国联通手机用户
(3)测试功能点:中国移动全球通手机用户成功短信给中国联通手机用户,中国联通网关返回成功的状态报告
(4)测试目的:
A、中国移动互联短信网关能否正确处理全球通用户发送给中国联通用户的短信;
B、中国移动互联短信网关能否正确处理中国联通互联短信网关返回成功的状态报告的情况。
(5)测试级别:基本功能测试
(6)测试类型:功能测试
(7)预置条件:各网关实体按照组网图中的关系连接好,各实体之间的连接和通信正常。
(8)测试步骤:
A、中国移动全球通手机用户(13901000001)给中国联通手机用户(13001000001)发送MO短信,内容为“测试”,目的号码填为中国联通手机号码;
B、中国联通互联短信网关把短信下发给中国联通用户成功后,给中国移动互联短信网关返回一个标识成功的状态报告。
(9)预期结果:
A、中国联通手机用户(13001000001)接收到了短信,内容为“测试”,源号码为中国移动全球通的用户号码(13901000001);
B、在中国移动互联短信网关上产生SMO话单,其中“短消息发送状态”填0(表示成功),“源手机号码”13001000001,“目的手机号码”为13001000001。

三、测试案例的模版

下面是一个完整的测试用例的模版:

四.测试用例设计过程

对一个全新的产品来说,首先需要了解的是产品需求文档和产品模块之间的关系。然后需要从需求文档中书写与所有需求相对应的主路径测试案例和烟雾测试案例,
这个时候也同时会包括一定的基本路径测试案例甚至是详细测试案例。在这个时候,因为对产品没有直接的使用感受,书写测试案例要考虑面广而不要太过精细。继
续阅读产品功能定义文档,将所有的功能定义直接对应写相关的测试案例,这个时候,最好能够对程序的本身有一定的接触,加深对程序的了解,以便写出更好,更
全面的测试案例。最后,在实际测试中,还需要不断扩充,修改以前的测试案例,得到完整的基本功能测试案例和详细测试案例。如果对于一个已有一定或大部分案
例的产品来说,不管测试者是否本身熟悉这个产品,其主要的任务就是阅读,检查需求及相关的变更,然后对原有的案例进行理解,扩充和修改。这就是案例的重用
/复用。设计测试案例的时候,需要有清晰的测试思路,对要测试什么,按照什么顺序测试,覆盖哪些需求做到心中有数。测试用例编写者不仅要掌握软件测试的技
术和流程,而且要对被测软件的设计、功能规格说明、用户试用场景以及程序/模块的结构都有比较透彻的理解。

测试用例设计一般包括以下几个步骤:
1、测试需求分析从软件需求文档中,找出待测试软件/模块的需求,通过自己的分析、理解,整理成为测试需求,清楚被测试对象具有哪些功能。测试需求的特点是:包含软件需求,具有可测试性。

测试需求应该在软件需求基础上进行归纳、分类或细分,方便测试用例设计。测试用例中的测试集与测试需求的关系是多对一的关系,即一个或多个测试用例集对应一个测试需求。
2、业务流程分析软件测试,不单纯是基于功能的黑盒测试,还需要对软件的内部处理逻辑进行测试。为了不遗漏测试点,需要清楚的了解软件产品的业务流程。建
议在做复杂的测试用例设计前,先画出软件的业务流程。如果设计文档中已经有业务流程设计,可以从测试角度对现有流程进行补充。如果无法从设计中得到业务流
程,测试工程师应通过阅读设计文档,与开发人员交流,最终画出业务流程图。业务流程图可以帮助理解软件的处理逻辑和数据流向,从而指导测试用例的设计。

从业务流程上,应得到以下信息:

A、主流程是什么
B、条件备选流程是什么
C、数据流向是什么
D、关键的判断条件是什么
3、测试用例设计
完成了测试需求分析和软件流程分析后,开始着手设计测试用例。测试用例设计的类型包括功能测试,边

界测试,异常测试,性能测试,压力测试等。在用例设计中,除了功能测试用例外,应尽量考虑边界、异

常、性能的情况,以便发现更多的隐藏问题。

黑盒测试的测试用例设计方法有:等价类划分、边界值划分、因果图分析和错误猜测,白盒测试的测试用

例设计方法有:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、多重条件覆盖。在这里主要讨论黑盒测

试。在设计测试用例的时候可以使用软件测试用例设计方法,结合前面的需求分析和软件流程分析进行设

计:

功能测试:测试某个功能是否满足需求的定义,功能是否正确,完备。

适合的技术:由业务需求和设计说明导出的功能测试、等价类划分

边界测试:对某个功能的边界情况进行测试。

适合的技术:边界值划分

异常测试:对某些功能来说,其边界情况无法简单的了解或某些操作不完全是正确的但又是可能发生的,

类似这样的情况需要书写相关的异常测试。

适合的技术:由业务需求和设计说明导出的特殊业务流程、错误猜测法、边界值分析、内部边界值测试、

性能测试:检查系统是否满足在需求中所规定达到的性能,性能主要包括了解程序的内外部性能因素。内部性能因素包括测试环境的配置,系统资源使用状况;外部因素包括响应时间,吞吐量等。

适合的技术:业务需求和设计说明导出的测试

压力测试:压力测试又称强度测试,主要是检查系统运行环境在极限情况下软件运行的能力,比如说给一个相当大的负荷或网络流量给应用软件兼容测试:测试软件产品在不同的平台,不同的工具,相同工具的不同版本下功能的兼容性。

4、测试用例评审

测试用例设计完成后,为了确认测试过程和方法是否正确,是否有遗漏的测试点,需要进行测试用例的评审。

测试用例评审一般是由测试leader安排,参加的人员包括:测试用例设计者、测试leader、项目经理、开发工程师、其它相关开发测试工程师。测试用例评审完毕,测试工程师根据评审结果,对测试用例进行修改,并记录修改日志。

5、测试用例更新完善

测试用例编写完成之后需要不断完善,软件产品新增功能或更新需求后,测试用例必须配套修改更新;在测试过程中发现设计测试用例时考虑不周,需要对测试用例
进行修改完善;在软件交付使用后客户反馈的软件缺陷,而缺陷又是因测试用例存在漏洞造成,也需要对测试用例进行完善。一般小的修改完善可在原测试用例文档
上修改,但文档要有更改记录。软件的版本升级更新,测试用例一般也应随之编制升级更新版本。测试用例是“活”的,在软件的生命周期中不断更新与完善。

时间: 2024-10-11 04:38:51

如何编写有效测试用例的相关文章

Jasmine 编写 JavaScript 测试用例

1,下载Jasmine 包,主要包括如下三个文件: 1>,jasmine-html.js,jasmine.css,jasmine.js 2>,编写测试用例,代码如下: describe("Examples of Jasmine suite", function() { //List 1 describe("This is an exmaple suite", function() { it("contains spec with an expe

最完整的自动化测试流程:Python编写执行测试用例及定时自动发送最新测试报告邮件

今天笔者就要归纳总结下一整套测试流程,从无到有,实现零突破,包括如何编写测试用例,定时执行测试用例,查找最新生成的测试报告文件,自动发送最新测试报告邮件,一整套完整的测试流程.以后各位只要着重如何编写测试用例即可,其他模板可以套用的,希望帮助到大家. 目录 一.编写测试用例 二.执行测试用例,查找最新测试用例,自动发送测试报告 三.定时执行测试用例 3.1方案一:Windows任务计划 3.2方案二:Jenkins持续集成 四.成果验收 环境准备: 操作系统:Windows7 集成开发环境:ec

Selenium 2自动化测试实战34(编写Web测试用例)

编写Web测试用例 1.介绍了unittest单元测试框架,其主要是来运行Web自动化测试脚本.简单的规划一下测试目录:web_demo1/------test_case/------------test_baidu.py------------test_google.py------report/------------login.txt------runtest.py目录结构如下图所示: 创建web测试用例. #test_baidu.py #coding:utf-8 from seleniu

29. 使用参数化编写自动化测试用例

通过上面代码我们发现,我们调的都是登录的接口,只是传参不一样,这么写容易造成代码量过多,所以我们可以使用参数化编写测试用例,参数化我们可以使用parameterized模块,关于更多可parameterized使用方法,可访问parameterized官网,优化后的代码如下(我们更新了用户,用户名admin,密码123456): # -*- coding: utf-8 -*- import requests import unittest from parameterized import pa

2、编写单元测试用例,对用户注册功能的DAO层进行测试。(注意:测试用例应考虑成功和失败的情况)

我先对我做的测试进行说明: 对用户注册功能的DAO层进行测试,其实就是对UserDao中的saveUser(User user) 方法进行测试.我在我的测试方法中同时也用到了UserDao中的exitUser(String username)方法进行了测试.     /** * 测试用户注册(成功) */ @Test public void testUserReg(){ User user= new User(); user.setUsername("3137102332_罗文恺");

编写leetcode测试用例时所用的辅助函数

在做leetcode题目(https://oj.leetcode.com/problemset/algorithms/)的时候,我们总要自己写测试用例,常常要生成vector, list, tree,我将这些常用操作封装了一下,方便大家使用 tool.h //tool.h #ifndef TOOL_H_ #define TOOL_H_ #include <iostream> #include <vector> #include <cstdarg> #include &l

以下题目均在bookstore项目上完成(请先运行数据库文件): 1、编写单元测试用例,对用户注册功能的Action层进行测试。(注意:测试用例应考虑成功和失败的情况)

首先,我想说明一下,用户注册时候action中的方法不做任何判断都可以注册,什么都没有考虑,即使全部为空,他都能注册成功.如果还要写测试用例的话,按照我的步骤,在 UserAction中的register()方法中加入一些判断,并在jsp页面中给出相应的提示,由于漏洞实在太多了,我就只写了一个判断——如果用户名为一个空格的时候,注册失败.还有很多测试用例,还有很多漏洞可以测试,我举一个例子:   第一步,在action代码中,将register()方法中加入一个判断: //用户注册,调用serv

Python编写Appium测试用例(2)

#coding=utf-8import os,sysimport unittestfrom appium import webdriverimport timefrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as EC # Retur

实验七 Web应用测试_编写单元测试用例,对用户注册功能的DAO层进行测试

package testRegister; import java.util.HashSet; import junit.framework.Assert; import org.easybooks.bookstore.dao.IUserDAO; import org.easybooks.bookstore.vo.User; import org.springframework.test.AbstractDependencyInjectionSpringContextTests; public