输入域划分,测试 Excel 的日期数据验证。
背景简介
Excel 软件中,对于每个单元格,若输入特定日期格式,Excel 会进行日期数据验证。若输入日期正确,则转换为 内置日期;若输入日期不正确,将保留输入字符串。
测试目标
测试该日期数据验证功能。
测试技术
运用输入域划分技术,设计测试方案及实际测试结果。要尽可能发现潜在问题(如错误、风险等)。
注意
分析
年
描述 | 例子 |
---|---|
非数字 | a |
小数 | 1.1 |
零 | 0 |
负整数 | -1 |
长度小于 4 的正整数 | 123 |
长度大于 4 的正整数 | 12345 |
正整数,不是 4 的倍数 | 2019 |
正整数,是 4 的倍数,但不是 100 的倍数 | 2020 |
正整数,是 100 的倍数 | 2000 |
月
描述 | 例子 |
---|---|
二月 | February |
非二月的月份 | March |
其他非法输入 | 123 |
日
描述 | 例子 |
---|---|
非数字 | a |
小数 | 1.1 |
零 | 0 |
负整数 | -1 |
大于等于 1,小于等于 28 | 1, 28 |
29 | 29 |
30 | 30 |
31 | 31 |
大于等于 32 | 32 |
测试方案
将以上的情况组合得到 9 * 3 * 10 = 270
个测试用例。
测试结果
#!/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"