测试用例入门(二) - 使用等价类划分法编写测试用例

  • 等价类划分是测试用例方法设计中一个重要的方法,甚至在其他用例设计方法中也需要用到等价类划分。
  • 这个方法由来已久,很多人都写过这个方法介绍。本篇文章引入代码,用来说明这个方法究竟是如何起的作用。
    本篇文章代码示例均为Python编写

一、等价类划分法含义

分步骤把海量(无限)的测试用例集减到最小,但过程同样有效。

二、等价类划分法的原理

- 1.首先什么是等价类?

等价类就是“他大舅、他二舅、都是他舅,高桌子、低板凳都是木头。”

- 2.那么什么是等价类划分法

而等价类划分法就是:假设要找他舅,那只要叫他其中一个舅舅来就行了,不需要把两个舅舅都喊来。

- 3. 用代码(Python)来演示等价类划分

  • 假设find_uncle(找舅舅)这个方法就是待测应用。

    def find_uncle(uncle):
        # 这是一个用来找舅舅的方法
        if uncle['type'] == 'uncle':
        	# 只要数据内的“type”值是uncle,就输出“找到舅舅”
            print('找到舅舅了')
    
  • 创建两个变量作为他的大舅和二舅

    uncle_older = {
          
          'type': 'uncle', 'age': 45} # 这条数据代表大舅
    uncle_junior = {
          
          'type': 'uncle', 'age': 40} # 这条数据代表二舅
    
  • 运行这个段代码

    print("这时来的是大舅:") # 打印日志
    find_uncle(uncle_older) # 输入“大舅”数据,并运行find_uncle方法
    print("这时来的是二舅:") # 打印日志
    find_uncle(uncle_junior)# 输入“二舅”数据,并运行find_uncle方法
    
  • 代码运行的结果,查看输出结果:
    image.png

  • 此时不管来的是大舅还是二舅,都找到了舅舅。
    其实就是两条数据,不管使用哪一条,这个程序我们都完成了测试。

- 4.这就是等价类划分法:

并不是所有的数据都需要测试到,而是应该将相似输入、相似输出、相似操作分在一个测试组,在减少测试用例的同时,也足以达到覆盖测试对象。

  • 其实在上面找舅舅的测试中,应该还要设计一条测试数据,那就是**“type”不等于“uncle”的情况,并且将这个数据输入方法中,不会输出“找到舅舅了”,这样才能证明这方法的判断条件“找到舅舅”是正确的**。当然这个不属于等价类划分法,以后再做详细介绍。

那么如果将这个方法利用到用例设计中呢?举一个实际工作中的例子:

  • 假设在测试商城添加商品进入购物车功能,这种商城售卖两种类型的商品,一种是实物商品、一种是虚拟商品。
  • 那么我们在设计用例的时候需要设计将商城所有的商品都加入购物车的用例吗?
    显然是不用,只需要设计一个添加实物商品的用例和一个虚拟商品的用例即可。

三、不同条件对等价类划分的影响

  • 等价类划分是测试的一个很重要的方法,但是,当选择了等价类划分时,就意味着选择了冒险,因为可能由于减少了测试用例,而出现漏测的风险。所以选择分类时一定要小心谨慎。

  • 还是用上面的找舅舅方法作为例子:
    假设选择的判断条件改变了,需要找到大于40岁包括40岁的舅舅

    def find_uncle(uncle):
        # 这是一个用来找舅舅的方法
        if uncle['type'] == 'uncle' and uncle['age'] >= 40:
        	# 数据内的“type”值是uncle,并且“age”要大于等于40,输出“找到舅舅”
            print('找到舅舅了')
    
  • 那么此时,两个舅舅还是等价类吗?

  • 答案是否定的。'age’大于等于40岁其实包含两个判断条件,一个是大于40,一个的刚好等于40,而两个舅舅一个正好是40、一个是45。

  • 把代码改写,让这个两个判断条件更直观,并加上三种输入舅舅数据的情况。

    def find_uncle(uncle):
        # 这是一个用来找舅舅的方法
        if uncle['type'] == 'uncle':
            if uncle['age'] > 40:
                print('找到大于40岁的舅舅了')
            elif uncle['age'] == 40:
                print('找到等于40岁的舅舅了')
    
    print("这时来的是大舅:")
    find_uncle(uncle_older) # 输入“大舅”数据,并运行find_uncle方法
    print("这时来的是二舅:")
    find_uncle(uncle_junior) # 输入“二舅”数据,并运行find_uncle方法
    print("大舅和二舅一起来了")
    find_uncle(uncle_older) # 输入“大舅”数据,并运行find_uncle方法
    find_uncle(uncle_junior) # 输入“二舅”数据,并运行find_uncle方法
    
  • 运行代码,这是可以看到,只有当大舅和二舅一起来时,才能测试到所有的判断条件。
    image.png

  • 所以在这种情况下大舅和二舅不能划分为一个等价类。

五、最后

  • 再回顾一遍等价类划分法的含义:
    分步骤把海量(无限)的测试用例集减到最小,但过程同样有效。

  • 等价类划分法是测试方法中常见的方法之一,减少测试用例固然有风险,但是不能因噎废食,因为有些时候数据量十分庞大,甚至有可能是无限的,完全测试是不可能的。我们要做的应该是更加细心谨慎的判断划分条件,而不是直接放弃等价类划分,所以即使有风险,我们在测试时,仍然需要使用等价类划分法来减少测试量,提高测试效率。

附录:【测试用例入门系列目录】

测试用例入门(一)-如何编写用例标题、前置条件、测试步骤和预期结果?
测试用例入门(二)-使用等价类划分法编写测试用例
测试用例入门(三)-使用边界值分析法编写测试用例
测试用例入门(四)-使用流程分析法、状态分析法编写测试用例
测试用例入门(五)-如何进行需求分析
测试用例入门(六) - 根据测试类型与颗粒度归纳测试点

—————————————————————————————————
本人运营的博客同名公众号【软件测试必备技能】不定期会上传测试相关资料,有需要可以前往领取。
在这里插入图片描述
有需要可点击文章下方二维码,前往领取~在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_40883833/article/details/126651881
今日推荐