工作已近7年。一直从事软件测试的工作,做过功能测试、自动化测试和性能测试。最后还是觉得用例设计是工程师核心能力之一。因为不管任何类型的测试,都会涉及用例设计。软件测试的目的是发现bug,保证软件按照需求描述那样工作,提高团队人员对软件发布的信心。那测试的依据是什么,就是测试用例。测试用例的表现形式有exel表格形式、思维导图形式。两种形式都有各自的优缺点,和适合的项目团队。具体会在下篇里面详细讲解。本文主要想对软件用例设计方法做下总结。
我接触的很多测试人员,不知道怎么设计用例,他们设计用例没有方法,只是觉得我需要测试这个情况,至于为什么需要测试这个情况,他们就回答不出来了。其实任何一个技能都是有方法论和理论做支撑的。比如测试一个输入框,要求长度是6到12位字母或者数字, 测试用例如下:
1. 输入为空
2. 输入1到5位数字
3. 输入1到5位小写字母
4. 输入1到5位大写字母
5. 输入6位小写字母
6. 输入6位大写字母
7. 输入6位数字
8. 输入6位,包含数字、大小写字母
9. 输入大于6位,小于12位,小写字母
10. 输入大于6位,小于12位,大写字母
11. 输入大于6位,小于12位,数字
12. 输入大于6位,小于12位,包含数字、大小写字母
13. 输入12位小写字母
14. 输入12位大写字母
15. 输入12位数字
16. 输入12位,包含数字、大小写字母
17. 输入大于12位,小写字母
18. 输入大于12位,大写字母
19. 输入大于12位,数字
20. 输入大于12位,包含数字、大小写字母
21. 输入6到12位中文
22. 输入6到12位,包括字母和字符
23. 输入6到12位,包括字母、数字和空格
24. 输入js
25. 输入html标记语言
一个输入框,需要测试25种情况,会不会让人疯了。这25种情况使用了测试人员都很熟悉的等价类法、边界值法。对这25种情况,测试数据如下:
a. 输入为空,满足1
b. 输入Aa812,满足2、3、4
c. 输入aaaaaa,满足5
d. 输入ZZZZZZ,满足6
e. 输入888888,满足7
f. 输入aZ8888,满足8
g. 输入aZ8888Bc,满足9、10、11、12
h. 输入12位aaaaaaaZ8888,满足13、14、15、16
i. 输入13位aaaaaaaZ8888W,满足17、18、19、20
j. 输入ab@cde你,满足21、22
k. 输入ab cdef,满足23
l. 输入<script>document.write(date());</script>,满足24
m. 输入<p>123456</p>,满足25
共13组数据,相对25种情况减少了一半。使用越少的用例覆盖大部分的情况,这个就是测试用例设计的核心。测试用例设计和执行涉及时间成本,对于大部分的测试团队,测试时间都是不充足的。如何在较短的时间保证软件的质量,这个和测试用例的质量密切相关。当然,这个也涉及测试策略。
这个是一个输入框的用例设计。如果是两个输入框呢,会不会是13*13=169种情况?明天继续编写。
当输入参数是两个时,用例是多少个?从上面的结论,应该是13*13,即169个。但在真正的测试用例编写中,我们会使用如此多的用例去验证吗?答案肯定是否定的。从时间成本和人力资源成本上来说,这也是不现实的。在测试两个输入参数的场景里,两个参数都会有相应的参数限制,如参数类型限制和长度限制。在做测试用例设计时,可以使用等价类法。
举个最简单的网站登录的例子,假定登陆的参数只有两个,用户名和密码,在输入正确的用户名和密码后,登陆成功;输入错误的用户名或者密码后,登陆失败。这里在不考虑各种浏览器登录、多个终端登录等场景的情况下,只考虑这两个参数输入,来设计相应的用例。
等价类法:
1 输入正确的用户名和密码,登陆成功
2 输入错误的用户名和密码,登陆失败
这两类里,对于第一类,只要考虑一组数据,即选一个存在的用户名和密码;
对于第二类,考虑情况有:
1)输入存在的用户名,密码是空
2)输入存在的用户名,密码是空格
3)输入存在的用户名,密码错误
4)输入不存在的用户名,密码是空
5)输入不存在的用户名,密码是空格
6)输入不存在的用户名,密码非空格或空
7)输入用户名是空,密码是空
8)输入用户名是空,密码是空格
9)输入用户名是空格,密码非空格或空
以上9种场景,即9组数据,不存在可以覆盖多个场景的数据。最后7和8两个场景,可以取一个场景作为测试点,另一个可以忽略。因为一般代码路径是先检查两个输入框是否都已输入值,这个检查顺序一般是先检查第一个,再检查第二个。所以如果用户名是空,不论密码是否输入,均会报请输入用户名。
以上10个情况,仅仅只针对输入框在功能设定情况下的用例。因为这篇的主题是针对两个输入框,如何设计测试用例。所以对于登陆功能用例设计并没有展开。当然登陆功能的用例设计不仅仅是以上10种,还需要考虑不同终端登录,不同浏览器登录,关掉浏览器再打开,退出再登陆等等功能用例,以及sql注入、登陆请求消息被截取串改等安全测试用例,当然还会包括登陆并发的性能测试用例。在这篇不做展开描述。
那么通过这个例子,当有两个输入框时,用例如何设计?首先明确两个输入框的数据类型和长度,再明确两个输入框之间是否有关联,再明确代码路径是怎样(看懂代码对测试很有帮助)。最后选择等价类法设计测试用例,如果有边界值的情况,则还要选择边界值法。如果有功能逻辑,则还要使用因果图法。这些测试用例设计方法都是用例设计的理论基础。需要训练自己有意识地使用这些方法。实践久了,逻辑思维能力和思考能力会不断提高。
下面是配套资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!
最后: 可以在公众号:程序员小濠 ! 免费领取一份216页软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。
如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!喜欢软件测试的小伙伴们,可以加入我们的测试技术交流扣扣群:779450660里面有各种软件测试资源和技术讨论)