对于单个逻辑功能,测试工程师需要关注其是否正确实现了需求定义的功能性需求,并需明确该需求是否确实应该在需求中体现。

 

例如,登陆功能,需关注其能否正确实现合法数据能够登陆,而非法数据拒绝登陆。商品查询功能中的排序功能,如果系统默认设计为降序排序,则需弄清楚用户是否有此需求,如果有,则验证该排序是否正确实现了默认降序功能。

 

贯穿于整个业务系统的逻辑功能,需保证其单个功能的正确性,然后才是整个业务流程的正确性测试。

 

【案例1 ECShop注册控件测试】

 

Web系统中,客户端通过Post等方式发送请求与服务器交互时,大部分是以表单的方式发送,如图1所示。

 

功能测试控件测试

图1 ECShop用户注册页面

 

图1是ECShop网站用户注册页面,用户填写相关数据信息后,使用Post方法提交请求至“user.php”逻辑处理页面进行注册操作。该表单上共有6个表单控件:用户名文本编辑框、email文本编辑框、密码文本编辑框、确认密码文本编辑框、复选框、注册按钮,其对应的页面源代码如下:

 

<form action="user.php" method="post" name="formUser" onsubmit="return register();">

      <table width="100%"  border="0" cellpadding="5" cellspacing="3">

        <tr>

          <td width="13%">用户名</td>

          <td width="87%">

          <input name="username" type="text" size="25" id="username" onblur="is_registered(this.value);"/>

            <span id="username_notice" style="color:#FF0000"> *</span>

          </td>

        </tr>

        <tr>

          <td>email</td>

          <td>

          <input name="email" type="text" size="25" id="email" onblur="checkEmail(this.value);" />

            <span id="email_notice" style="color:#FF0000"> *</span>

          </td>

        </tr>

        <tr>

          <td>密码</td>

          <td>

          <input name="password" type="password" id="password1" onblur="check_password(this.value);" onkeyup="checkIntensity(this.value)" style="width:179px;" />

            <span style="color:#FF0000" id="password_notice"> *</span>

          </td>

        </tr>

        <tr>

          <td>密码强度</td>

          <td>

            <table width="145" border="0" cellspacing="0" cellpadding="1">

              <tr>

                <td width="33%" id="pwd_lower">弱</td>

                <td width="33%" id="pwd_middle">中</td>

                <td width="33%" id="pwd_high">强</td>

              </tr>

            </table>

          </td>

        </tr>

        <tr>

          <td>确认密码</td>

          <td>

          <input name="confirm_password" type="password" id="conform_password" onblur="check_conform_password(this.value);"  style="width:179px;"/>

            <span style="color:#FF0000" id="conform_password_notice"> *</span>

          </td>

        </tr>

                      <tr>

          <td>&nbsp;</td>

          <td><label>

            <input name="agreement" type="checkbox" value="1" checked="checked" />

            我已看过并接受《<a href="article.php?cat_id=-1" style="color:blue" target="_blank">用户协议</a>》</label></td>

        </tr>

        <tr>

          <td>&nbsp;</td>

          <td>

          <input name="act" type="hidden" value="act_register" >

          <input type="hidden" name="back_act" value="" />

          <input name="Submit" type="submit" value="">

          </td>

        </tr>

        <tr>

          <td colspan="2">&nbsp;</td>

        </tr>

        <tr>

          <td>&nbsp;</td>

          <td>

          <a href="user.php?act=login">我已有账号,我要登陆</a><br />

          <a href="user.php?act=get_password">您忘记密码了吗?</a>

          </td>

        </tr>

      </table>

    </form>

 

常见的业务系统基本页面元素从用户角度考虑一般包含编辑框、按钮、图片/音频/视频、下拉列表、单选按钮、复选框、Flash插件等几种。

 

01

编辑框

 

 

需考虑其默认焦点、输入长度、输入内容类型(字母、汉字、特殊符号、脚本代码等)、输入格式限制、能否粘贴输入、能否删除文本等因素。例如,图5- 14中的“用户名”字段,测试时需考虑其用户名长度、组成、格式限制、是否重名等情况,测试用例设计时,可利用等价类、边界值方法详细设计。

 

图1假设是ECShop系统的DEMO原型图,测试工程师可根据该DEMO,提取需求,如表1所示。

功能测试控件测试

 

上表仅列出了DEMO中明确给出的显性需求,测试工程师在考虑显性需求的同时还应当关注被测对象的隐性需求,如“email”邮箱格式、“确认密码”应当与“密码”输入保持一致等。更新后的需求表如表2所示。

功能测试控件测试

 

通过类似的方法,测试工程师进行编辑框对象测试分析时,需明确每个输入框的限制条件,这样才能保证测试覆盖率,降低漏测风险。

 

02

 按钮

 

 

大部分Web系统都用常规按钮提交请求或实现功能跳转,也可能使用图片或其他控件实现按钮功能。对于按钮而言,一般需考虑其默认焦点、按钮视图、按钮功能、脚本触发等方面。

 

HTML中的按钮有三种属性:Button、Submit、Reset。

 

1) Button

 

Button本身不具备数据提交传递功能,如需实现提交功能,需绑定脚本,如点击某个按钮,出现新的界面。

 

<input   type="button"   value="弹出窗口"   onclick="window.open(’/test.hmtl’','_blank')">

 

被测对象如果包含此类button,测试工程师应当关注其实现方式是否正确,是否能够触发相关操作。

 

2)Submit

 

Submit是Button最常用的类型,当需将表单数据提交至服务器时,可利用Submit按钮,自动提交数据信息。需注意的是,如果代码中增加了输入验证类的JS脚本,提交数据时可能出现重复提交数据的缺陷。ECShop用户注册表单中的“立即注册”按钮使用的是“Submit”类型。

 

<input name="Submit" type="submit" value="">

 

3)Reset

 

当页面数据信息输入错误或需重新填写时,可使用Button的“Reset”属性。测试工程师测试此类按钮时需关注reset功能是否实现,并且光标位于第一个必填项。

 

除了Button类型需验证外,还需验证Button的文字描述及UI设计。

 

03

图片

 

 

图片在软件系统中应用非常广泛,用户往往因为某些精美的图片吸引他而选择使用软件系统,测试工程师测试实施时,需对系统中的图片进行测试,保证良好的用户体验。

 

图片测试包括图片内容、大小、显示、Alt属性、链接等几个方面。

 

1)内容

 

图片内容应该准确表述当前需表述的主题,如购物车示意图,一般使用类似图5- 15所示的样式表示,而不会用箱包、手提袋等形象,不恰当的示意图容易引起误解。

 

功能测试控件测试

图2 图片形象表示图

 

如果涉及颜色设计,一般也有特定的要求,需根据界面原型设计实现。同时,任何图片内容均不能违法。

 

每个人对色彩的理解不一样,应当根据原型设计进行验证,如果没有,测试工程师可根据自己的感觉判断,但提出带有主观性质的缺陷一般定义为最低级别。

 

2)大小

 

图片容量大小关乎页面响应性能,因此应适当降低图片容量大小,选择更便于网络传输的图片格式,如jpg、png等。

 

除了图片容量大小外,尺寸大小也应当考虑,不能造成整体界面显示变形,有任何违和感。

 

3)显示

 

图片显示更多关注于图片显示的清晰度、协调性,以ECShop中的商品图片为例,显示较为模糊,当然这个跟上传的商品图片质量有关,但如果系统设计了图片压缩功能,导致图片显示不清晰,则需提出缺陷。图3所示的图片显示较为模糊,不够清晰。

 

功能测试控件测试

图3 商品图片显示

 

4)Alt属性

 

有时候需对图片进行备注,尤其是图片作为菜单时,鼠标移动到该图片时,显示对应的菜单名称,测试工程师应当测试该alt属性表述是否正确,是否有错别字,字体设置是否正确。Alt属性示例如图4所示。

 

功能测试控件测试

图4 图片Alt属性示例

 

5)链接

 

Web系统设计时,有时候将图片作为链接进行页面跳转,也可能将图片作为按钮使用,测试时需验证是否实现了对应的功能。

 

04

音频

 

 

如果Web系统中引用了某些背景音乐时,需根据产品需求验证自动播放功能是否正常实现,音频文件是否正确,播放插件能否正常启用等。如果产品设计不允许用户下载音频文件,则测试工程师需进行音频链接安全性测试。

 

05

视频

 

 

与音频类似,视频除了测试播放控制、播放插件、链接安全性之外,还需考虑视频的压缩格式、数据缓冲情况。

 

06

下拉列表

 

 

下拉列表在多元化的数据信息展示传输过程中经常被用到,在测试过程中需关注其列表值是否正确,是否有重复,选中后能否正确传递、是否可以多选等方面。

 

功能测试控件测试

图5 添加商品分类界面

 

某些下拉列表中的数据来源于其他功能,测试时需考虑功能间的耦合及先后逻辑关系。

 

07

单选按钮

 

 

单选按钮在Web系统中非常常见,当需实现多选一功能时,一般会使用单选按钮。测试过程中需关注单选按钮是否有默认设置以及选中后能否保存数据。

 

功能测试控件测试

图6单选按钮功能

 

08

复选框

 

 

当需要选择多个数据时,需使用复选框。Web测试中需考虑多选后能否实现期望的业务功能,如批量设置、批量删除,能否在提交请求时,触发应该触发的脚本代码。

 

功能测试控件测试

图7 复选框功能

 

09

Flash插件

 

 

很多时候,为了实现更好的交互性,可能使用Flash插件或其他应用程序插件与用户进行交互,在此类元素的测试过程中需考虑其单独功能的实现情况,以及其与应用系统的接口能否正确传递参数,保证业务流程的正确性。

 

单个逻辑功能测试时,需考虑的因素较多,因此测试工程师在测试时需仔细认真,不能遗漏任何测试点,因为无法确切模拟最终用户的业务活动,仅能尽可能地模拟它们,降低系统发布后出错的可能性。