内容梗概
- 简单介绍了常用的测试用例编写方法
- 编写测试用例需要考虑的各个角度
1. 编写测试用例时能够有效利用等价类、边界值的方法
2. 编写测试用例时能够从多角度比如:安全性、兼容性等设计测试用例
正文
作为测试工程师,大家设计测试用例的目标是保证系统在各种应用场景下的功能是符合设计要求,所以大家在设计测试用例的时候就需要保证用例覆盖尽可能的更多、更全面。以“用户登录”为例,一般在对输入框进行测试时,都能用到等价类和边界值的方法,这两个方法也是最常用、最典型的黑盒测试方法。
等价类与边界值的定义
等价类划分方法,是将所有可能的输入数据划分成若干个子集,在每个子集中,如果任意一个输入数据对于揭露程序中潜在错误都具有同等效果,那么这样的子集就构成了一个等价类。后续只要从每个等价类中任意选取一个值进行测试,就可以用少量具有代表性的测试输入取得较好的测试覆盖结果。
边界值分析方法,是选取输入、输出的边界值进行测试。因为通常大量的软件错误是发生在输入或输出范围的边界上,所以需要对边界值进行重点测试,通常选取正好等于、刚刚大于或刚刚小于边界的值作为测试数据。
等价类与边界值的方法“用户登录”测试用例
- 输入已注册的用户名和正确的密码,验证是否登录成功;
- 输入已注册的用户名和不正确的密码,验证是否登录失败,并且提示信息正确;
- 输入未注册的用户名和任意密码,验证是否登录失败,并且提示信息正确;
- 用户名和密码两者都为空,验证是否登录失败,并且提示信息正确;
- 用户名和密码两者之一为空,验证是否登录失败,并且提示信息正确;
- 如果登录功能启用了验证码功能,在用户名和密码正确的前提下,输入正确的验证码,验证是否登录成功;
- 如果登录功能启用了验证码功能,在用户名和密码正确的前提下,输入错误的验证码,验证是否登录失败,并且提示信息正确。
- 用户名和密码是否大小写敏感;
- 页面上的密码框是否加密显示;
- 是否可记住密码,记住的密码保存是否加密;
- 记住密码是否有有效期,过期之后是否会清空密码;
- 后台系统创建的用户第一次登录成功时,是否提示修改密码;
- 忘记用户名和忘记密码的功能是否可用;
- 修改完密码后是否会重定向到登录界面;
- 前端页面是否根据设计要求限制用户名和密码长度;
- 如果登录功能需要验证码,点击验证码图片是否可以更换验证码,更换后的验证码是否可用;
- 刷新页面是否会刷新验证码;
- 如果验证码具有时效性,需要分别验证时效内和时效外验证码的有效性;
- 用户登录成功但是会话超时后,继续操作是否会重定向到用户登录界面;
- 不同级别的用户,比如管理员用户和普通用户,登录系统后的权限是否正确;
- 页面默认焦点是否定位在用户名的输入框中;
- 快捷键Tab和Enter等,是否可以正常使用。
等等
上述测试用例只是在对软件的“显式功能”进行测试,作为一名高质量的测试工程师,其他的非功能性需求即隐式功能性需求也是极其关键的。
显式需求与隐式需求
显式需求 显式功能性需求(Functional requirement)的含义从字面上就可以很好地理解,指的是软件本身需要实现的具体功能, 比如“正常用户使用正确的用户名和密码可以成功登录”、“非注册用户无法登录”等,这都是属于典型的显式功能性需求描述。
隐式需求 从软件测试的维度来看,非功能性需求主要涉及安全性、性能以及兼容性三大方面。
安全性测试用例
- 用户密码在网络传输过程中是否加密;
- 密码是否具有有效期,密码有效期到期后,是否提示需要修改密码;
- 不登录的情况下,在浏览器中直接输入登录后的URL地址,验证是否会重新定向到用户登录界面;
- 密码输入框是否不支持复制和粘贴;
- 密码输入框内输入的密码是否都可以在页面源码模式下被查看;
- 用户名和密码的输入框中分别输入典型的“SQL注入攻击”字符串,验证系统的返回页面;
- 用户名和密码的输入框中分别输入典型的“XSS跨站脚本攻击”字符串,验证系统行为是否被篡改;
- 连续多次登录失败情况下,系统是否会阻止后续的尝试以应对暴力破解;
- 不同页面同时登录是否有一端被踢、本终端被踢下线后点击登录能否再次登录;
- 密码输入是否有最大次数限制,超过最大次数限制后,是否采取强制手段限制登录或对账号暂时冻结处理;
- 异地登录校验、更换设备登录校验、登录信息异常的情况
- 是否可以使用登录的API发送登录请求,并绕开验证码校验;
- 是否可用抓包工具抓到的请求包直接登录;
- 截取到的token等信息,是否可以再其它终端直接使用,绕开登录;
- token过期时间校验;
性能测试用例
- 单用户登录的响应时间是否小于3秒;
- 单用户登录时,后台请求数量是否过多;
- 高并发场景下用户登录的响应时间是否小于5秒;
- 高并发场景下服务端的监控指标是否符合预期;
- 高集合点并发场景下,是否存在资源死锁和不合理的资源等待;
- 长时间大量用户连续登录和登出,服务器端是否存在内存泄漏。
- 弱网延迟或切换网络或断网时登陆是否正常
兼容性测试用例
- 不同浏览器下,验证登录页面的显示以及功能正确性;
- 相同浏览器的不同版本下,验证登录页面的显示以及功能正确性;
- 不同移动设备终端的不同浏览器下,验证登录页面的显示以及功能正确性;
- 不同分辨率的界面下,验证登录页面的显示以及功能正确性;
- 移动端横屏竖屏切换时显示是否正常;
- 是否涉及第三方账号登录,能否正常调起不同版本第三方应用;
一般来说,测试用例很难穷尽,因此我们在编写测试用例的过程中需要从“场景”出发,有效的利用等价类、边界值的方法,尽可能多的对测试点进行覆盖。