茹炳晟的《软件测试52讲》01讲使用“用户登录”测试的例子,讲述通过方法来设计测试用例。一个看似简单功能,不代表设计的测试用例也简单。下面看看作者怎么设计“用户登录”的测试用例。(PS:测试用例太多,摘记部分测试用例)
根据“用户登录”功能的需求说明,结合等价类划分和边界值方法来设计的测试用例。等价类划分和边界值方法是最常用、最典型的黑盒测试方法。设计测试用例如下:
- 输入已注册的用户和输入正确密码
- 输入已注册的用户和输入错误密码
- 输入错误的用户和输入正确密码
- 未注册的用户登录
- 用户名、密码为空能否登录
- 验证码是否起到验证作用
- 用户名和密码是否大写敏感
- 密码框是否加密显示
- 控制用户和密码长度、用户名和密码组成要求
- 用户登录成功超时后,继续操作能否会重定向到登录页面
…………
在这里为了举例子,就不一一列出测试用例,认真阅读“用户登录”需求文档和业务规则,还能设计出更多测试用例。
一个质量过关、用户体现好的软件系统,不仅需要显式功能性需求,还需要隐式功能性需求。
显式功能性需求(Funcational requirement)指的是软件本身需要实现的具体功能。上面列举测试用例按照显式功能性需求来设计。
隐式功能性需求(Non-Funcational requirement):从软件测试的维度来看,非功能性需求主要设计安全性、性能以及兼容性三大方面。这些是决定软件质量的关键因素。下面分别描述安全性测试用例、性能压力测试用例和兼容性测试用例。
用户登录安全性测试用例:
- 用户密码后台存储是否加密
- 用户在网络传输过程中是否加密
- 用户Session在有效期内是否会失效
- 用户名和密码输入框中分别输入“SQL注入攻击”字符串,验证系统的页面内容展示
- 用户名和密码的输入框中分别输入典型“XSS跨站脚本攻击”字符串,验证系统行为是否被篡改
- 知道其他用户的Id,能否查询其他用户信息。
……
用户登录性能压力测试用例:
- 单用户登录的响应时间是否小于3秒
- 但用户登录时,后台请求数量是否过多。
- 高并发场景下用户登录的响应时间是否小于5秒
- 高并发场景下服务端的监控指标是否符合预期
- 高集合点并发场景下,是否存在资源死锁和不合理的资源等待
- 长时间大量用户连续登录和登出,服务器端是否存在内存泄露。
用户登录兼容性测试用例:
- 不同浏览器下,验证登录页面的显示以及功能正确性。
- 相同浏览器的不同版本下,验证登录页面的显示以及功能正确性
- 不同移动设备终端的不同浏览器下,验证登录页面的显示以及功能正确性。
- 不同分辨率的界面下,验证登录页面的显示以及功能正确性。
思考1:测试一个功能、系统可以遵循作者思路来设计测试用例,从功能测试、安全性测试、性能压力测试、兼容性测试来思考。如果是web端测试,还需要增加用户界面测试。如果每次测试都从这些方面散发思考用例设计,能发现不一样缺陷。
上面列出测试用例,有部分功能点没有覆盖到,是有遗漏的,测试是不可穷尽。穷尽测试是指所有可能输入值组合的测试。
思考2:测试受到时间成本和经济成本限制,不可能采用穷尽测试,采用基于风险驱动的模式,有所侧重选择测试功能点和测试范围,进行等价类划分,抽样选出测试用例。在软件质量和测试成本找个平衡点。