我想创建一种测试库或框架。它的主要目的是在 Android 设备上运行 UI 测试。例如,这是我希望它看起来像的例子
(test-flow
(launch-app "some.app.id")
(assert-visible "Login")
(type-text "admin")
(tap-on "unlockButton")
(assert-visible "HomeScreen"))
我希望这个 API 看起来既好又清晰。基本来说,它原本应该做的是
- 使用 ID 为 "some.app.id" 的应用程序
- 检查屏幕上是否有名为 "Login" 的登录字段可见
- 在登录字段中输入文本 "admin"
- 点击解锁按钮
- 检查文本 "HomeScreen" 是否可见,这意味着我们成功登录。
我已创建了上述所有所需函数,那部分很简单。我将它们设计成返回一个可能包含 :result
或 :error
的哈希表。但我不知道如何将这些函数结合在一起,使它们作为一个测试框架工作。如果我将它们放在某个函数内部,那么如果某个步骤失败,执行将继续到下一个步骤。此外,失败步骤的结果将被丢失。之后,我决定写一个宏,将所有函数转换为列表,逐个评估它们,并返回每个步骤的详细结果。但我失败了(即使是在 ChatGPT 的帮助下),也许是因为我是 Clojure 的菜鸟。
在可能持续一周无法解决这个问题后,我认为可能是我做错了什么。也许有人可以帮助我解决这个问题?
这是我对这个 API 的看法
- 测试的结果应该包含所有执行步骤(函数)的结果
- 如果某个步骤失败,则执行应停止,并返回所有执行步骤的结果。
这个框架给了我灵感,我只是认为使用 REPL 编写这样的测试并且在进行测试时进行一些 Clojure 魔法会更容易一些。
谢谢!