V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
WoodenTea
V2EX  ›  程序员

各位会修改测试环境的时间去测试代码吗

  •  
  •   WoodenTea · 2022-10-15 15:44:38 +08:00 · 2174 次点击
    这是一个创建于 799 天前的主题,其中的信息可能已经有所发展或是发生改变。

    工作中难免会写未来时间的活动,有两种方案让我选择

    1. 同事建议使用一个缓存来存储未来时间的值,测试环境修改该缓存值来模拟服务器时间。
    2. 我个人倾向于修改服务器或容器内的时间,让代码运行环境时间与活动时间一致,能保证测试用例通过后,以后程序正式发布后不会出现时间判断不正确的问题。 各位会选择哪个方案?说说原因哇
    22 条回复    2022-10-16 10:37:48 +08:00
    wu00
        1
    wu00  
       2022-10-15 16:07:40 +08:00   ❤️ 1
    两分钟后不也算“未来时间”?
    flyqie
        2
    flyqie  
       2022-10-15 16:33:36 +08:00 via Android   ❤️ 1
    个人倾向第二种。

    第一种得单独规定,实际执行起来有可能利大于弊。
    guo4224
        3
    guo4224  
       2022-10-15 16:46:51 +08:00   ❤️ 1
    mock 不香?
    flyqie
        4
    flyqie  
       2022-10-15 17:03:35 +08:00 via Android   ❤️ 1
    @flyqie #2

    fix:

    利大于弊 -> 弊大于利
    learnshare
        5
    learnshare  
       2022-10-15 17:39:59 +08:00   ❤️ 3
    Switch: 没想过用户会修改时间重刷 amiibo
    xy90321
        6
    xy90321  
       2022-10-15 17:56:48 +08:00 via iPhone   ❤️ 4
    我司项目里的大部分系统,不管是系统时间还是业务时间都是通过自建 Wrapper 拿的,Wrapper 本身包含了时间模拟(真实物理时间➕Offset ,生产环境上 Offset=0 )的功能

    所以测试环境上想要模拟未来时间或者过去时间,也只是改一个参数的问题
    msg7086
        7
    msg7086  
       2022-10-15 18:16:04 +08:00   ❤️ 1
    https://github.com/travisjeffery/timecop
    你们没有类似这种时间旅行用的测试用插件吗?
    WoodenTea
        8
    WoodenTea  
    OP
       2022-10-15 18:22:47 +08:00
    @guo4224 主要是后端代码,感觉使用不上 mock
    WoodenTea
        9
    WoodenTea  
    OP
       2022-10-15 18:24:40 +08:00
    @flyqie 我觉得第一种有太多不确定性,因为有一个变量的存在,测试环境和线上代码运行的逻辑都不一样,万一出现 bug 还是我来修改
    WoodenTea
        10
    WoodenTea  
    OP
       2022-10-15 18:24:55 +08:00
    @wu00 算呀
    WoodenTea
        11
    WoodenTea  
    OP
       2022-10-15 18:25:33 +08:00
    @learnshare 我写的是后端,后端代码不会以客户端时间来作为判断标准
    WoodenTea
        12
    WoodenTea  
    OP
       2022-10-15 18:25:58 +08:00
    @msg7086 好的,学习一下
    jones2000
        13
    jones2000  
       2022-10-15 22:02:07 +08:00   ❤️ 1
    自动化测试用例跑下不就可以了, 跑脚本配置好时间,然后跑测试用例, 最后跑脚本还原时间。
    我还写过最变态的测试用例了,测试用例上写“在一个全新的系统上跑页面”, 每次都先跑自动安装操作系统,然后跑测试用了。
    IvanLi127
        14
    IvanLi127  
       2022-10-16 03:15:26 +08:00 via Android   ❤️ 1
    当年实习的时候,在自己电脑测,会选第一种。现在,有容器,有虚拟机,还有独立物理机,改系统时间和玩一样,我选第二种。
    Musong
        15
    Musong  
       2022-10-16 03:15:44 +08:00   ❤️ 1
    我们这是#6 的做法,操作简单,给测试或产品管理工具加个配置项;而且修改时间本身的逻辑不影响项目,测试不用再针对这个东西做测试
    akira
        16
    akira  
       2022-10-16 06:14:54 +08:00   ❤️ 1
    方案 2 不是说不可行,但是总觉得怪怪的。。。
    matrix1010
        17
    matrix1010  
       2022-10-16 09:37:35 +08:00 via iPhone   ❤️ 1
    是不是类似于用户注册 5 天后发邮件这种功能,你想在测试环境手工测测?那可以把 5 天放配置文件里,直接改测试环境的配置
    foam
        18
    foam  
       2022-10-16 09:57:41 +08:00 via Android   ❤️ 1
    你可以把 获取当前时间 这个(业务级或使用的语言库函数级)方法 mock 掉。mock 和前后端没有关系,都是为了模拟依赖资源。
    WoodenTea
        19
    WoodenTea  
    OP
       2022-10-16 10:05:23 +08:00
    @akira 你认为怪怪是指什么呢?能具体讨论一下么?怎么样才能不怪怪的呢
    WoodenTea
        20
    WoodenTea  
    OP
       2022-10-16 10:08:00 +08:00
    @matrix1010 比如某天 22 点 0 分开始有一个抽奖活动,时间没有到用户进入界面要展示距离开始还有多少时间,时间到了之后要展示距离活动还有多久结束
    WoodenTea
        21
    WoodenTea  
    OP
       2022-10-16 10:09:29 +08:00
    @foam 我感觉 mock 是第一种方案的另一种实现方式
    foam
        22
    foam  
       2022-10-16 10:37:48 +08:00 via Android
    @WoodenTea 这里的 mock 是针对单元 /集成测试场景的。如果是实际功能测试,6 楼的可行。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2863 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 12:50 · PVG 20:50 · LAX 04:50 · JFK 07:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.