Cypress测试顺序是否影响结果?PDF上传用例开头通过末尾报atob错误
Failed to execute atob on Window报错的核心原因是代码尝试对非合法Base64格式的字符串执行解码操作,对应你的场景就是调用attachFile时传入的PDF相关内容不符合Base64规范,具体到测试顺序影响结果的情况,常见诱因有3种:
- 测试套件状态污染
如果你手动关闭了Cypress默认的测试隔离配置(
testIsolation: false),或是将PDF文件路径、文件内容的读取逻辑放在了before全局钩子而非beforeEach每个用例前执行的钩子中,前面的测试用例可能会修改这个套件级别的变量值,比如误赋值为其他字符串、或是异步读取的内容被截断,导致后续测试调用上传方法时拿到非法内容。
如果你使用的是较旧版本的cypress-file-upload插件,存在已知的缓存bug:多次调用attachFile上传Base64编码文件时会残留之前的文件缓冲区,导致后续传入的Base64字符串被拼接或截断,变成非法格式。 - 文件路径解析失效
如果前面的测试用例执行了自定义的文件系统操作、或是修改了Cypress的fixture目录默认配置,会导致你定义的
pdfFilePath相对路径解析错误,最终读取到的不是目标PDF文件,而是404响应文本、错误日志这类非Base64内容,解码时自然触发报错。 - 异步逻辑时序问题
如果你是通过
cy.fixture()异步读取PDF的Base64内容赋值给相关变量,测试放在套件开头执行时,环境资源充足,读取逻辑能在attachFile执行前完成;放到套件末尾执行时,前面的测试占用了较多内存和运行资源,异步读取速度变慢,attachFile执行时还没拿到完整的Base64内容,传入了空值或不完整的字符串触发报错。
快速排查方法
你可以在attachFile执行前加一行日志打印pdfFilePath以及实际读取到的文件内容,对比测试放在开头和末尾执行时的输出差异,就能快速定位具体诱因。
内容的提问来源于stack exchange,提问作者JeyKey

