接口测试中遇到的一个与时区相关的问题

2019-11-24  本文已影响0人  张鑫zhangxin

一、问题

一个case,本地跑没有任何问题,但一布到jenkins上,就会报错,错误的内容是实际返回的时间与断言里的预期时间差了8个小时

二、分析问题

怀疑是时区问题,因为与开发调接口时没有发现问题,怀疑与jenkins服务器上设置的时区相关,经查本地跑的接口时CST时区,但从jenkins上跑出来的是UTC时区。

检查我们的case,发现通过jenkins运行,在传date类型的参数时,落库的时候时间就出现了8小时的问题,我们传的date类型的参数,是通过时间戳转成的date,问题可能就出现在这个时间戳转date的方法中。

经检查我们的beanShell发现,方法中没有设置默认时区,都是按照我们本地的时区来的,我们本地的时区恰好与开发人员服务器的时区一致,所以本地运行没有出现问题,但在jenkins上运行的时候,jenkins上服务器的时区是UTC时区,所以出现了本地运行和在jenkins上运行时间差8小时的问题

三、解决方案

在时间戳转date的方法上设置默认时区

四、思考与总结

1.以往接口参数一般都是传时间戳,第一次遇到传date类型,以后接口设计是否应传时间戳更加合适一些?

2.涉及到date类型,需考虑时区问题

3.时间戳和时区。

时间戳:

时间不分东西南北、在地球的每一个角落都是相同的。他们都有一个相同的名字,叫时间戳。时间戳 指的就是Unix时间戳(Unix timestamp)。定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数。

时区:

时间戳 在地球的每一个角落都是相同的,但是在相同的时间点会有不同的表达方式,所以有了另外一个时间概念,叫时区。这里的时区与地区不是同一个概念,例如我们所在的时区叫 东八区 

上一篇 下一篇

猜你喜欢

热点阅读