专栏首页搜狗测试让测试数据“时间穿梭”

让测试数据“时间穿梭”

背景

最近小编在项目新版本的测试时发现,因项目需求,代码中很多触发器和校验都是与时间相关的,虽然在单元测试层面我们可以直接调用一些现成的库实现变量化的时间,但在端对端测试时与时间相关的测试数据构造较为繁琐,占用了大量的时间,尤其是小编的项目将服务器放在了云端,用户端行不通,在服务端修改系统时钟也行不通,那么在端对端的测试上,测试的覆盖、结果不可控就成为了主要的问题。针对这些问题,小编进行了一定的调研解决,在这里与大家分享一下。

问题

假设我们有一组测试数据,我们需要按照数据中的用户年龄属性对这批数据进行分组(用户还可能包含很多其它属性),针对不同的组别,代码有不同的处理逻辑。那么问题来了:因为测试数据是死的,如果用户A当前进入了分支1,那么在测试数据不变的情况下, 服务端时间变更,用户A可能在下一秒就进入了分支B,那么这样的结果我们是无法进行断言的,也就是测试结果不可控。

一般来说,有两种解决方案: ①编写修改测试环境的脚本,保证测试环境时间固定。 ②将测试数据自动调整到我们想要的时间,针对上面的问题,就是测试数据时间能够随着测试环境的时间同步变动。

分析上面的选项,必然是第二种情况对测试人员来说更为理想,因为在第一种方案下,如果服务器在云端,是难以修改系统时间的;即使能够修改成功,也会影响在此环境下的并行任务的测试。

让测试数据“时间穿梭”

如何让测试数据实现穿越功能呢,经过调研,我们采用了Testdate这一工具,并在此基础上进行了一定的改编,下面是一例子:

  • 首先安装Testdate
yarn global add @endarn/testdate
  • 假设我们的测试数据组dataset.testdate.json如下格式:
{
  • 接着运行Testdate,假设今天是2019年8月28日
testdate --source 'dataset.testdate.json' \
  • 输出后的dataset.evolved.json如下:
{

testdate解析–source文件的关键字,通过固定的格式将输出重定向至–destination。文件不仅包括json,比如txt, csv等常用类型都是支持的。最终实现让测试数据与服务器时间保持同步。

改编与改造

在实际使用中,Testdate虽然节省了相对时间的测试数据的构造,但是针对固定时间仍需要单独写入测试数据中,虽然工作量不大,但仍是两步操作不能一气呵成,所以拿出源码,我们进行了一定的改造:

如图所示,核心代码是muteTime这个函数,将函数中增加了是否为固定时间的判断,如果是固定时间,则设置为配置的固定时间即可,最后将配置写在下面的方法中:

这样简单的改造,就完成了我们“一气呵成”构造时间相关测试数据的需求。

总结

本文分享了小编在项目测试过程中遇到的一个小问题,这个问题从发现到解决经历了问题定位、问题分析、方案调研、方案评估、方案实现、改造调优、总结的过程。这个过程是小编在工作中遇到大部分问题时要走的一套流程,有了一套通用的方案方法,才能娴熟地解决各类问题,不至于焦头烂额。希望本文对各位能够有所裨益。

本文分享自微信公众号 - 搜狗测试(SogouQA),作者:Boris

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-08-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 代码覆盖率--gcov/lcov/gcovr

    统计C/C++代码覆盖率的工具很多,比如OpenCppCoverage可以与VS工具配合,获取并展示代码覆盖率简单直观,但是在Linux、Mac等系统该如何统计...

    用户5521279
  • 【TestNG快速上手】一、接口自动化

    TestNG是基于java语言并集成JUnit和NUnit的测试框架,具有如下特性:

    用户5521279
  • MindManager文件恢复小技巧

    MindManager思维导图软件是一款很好用的工具,其具有的发散性思维、图形化思维的特点,跟测试用例设计时所需的思维非常吻合,在实际工作中极大提升了我们测试用...

    用户5521279
  • Python有趣|微博榜单爬虫,尽知天下事

    大家对于网页的数据爬虫了解的已经很多了,这次爬取APP端的数据。之前我也讲解过APP爬虫,但是没有讲解过Fiddler的配置和使用。这次以微博榜单为案例,介绍A...

    罗罗攀
  • 深入机器学习系列之:4-KMeans

    本文会介绍一般的k-means算法、k-means++算法以及基于k-means++算法的k-means||算法。在spark ml,已经实现了k-means算...

    数据猿
  • 故宫下雪了!我用Python给它画了一组手绘图,仅用45秒(附代码)

    不过,我们突然想到,可以通过Python将故宫的建筑物图片,转化为手绘图(素描效果)。效果图如下:

    数据派THU
  • 故宫下雪之后!我花了45秒,用Python给它画了一组手绘图

    不过,恋习Python突然想到,可以通过Python将故宫的建筑物图片,转化为手绘图(素描效果)。效果图如下:

    用户6543014
  • Linux Bash基础(二)

    类比C语言中的if else-if else结构,注意结尾是fi,即if反过来写。

    xxpcb
  • 开源.NET企业级应用系统 OpenVista

      看到倡议研究mono,我一直也在关注、跟踪Mono的发展,就是在项目中没有使用过。以前我介绍过一个iFolder Novell开源文件服务器.下面就来介...

    张善友
  • 研究发现:机器人假肢可以提供受控的触觉反馈

    失去手臂并不意味着失去所有的触觉,这要归功于机器人假肢,通过温和的电子反馈刺激神经。

    机器人网

扫码关注云+社区

领取腾讯云代金券