本地与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
相关产品推荐
相关产品推荐

