You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

本地与GitHub Action生成SQLite文件哈希不一致问题排查

SQLite数据库初始化测试的跨环境哈希差异问题

我有一个用于处理SQLite数据库的Python模块,提供两个核心函数:

  • init_database():当数据库不存在时,通过CREATE TABLE语句创建数据库文件
  • upgrade_database():通过ALTER TABLE等语句更新数据库Schema,用于程序版本迁移

为确保核心功能正常,我编写了PyTest测试用例,通过对比生成文件的SHA-256哈希值来验证初始化后的数据库文件是否符合预期。初始化测试的代码如下:

def test_init_database():
    # PATH_DIRNAME 是存储文件路径的常量
    db_path = f"{PATH_DIRNAME}/files/database.db"

    if path.exists(db_path):
        # 若文件存在则删除(测试重复执行时会出现)
        remove(db_path)

    get_db(db_path).init_database()

    with open(f"{PATH_DIRNAME}/files/database/database.sha256", "r") as file:
        # 文件末尾可能有空白行,仅取第一行
        # 这是文件正确生成时应有的哈希值
        expected_sum = file.read().split("\n")[0]

    with open(db_path, "rb") as file:
        # 计算生成的数据库文件SHA-256哈希并对比
        assert hashlib.sha256(file.read()).hexdigest() == expected_sum

本地运行该测试可正常通过,但在GitHub Action中执行时断言失败,哈希值不一致。我配置工作流将生成的文件作为工件上传后对比,发现本地与GitHub Action生成的文件仅单个字节不同:

$ xxd gha_workflow/database.db > gha_workflow.hex
$ xxd local/database.db > local.hex
$ diff local.hex gha_workflow.hex
7c7
< 00000060: 002e 5f1d 0d0f f800 0a0b ac00 0f6a 0fc7  .._..........j..
---
> 00000060: 002e 5f1c 0d0f f800 0a0b ac00 0f6a 0fc7  .._..........j..

注:第四个字节不同(1d vs 1c)。

请问该差异由什么导致?我的测试方法是否有误?


内容的提问来源于stack exchange,提问作者Deuchnord

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 03:45:41