15届蓝桥杯软件测试单元测试专项练习(Python)

1.举重比赛,需要根据性别和体重来决定是否有参赛资格,具体规则如下:

  • 当性别为男且体重大于等于 54 公斤时,可参加男子组比赛,否则无资格参赛。
  • 当性别为女且体重大于等于 46 公斤时,可参加女子组比赛,否则无资格参赛。
  • 当性别既不是男也不是女时,系统显示性别异常。

请使用基本路径覆盖法对被测源代码 Weightlifting 类中的 divide 方法设计单元测试用例,并在 WeightliftingTest 类中完成单元测试代码。

# 本类主要功能描述:
# 1、性别既不是男也不是女,则显示性别异常
# 2、性别为男,体重大于等于54公斤,显示可参加男子组比赛,否则无资格参赛
# 3、性别为女,体重大于等于46公斤,显示可参加女子组比赛,否则无资格参赛

class Weightlifting:
    def divide(sex, weight):
        if sex == '男':
            if weight >= 54:
                return '可以参加男子组比赛'
            else:
                return '无资格参赛'
        elif sex == '女':
            if weight >= 46:
                return '可以参加女子组比赛'
            else:
                return '无资格参赛'
        else:
            return '性别异常'
from weightlifting import Weightlifting

# 单元测试
# 1. 请使用基本路径覆盖法对被测源代码 Weightlifting 类中的 divide 方法设计 5 条单元测试用例。
# 2. 请在下方 WeightliftingTest 类中填写单元测试代码内容。

class WeightliftingTest(unittest.TestCase):

    def test_divide_01(self):
        # TODO 请填写单元测试代码
        self.assertEqual(Weightlifting.divide('男', 67), '可以参加男子组比赛')

    def test_divide_02(self):
        # TODO 请填写单元测试代码
        self.assertEqual(Weightlifting.divide('男', 17), '无资格参赛')

    def test_divide_03(self):
        # TODO 请填写单元测试代码
        self.assertEqual(Weightlifting.divide('女', 57), '可以参加女子组比赛')

    def test_divide_04(self):
        # TODO 请填写单元测试代码
        self.assertEqual(Weightlifting.divide('女', 17), '无资格参赛')  

    def test_divide_05(self):
        # TODO 请填写单元测试代码
        self.assertEqual(Weightlifting.divide('女男', 177), '性别异常')  


if __name__ == '__main__':
    unittest.main()

2.通过输入的 a、b、c 三个整数,对它们进行从小到大的排序,具体规则如下:

  • 当 a 大于等于 b,且 c 大于 a 时,显示 “bac”,若 c 小于 a,且 c 大于 b时,显示 “bca”,否则显示 “cba”;

  • 当 a 小于 b,且 c 大于 b 时,显示 “abc”,若 c 小于 b,且 c 大于 a 时,显示 “acb”,否则显示 “cab”。

  • 请使用基本路径覆盖法对被测源代码 NumberSort 类中的 sort 方法设计单元测试用例。并在 NumberSortTest 类中完成单元测试代码

# 本类主要功能描述:
# 1、当 a 大于等于 b,且 c 大于 a 时,显示 “bac”,若 c 小于 a,且 c 大于 b时,显示 “bca”,否则显示 “cba”;
# 2、当 a 小于 b,且 c 大于 b 时,显示 “abc”,若 c 小于 b,且 c 大于 a 时,显示 “acb”,否则显示 “cab”。

class NumberSort:
  def sort(a, b, c):
    if a >= b:
        return 'bac' if c > a else 'bca' if c > b else 'cba'
    else:
        return 'abc' if c > b else 'acb' if c > a else 'cab'
import unittest
from number_sort import NumberSort

# 单元测试
# 1. 请使用基本路径覆盖法对被测源代码 NumberSort 类中的 sort 方法设计 6 条单元测试用例。
# 2. 请在下方 NumberSortTest 类中填写单元测试代码内容。

class NumberSortTest(unittest.TestCase):

    def test_sort_01(self):
        # TODO 请填写单元测试代码
        self.assertEqual(NumberSort.sort(12, 5, 13), 'bac')

    def test_sort_02(self):
        # TODO 请填写单元测试代码
        self.assertEqual(NumberSort.sort(12, 5, 8), 'bca')

    def test_sort_03(self):
        # TODO 请填写单元测试代码
        self.assertEqual(NumberSort.sort(12, 5, 3), 'cba')
    
    def test_sort_04(self):
        # TODO 请填写单元测试代码
        self.assertEqual(NumberSort.sort(3, 5, 8), 'abc')

    def test_sort_05(self):
        # TODO 请填写单元测试代码
        self.assertEqual(NumberSort.sort(3, 5, 4), 'acb')

    def test_sort_06(self):
        # TODO 请填写单元测试代码
        self.assertEqual(NumberSort.sort(3, 5, 2), 'cab')


if __name__ == '__main__':
    unittest.main()

3.界面获取用户名信息,要求字符串长度必须在 3 ~ 12 位之间,为了显示样式的美观性,根据获取的字符串,以及限定的最小长度(3)和最大长度(12)进行处理,具体规则如下:

  • 字符串不能为 null,否则无法进行处理,因此当为 null 时,返回 “字符串不能为空”。
  • 字符串要求的长度是参数提供的最小长度 ~ 最大长度位,会对获取的字符串进行去除前后空格的处理,当去除空格后长度依然不满足要求时,会返回 “字符串长度必须在最小长度 ~ 最大长度位”。例如:字符串长度必须在3~12位。
  • 对于长度小于最大长度位的字符串,会在字符串后面添加空格补全,直到长度为最大长度位后处理结束,并返回处理后的字符串
  • 请使用简单循环覆盖法的标准要求,对被测源代码 Utils 类中的 stringStyle 方法进行设计单元测试用例。并在 UtilsTest 类中完成单元测试代码。

  • # 本类为工具类,主要功能描述:
    # 1、字符串不能为 null,否则无法进行处理,因此当为 null 时,返回 “字符串不能为空”。
    # 2、字符串要求的长度是参数提供的最小长度  ~ 最大长度位,会对获取的字符串进行去除前后空格的处理,当去除空格后长度依然不满足要求时,会返回 “字符串长度必须在最小长度 ~ 最大长度位”。
    # 3、对于长度小于最大长度位的字符串,会在字符串后面添加空格补全,直到长度为最大长度位后处理结束,并返回处理后的字符串。
    
    class Utils:
    
        # 对字符串长度进行处理,为达到最大长度时,用空格补全
        # @param message 字符串
        # @param min 最小长度
        # @param max 最大长度
        # @return 处理后的信息  
        def string_style(message, min, max):
            result = None
            # 字符串不能为空
            if message is not None:
                # 去除字符串前后空格
                message = message.strip()
                # 获取字符串长度
                length = len(message)
    
                if min <= length <= max:
                    result = message
                    # 当长度为达到最大长度时,用空格补全
                    for i in range(max - length):
                        result = result + ' '
                else:
                    result = '字符串长度必须在' + str(min) + '~' + str(max) + '位'
            else:
                result = '字符串不能为空'
    
            return result
    
    import unittest
    from utils import Utils
    
    # 单元测试
    # 1. 请使用简单循环覆盖法对被测源代码 Utils 类中的 string_style 方法设计 6 条单元测试用例。
    # 2. 请在下方 UtilsTest 类中填写单元测试代码内容。
    
    class UtilsTest(unittest.TestCase):
    
        def test_string_style_01(self):
            # TODO 请填写单元测试代码
            self.assertEqual(Utils.string_style(None, 5, 8), '字符串不能为空')
    
        def test_string_style_02(self):
            # TODO 请填写单元测试代码
            self.assertEqual(Utils.string_style('ab', 5, 8), '字符串长度必须在5~8位')
    
        def test_string_style_03(self):
            # TODO 请填写单元测试代码
            self.assertEqual(Utils.string_style('abcde', 5, 8), 'abcde   ')
    
        def test_string_style_04(self):
            # TODO 请填写单元测试代码
            self.assertEqual(Utils.string_style('abcdefgh', 5, 8), 'abcdefgh')
    
        def test_string_style_05(self):
            # TODO 请填写单元测试代码
            self.assertEqual(Utils.string_style('abcdefghj', 5, 8), '字符串长度必须在5~8位')
    
        def test_string_style_06(self):
            # TODO 请填写单元测试代码
            self.assertEqual(Utils.string_style('abcdef', 5, 8), 'abcdef  ')
    
    
    
    
    if __name__ == '__main__':
        unittest.main()
    

  •   #循环0次
        def test_string_style_01(self):
            # TODO 请填写单元测试代码
            self.assertEqual('abcdefghijkl', Utils.string_style('abcdefghijkl', 3, 12))
        #循环1次
        def test_string_style_04(self):
            self.assertEqual('abcdefghijk ', Utils.string_style('abcdefghijk', 3, 12))
        #循环2次
        def test_string_style_05(self):
            self.assertEqual('abcdefghij  ', Utils.string_style('abcdefghij', 3, 12))
        #循环中间次(m)
        def test_string_style_02(self):
            self.assertEqual('abcdef      ', Utils.string_style('abcdef', 3, 12))
        #循环n-1次
        def test_string_style_06(self):
            self.assertEqual('abcd        ', Utils.string_style('abcd ', 3, 12))
        #循环n次
        def test_string_style_03(self):
            self.assertEqual('abc         ', Utils.string_style('abc', 3, 12))

    原文链接:https://blog.csdn.net/m0_62835291/article/details/136953377

4.某管理系统中,其中一个业务逻辑接口中实现了商品管理模块中的购物车功能,现根据输入的集合列表和商品对象两个参数实现了购物车添加功能,实现逻辑如下:

  • 当向购物车添加商品对象时,购物车集合列表不存在,那么系统会创建购物车集合列表,然后向购物车集合中添加商品信息,并返回商品集合列表。
  • 当购物车集合对象为空时,可直接添加商品对象至集合列表中,然后返回商品集合列表。
  • 当向购物车添加商品对象,而此商品已存在购物车集合对象列表中时,列表中只会对该商品的数量进行叠加,该商品的其他信息不变,完成操作后返回商品集合列表。
  • 当向购物车添加的商品对象,并不存在商品集合列表中,则添加到购物车集合列表中,并返回商品集合列表。
  • 请使用基本路径覆盖法 + 简单循环覆盖法的标准规则,对被测源代码 Goods、GoodsService 类中的 shopping_cart 方法设计单元测试用例。并在 GoodsServiceTest 类中完成单元测试代码,Datas 类中提供了测试数据。
from goods import Goods

# 测试数据
class Datas:
    
    goods_list1 = None
    goods_list2 = []
    g1 = Goods(1, '手机', '华为', 3000, 2)
    g2 = Goods(2, '手机', 'oppo', 2800, 2)
    g3 = Goods(3, '手机', '小米', 1800, 2)
    g4 = Goods(4, '手机', 'vivo', 2600, 2)
    g5 = Goods(5, '手机', '荣耀', 1300, 2)
    g6 = Goods(6, '手机', '华为', 6000, 2)
    g7 = Goods(7, '手机', 'oppo', 3800, 2)
    g8 = Goods(8, '手机', '小米', 2000, 2)
    g9 = Goods(9, '手机', 'vivo', 3100, 2)
    g10 = Goods(10, '手机', '荣耀', 1700, 2)
    goods_list3 = [g1, g2, g3, g4, g5, g6, g7, g8, g9]
# 商品管理模块业务逻辑类,本类主要功能描述:
# 1、当向购物车添加商品对象时,购物车集合列表不存在,那么系统会创建购物车集合列表,然后向购物车集合中添加商品信息,并返回商品集合列表。
# 2、当购物车集合对象为空时,可直接添加商品对象至集合列表中,然后返回商品集合列表。
# 3、当向购物车添加商品对象,而此商品已存在购物车集合对象列表中时,列表中只会对该商品的数量进行叠加,该商品的其他信息不变,完成操作后返回商品集合列表。
# 4、当向购物车添加的商品对象,并不存在商品集合列表中,则添加到购物车集合列表中,并返回商品集合列表。

class GoodsService:
    
    # 商品加入购物车
    # @param list 购物车列表
    # @param goods 商品信息
    # @return 购物车列表
    def shopping_cart(goods_list, goods):
        # 当购物车为 None
        if goods_list is None:
            # 创建购物车并将商品对象存储到集合列表中
            goods_list = [goods]
        else:
            found = False
            for goods1 in goods_list:
                # 当购物车中已存在商品和添加的商品一致时,商品数量进行叠加
                if goods1.id == goods.id:
                    goods1.quantity += goods.quantity
                    found = True
                    break
            # 当添加的商品对象不存在与购物车中时,将商品对象存储到购物车集合列表中
            if not found:
                goods_list += [goods]
        return goods_list
# 商品数据类
class Goods:
    def __init__(self, id, name, type, price, quantity):
        # 商品编号
        self.id = id
        # 商品名称
        self.name = name
        # 商品类型
        self.type = type
        # 商品价格
        self.price = price
        # 商品数量
        self.quantity = quantity

   

import unittest
from datas import Datas
from goods_service import GoodsService

# 单元测试
# 1. 请使用简单循环覆盖法对被测源代码 Goods 和 GoodsService 类中的 shopping_cart 方法设计单元测试用例。
# 2. 请在下方 GoodsServiceTest 类中填写单元测试代码内容。
# 3. 请使用 Datas 类中提供的集合列表和商品对象的数据进行测试。

class GoodsServiceTest(unittest.TestCase):
    # 当购物车为 None
    def test_shopping_cart_01(self):
        # TODO 请填写单元测试代码
        self.assertEqual(GoodsService.shopping_cart(None, Datas.g1), None)
        
    #循环0次
    def test_shopping_cart_02(self):
        # TODO 请填写单元测试代码
        goods_list2=GoodsService.shopping_cart(Datas.goods_list2, Datas.g1), goods_list1
        self.assertEqual(1, Datas.goods_list2[0].id)
        self.assertEqual(1, Datas.goods_list2[0].quantity)

    #循环1次
    def test_shopping_cart_03(self):
        goods_list3=GoodsService.shopping_cart(Datas.goods_list3,Datas.g1)
        self.assertEqual(1, Datas.goods_list3[0].id)
        self.assertEqual(4, Datas.goods_list3[0].quantity)
    #循环2次
    def test_shopping_cart_04(self):
        goods_list3=GoodsService.shopping_cart(Datas.goods_list3,Datas.g2)
        self.assertEqual(2, Datas.goods_list3[1].id)
        self.assertEqual(4, Datas.goods_list3[1].quantity)
    #循环m次
    def test_shopping_cart_05(self):
        goods_list3=GoodsService.shopping_cart(Datas.goods_list3,Datas.g5)
        self.assertEqual(5, Datas.goods_list3[4].id)
        self.assertEqual(4, Datas.goods_list3[4].quantity)
    #循环n-1次
    def test_shopping_cart_06(self):
        goods_list3=GoodsService.shopping_cart(Datas.goods_list3,Datas.g8)
        self.assertEqual(8, Datas.goods_list3[7].id)
        self.assertEqual(4, Datas.goods_list3[7].quantity)
    #循环n次
    def test_shopping_cart_07(self):
        goods_list3=GoodsService.shopping_cart(Datas.goods_list3,Datas.g9)
        self.assertEqual(9, Datas.goods_list3[8].id)
        self.assertEqual(4, Datas.goods_list3[8].quantity)
    #新增商品在购物车列表不存在
    def test_shopping_cart_08(self):
        goods_list3=GoodsService.shopping_cart(Datas.goods_list3,Datas.g10)
        self.assertEqual(10, Datas.goods_list3[9].id)
        self.assertEqual(2, Datas.goods_list3[9].quantity)

if __name__ == '__main__':
    unittest.main()

         

原文链接:https://blog.csdn.net/m0_62835291/article/details/136953377

用法: assertIsNotNone(testValue, message)

参数: assertIsNotNone()接受以下列出的两个参数并作解释:

  • testValue:将测试变量作为输入值以检查是否与None相等
  • message:作为测试消息失败时显示的消息的字符串语句。
  • 32
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值