系统测试、监控与可观测性的全面解析
1. 基于属性的测试
在软件开发中,对业务逻辑进行多场景测试的能力对于增强系统信心至关重要。基于属性的测试是一种强大的方法,可用于验证系统相对于暴露的 GraphQL 接口的行为。
1.1 多场景模拟
以发票管理系统为例,可能存在以下几种操作:
- 创建发票
- 提交发票以供审批
- 批准发票
- 拒绝发票
- 存档发票
发票创建后可被批准或拒绝,被拒绝的发票可重新批准,且只有被拒绝的发票才能存档。基于属性的测试不仅要生成创建发票的输入,还要生成一系列操作步骤。这种方法能模拟用户在系统工作流中可能采取的各种路径,发现一些难以通过示例测试发现的边缘情况。
1.2 状态测试预言机
为了支持一系列操作的测试,基于属性的测试需要一个有状态的测试预言机。当执行一个操作时,突变会同时发送到系统和测试预言机。预言机可预测 GraphQL 查询和订阅中应出现的变化。
1.3 确定性要求
编写基于属性的测试及其相关预言机时,所有操作必须是确定性的,这样在测试期望失败时可以重现测试场景。例如,使用 Java 的 HashMap 存储测试预言机状态可能会导致问题,因为它不保证内容的迭代顺序。可以使用 LinkedHashMap 来解决这个问题。
系统本身也需要是确定性的。在设计中,突变由命令生成器处理,最终将命令追加到命令日志中,命令的处理顺序由命令日志中的顺序决定。不过,命令生成器中涉及外部系统的工作可能不是确定性的,需要根据具体情况解决,例如将外部系统的响应作为操作的额外输入。 </
超级会员免费看
订阅专栏 解锁全文
47

被折叠的 条评论
为什么被折叠?



