夏令时测试是比较小众的测试,主要针对在有夏令时的国家使用的软件,如果你接触到了这方面的测试,说明你在挣国外的钱:).
 
话不多说,先来介绍下什么是夏令时:
 
夏时制,夏时令(Daylight Saving Time:DST),又称“日光节约时制”和“夏令时间”,是一种为节约能源而人为规定地方时间的制度,在这一制度实行期间所采用的统一时间称为“夏令时间”。
 
我们所说的夏令时实际上包括两类:夏令时和冬令时
  • 夏令时(1:00 -> 3:00 AM)

    • 往后拨一个小时,直接从1点变到3点,也就是说我们要比原来提前一个小时和美国佬开会。
  • 冬令时(1:00 -> 1:00 -> 2:00 AM)
    • 往前拨一个小时,要过两个1点,这时比平常晚一个小时。
 
从这两种类型上看,我们的测试重点是放在有时间相关的操作上(时间显示、比较),以检测系统是否能够正确地运行。
下面我们来介绍夏令时测试需要关注的各个点:
 
  • 白盒测试

    • 代码走查以找出和时间操作相关的模块,进行合理的时间转换(本地时间转换为UTC时间)。这里需要关注的是和时间有关的部分,如果模块只和日期有关,可以忽略。
    • 并不是所有和时间有关的模块都要转换为UTC时间,这由业务决定(比如说打印log和界面时间显示,这时就需要用本地时间,而非UTC)
 
  • UI 测试

    • 时间输入:对于需要输入起始时间的控件,在夏令时当天需要注意对输入的检查,比如夏令时当天没有2:00AM。(对于冬令时,如果选择1:00 AM代表的是第一个一点)
    • 时间显示(输出): 产品时间的显示规则是与本地时间一致。对于需要显示时间段的部分,需要注意夏令时没有2:00AM,冬令时包含第二个1:00AM
    • 报表展示:首先大部分报表的数据都来源于数据库,而数据库一般保存的是UTC时间,所以需要转化成本地时间展示,这时在报表上可能出现的状况是:有些有起始时间的项的结束时间<开始时间,如果没有特别的要求,这种报表结果是可以接受的,但是要注意检查时间转换的准确性。
 
  • 数据存储

    • 文件的存储:这里分为日志和数据文件

      • 日志文件需要用本地时间存储,主要是问了方便查看。
      • 数据文件需要用UTC或者时间戳进行存储,防止造成数据不准确。
    • 数据库
      • 需要用UTC时间或者时间戳存储。
      • 进行查询操作,观察是否返回正确结果
      • 在夏令时转换点附近进行数据表的操作,检查数据时间显示(UTC或者时间戳)
      • 对于数据库中需要定期定时执行的任务,需要格外注意在夏令时当天的执行时间。
 
  • 功能性测试

    • 跨时间段任务

      • 常常会有一些任务会跨时间段,例如:一个Job计划执行的时间是2:00AM,在夏令时当天因为没有2:00AM,job会不会执行?或者是在冬令时的1:59AM执行,第二个1:00AM执行完毕,job会不会报错?以下时间段是需要我们在测试功能中需要特别关注的,以这些时间段作指导,执行用例,可以覆盖大部分场景。
                              
      • 需要注意的点:
      1. 夏令时没有2:00AM
      2. 任务消耗时间区间需要特别注意,如果一个任务1:50执行到3:10,其实只用了20分钟,而不是1小时20分钟
      3. 冬令时有两个一点,预先计划好的任务中说的1:00AM,指的都是第一个1:00AM
      4. 冬令时有图中5中比较典型的时间段,需要特别注意。
  • 和其他模块的交互
    • 模块之间的交互需要遵循一致的规则,最好都能用UTC或者时间戳进行传输
    • 如果其他模块未遵循规则,需要对时间的传入和传出进行转换检查

总结:

DST测试的关注点更多的是夏令时、冬令时当天时间转换的处理逻辑,这就需要我们定义出来哪些时间段是容易出问题的,然后结合我们平时的用例,也会比较容易的把DST测试做好。

夏令时(DST)测试的更多相关文章

  1. 夏令时 DST (Daylight Saving Time) java中的夏令时【转】

    1916年,德国首先实行夏令时,英国因为怕德国会从中得到更大的效益,因此紧跟着也采取了夏令时 1986年至1991年,中华人民共和国在全国范围实行了六年夏令时 サマータイム 夏時間(日本现在没有实行夏 ...

  2. 彻底弄懂GMT、UTC、时区和夏令时

    前言 格林威治时间.世界时.祖鲁时间.GMT.UTC.跨时区.夏令时,这些眼花缭乱的时间术语,我们可能都不陌生,但是真正遇到问题,可能又不那么确定,不得不再去查一查,处理完可能过段时间又忘记.今天,我 ...

  3. GMT UTC CST ISO 夏令时 时间戳,都是些什么鬼?

    目录 ✍前言 本文提纲 版本约定 ✍正文 GMT:格林威治时间 凭什么格林威治作为标准时间? 地球自转 中国有哪几个时区? 美国有哪几个时区? GMT和Http协议的渊源 UTC:世界标准时间 UTC ...

  4. Carbon中文使用手册

    Introduction Carbon 继承了PHP的 Datetime 类和JsonSerialiable.所以 Carbon 中没有涉及到的,但在 Datetime 和JsonSerializab ...

  5. CentOS 7 设置日期和时间

    现代操作系统分为以下两种类型的时钟: 实时时钟(Real-Time Clock,RTC),通常称为硬件时钟(一般是系统主板上的集成电路),它完全独立于操作系统的当前状态,即使在计算机关闭时也能运行. ...

  6. ntp时间同步,各种配置方法

    1 Windows xp NTP服务器的配置(2003配置方式一样) 1) 首先需要关闭作为NTP服务器的windows系统自带的防火墙,否则将同步不成功. 2) 单击“开始”,单击“运行”,键入 r ...

  7. SQL Server全时区转换

    SQL Server全时区转换 假如你的应用程序是跨国(例如跨国银行交易)使用的话,那么数据库的一些国际化特性支持可以说是非常重要 其中最常见的就是各国时区上的差异,由于SQL Server getd ...

  8. 关于linux中的时间 时区问题

    本文部分来源于:  http://hi.baidu.com/peruke/blog/item/b8de06ec6a04583b27979132.html 系统是fedora: glibc实现了从RTC ...

  9. PHP指定日期转时间戳

    使用date_parse_from_format 可以转换指定的格式:举个例子: <?php $str = '2018.10.01';//或者 2018年10月1日 $arr = date_pa ...

随机推荐

  1. linux_目录基本操作

    ls命令 ls命令用来显示目标列表,在Linux中是使用率较高的命令.ls命令的输出信息可以进行彩色加亮显示,以分区不同类型的文件. 语法 $ ls [选项] [目录] 选项 说明 -a 显示所有档案 ...

  2. Lodop调整打印项输出顺序 覆盖与层级

    Lodop中的打印项,如果有输出在同一位置,或部分位置重叠的地方,打印项之间是怎么覆盖的呢?在JS里,按照Lodop语句打印项先后的执行顺序,先执行的先输出,后执行的后输出,如果有后面的打印项和前面的 ...

  3. 我是如何沉迷于linux系统的?

    Linux?这个对大多数人来说,是一个陌生的词.曾经的我,对这个也是一无所知的,我没有编程背景,我的专业知识是英语,而不是计算机语言. 我是如何和这个词搭上联系的呢?还是缘于一段一次奇妙的社团活动,我 ...

  4. BZOJ1222[HNOI2001]产品加工——DP

    题目描述 某加工厂有A.B两台机器,来加工的产品可以由其中任何一台机器完成,或者两台机器共同完成.由于受到机器性能和产品特性的限制,不同的机器加工同一产品所需的时间会不同,若同时由两台机器共同进行加工 ...

  5. Hibernate 查询技术

    转载: http://blog.csdn.net/u014078192/article/details/24986475 一.Hibernate的三种查询方式(掌握) Hibernate中提供了三种查 ...

  6. Linux LVM逻辑卷配置过程详解(创建,增加,减少,删除,卸载)

    Linux LVM逻辑卷配置过程详解 许多Linux使用者安装操作系统时都会遇到这样的困境:如何精确评估和分配各个硬盘分区的容量,如果当初评估不准确,一旦系统分区不够用时可能不得不备份.删除相关数据, ...

  7. (未完成...)Python3网络爬虫(2):利用urllib.urlopen向有道翻译发送数据并获得翻译结果

    环境: 火狐浏览器 pycharm2017.3.3 python3.5 1.url不仅可以是一个字符串,例如:http://www.baidu.com.url也可以是一个Request对象,这就需要我 ...

  8. mycat实现简单的mysql集群负载均衡

    什么是mycat呢? 简单理解为一个MySQL中间件,它支持分流.基于心跳的自动故障切换,支持读写分离,支持mysql主从,基于Nio管理线程的高并发… 详见官网:http://www.mycat.i ...

  9. sprintf-%s的用法

    @2018-9-19 sprintf-%s的用法 #include <stdio.h> #include <string.h> char string[] = "I ...

  10. 【转】用宏定义代替printf函数

    问题提出 有时候我们想用宏定义来决定是编译debug版本的代码还是release的代码,dubug版本的代码会通过printf打印调试信息,release版本的代码则不会.我们总不能对每一条print ...