cycychenyi
4/6/2020 - 1:17 PM

输入域划分,测试 Excel 的日期数据验证。

输入域划分,测试 Excel 的日期数据验证。

Excel 的日期数据验证

背景简介

Excel 软件中,对于每个单元格,若输入特定日期格式,Excel 会进行日期数据验证。若输入日期正确,则转换为 内置日期;若输入日期不正确,将保留输入字符串。

测试目标

测试该日期数据验证功能。

测试技术

运用输入域划分技术,设计测试方案及实际测试结果。要尽可能发现潜在问题(如错误、风险等)。

注意

  • 不需要考虑所有的日期格式,只选择一种 Excel 能接受的输入格式即可。如,可选择 MM dd, yyyy格式,如March 23, 2020。
  • Excel 将单元格内容作为字符串,但在测试用例设计中,通常将月、日、年作为 3 个变量。也就是,将输入字符串看成多个变量连接而成的字符串。

输入域划分

分析

  1. 描述例子
    非数字a
    小数1.1
    0
    负整数-1
    长度小于 4 的正整数123
    长度大于 4 的正整数12345
    正整数,不是 4 的倍数2019
    正整数,是 4 的倍数,但不是 100 的倍数2020
    正整数,是 100 的倍数2000
  2. 描述例子
    二月February
    非二月的月份March
    其他非法输入123
  3. 描述例子
    非数字a
    小数1.1
    0
    负整数-1
    大于等于 1,小于等于 281, 28
    2929
    3030
    3131
    大于等于 3232

测试方案

将以上的情况组合得到 9 * 3 * 10 = 270 个测试用例。

使用 Python 脚本 批量操作,得到 CSV 文件

测试结果

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

# 输入域划分,测试 Excel 的日期数据验证

years = ['a', 1.1, 0, -1, 123, 12345, 2019, 2020, 2000]
months = ['February', 'March', 'test']
days = ['a', 1.1, 0, -1, 1, 28, 29, 30, 31, 32]


def main() -> None:
    test_set = [(month, day, year) for day in days for month in months for year in years]
    with open('test_excel_date_verification.csv', 'w') as f:
        f.write('\n'.join([f'"{month} {day}, {year}"' for month, day, year in test_set]))


if __name__ == '__main__':
    main()
"February a, a"
"February a, 1.1"
"February a, 0"
"February a, -1"
"February a, 123"
"February a, 12345"
"February a, 2019"
"February a, 2020"
"February a, 2000"
"March a, a"
"March a, 1.1"
"March a, 0"
"March a, -1"
"March a, 123"
"March a, 12345"
"March a, 2019"
"March a, 2020"
"March a, 2000"
"test a, a"
"test a, 1.1"
"test a, 0"
"test a, -1"
"test a, 123"
"test a, 12345"
"test a, 2019"
"test a, 2020"
"test a, 2000"
"February 1.1, a"
"February 1.1, 1.1"
"February 1.1, 0"
"February 1.1, -1"
"February 1.1, 123"
"February 1.1, 12345"
"February 1.1, 2019"
"February 1.1, 2020"
"February 1.1, 2000"
"March 1.1, a"
"March 1.1, 1.1"
"March 1.1, 0"
"March 1.1, -1"
"March 1.1, 123"
"March 1.1, 12345"
"March 1.1, 2019"
"March 1.1, 2020"
"March 1.1, 2000"
"test 1.1, a"
"test 1.1, 1.1"
"test 1.1, 0"
"test 1.1, -1"
"test 1.1, 123"
"test 1.1, 12345"
"test 1.1, 2019"
"test 1.1, 2020"
"test 1.1, 2000"
"February 0, a"
"February 0, 1.1"
"February 0, 0"
"February 0, -1"
"February 0, 123"
"February 0, 12345"
"February 0, 2019"
"February 0, 2020"
"February 0, 2000"
"March 0, a"
"March 0, 1.1"
"March 0, 0"
"March 0, -1"
"March 0, 123"
"March 0, 12345"
"March 0, 2019"
"March 0, 2020"
"March 0, 2000"
"test 0, a"
"test 0, 1.1"
"test 0, 0"
"test 0, -1"
"test 0, 123"
"test 0, 12345"
"test 0, 2019"
"test 0, 2020"
"test 0, 2000"
"February -1, a"
"February -1, 1.1"
"February -1, 0"
"February -1, -1"
"February -1, 123"
"February -1, 12345"
"February -1, 2019"
"February -1, 2020"
"February -1, 2000"
"March -1, a"
"March -1, 1.1"
"March -1, 0"
"March -1, -1"
"March -1, 123"
"March -1, 12345"
"March -1, 2019"
"March -1, 2020"
"March -1, 2000"
"test -1, a"
"test -1, 1.1"
"test -1, 0"
"test -1, -1"
"test -1, 123"
"test -1, 12345"
"test -1, 2019"
"test -1, 2020"
"test -1, 2000"
"February 1, a"
"February 1, 1.1"
"February 1, 0"
"February 1, -1"
"February 1, 123"
"February 1, 12345"
"February 1, 2019"
"February 1, 2020"
"February 1, 2000"
"March 1, a"
"March 1, 1.1"
"March 1, 0"
"March 1, -1"
"March 1, 123"
"March 1, 12345"
"March 1, 2019"
"March 1, 2020"
"March 1, 2000"
"test 1, a"
"test 1, 1.1"
"test 1, 0"
"test 1, -1"
"test 1, 123"
"test 1, 12345"
"test 1, 2019"
"test 1, 2020"
"test 1, 2000"
"February 28, a"
"February 28, 1.1"
"February 28, 0"
"February 28, -1"
"February 28, 123"
"February 28, 12345"
"February 28, 2019"
"February 28, 2020"
"February 28, 2000"
"March 28, a"
"March 28, 1.1"
"March 28, 0"
"March 28, -1"
"March 28, 123"
"March 28, 12345"
"March 28, 2019"
"March 28, 2020"
"March 28, 2000"
"test 28, a"
"test 28, 1.1"
"test 28, 0"
"test 28, -1"
"test 28, 123"
"test 28, 12345"
"test 28, 2019"
"test 28, 2020"
"test 28, 2000"
"February 29, a"
"February 29, 1.1"
"February 29, 0"
"February 29, -1"
"February 29, 123"
"February 29, 12345"
"February 29, 2019"
"February 29, 2020"
"February 29, 2000"
"March 29, a"
"March 29, 1.1"
"March 29, 0"
"March 29, -1"
"March 29, 123"
"March 29, 12345"
"March 29, 2019"
"March 29, 2020"
"March 29, 2000"
"test 29, a"
"test 29, 1.1"
"test 29, 0"
"test 29, -1"
"test 29, 123"
"test 29, 12345"
"test 29, 2019"
"test 29, 2020"
"test 29, 2000"
"February 30, a"
"February 30, 1.1"
"February 30, 0"
"February 30, -1"
"February 30, 123"
"February 30, 12345"
"February 30, 2019"
"February 30, 2020"
"February 30, 2000"
"March 30, a"
"March 30, 1.1"
"March 30, 0"
"March 30, -1"
"March 30, 123"
"March 30, 12345"
"March 30, 2019"
"March 30, 2020"
"March 30, 2000"
"test 30, a"
"test 30, 1.1"
"test 30, 0"
"test 30, -1"
"test 30, 123"
"test 30, 12345"
"test 30, 2019"
"test 30, 2020"
"test 30, 2000"
"February 31, a"
"February 31, 1.1"
"February 31, 0"
"February 31, -1"
"February 31, 123"
"February 31, 12345"
"February 31, 2019"
"February 31, 2020"
"February 31, 2000"
"March 31, a"
"March 31, 1.1"
"March 31, 0"
"March 31, -1"
"March 31, 123"
"March 31, 12345"
"March 31, 2019"
"March 31, 2020"
"March 31, 2000"
"test 31, a"
"test 31, 1.1"
"test 31, 0"
"test 31, -1"
"test 31, 123"
"test 31, 12345"
"test 31, 2019"
"test 31, 2020"
"test 31, 2000"
"February 32, a"
"February 32, 1.1"
"February 32, 0"
"February 32, -1"
"February 32, 123"
"February 32, 12345"
"February 32, 2019"
"February 32, 2020"
"February 32, 2000"
"March 32, a"
"March 32, 1.1"
"March 32, 0"
"March 32, -1"
"March 32, 123"
"March 32, 12345"
"March 32, 2019"
"March 32, 2020"
"March 32, 2000"
"test 32, a"
"test 32, 1.1"
"test 32, 0"
"test 32, -1"
"test 32, 123"
"test 32, 12345"
"test 32, 2019"
"test 32, 2020"
"test 32, 2000"