testing - 如何测试两个用户之间的异步网站事件

标签 testing jasmine bdd

我们正在尝试使用 Jasmine 编写 BDD 测试,我们需要处理的一个常见用例是:

User A: Does some action
User B: Gets notified after xx ms that the action has happened asynchronously (either via WebPush or polling)
User B: Responds to user A's action
User A: Receives B's response

我正在努力为这种情况构建自动化测试。我们目前选择的工具是 Jasmine,但我们在这一点上是灵活的。您如何同时处理多个登录,尤其是在响应之间存在一些延迟的情况下?

最佳答案

最简单的方法是简单地轮询每个 Action ,并在检测到该 Action 后移动场景,如果时间太长,超时会导致测试失败。

在任何允许多线程执行的语言中,您可以创建一个等待事件的“Waiter”模式,然后在检测到该事件后将执行传递回测试。我有 a C# example herea Java example here .

Javascript 不允许多线程执行,但是 it can be faked .

但是,我认为您最大的问题是通过两次登录,您基本上有两个选项卡或窗口或选项卡或应用程序,是的,这将很难管理。您可以使用与 Windows 交互的东西来实现它,而不是与浏览器交互(我的 C# 示例来自执行此操作的自动化工具),但这意味着为自动化场景采用完全不同的技术堆栈。

你可以通过将你的场景分成几个部分来解决这个问题:

Given users A and B are running the app
When user A does some action
Then user B should be notified.

对于 B,使用该应用程序的伪造版本;从服务开始剔除所有内容。然后,您可以检查是否通过服务的 API 通知了 B。您甚至可以将 B 收到的内容写入文本文件或类似文件。它不一定是真正的 B。

Given users A and B are running the app
When user B receives a notification from user A
Then user B should respond.

Given users A and B are running the app
When user B responds
Then user A should be notified.

对于这些,我们现在为 A 移除应用程序,首先通过 API 作为 A 通知,然后在第二个验证来自 B 的通知。

Given user A is waiting for user B's response
When A receives user B's response
Then A should (do whatever they would normally do when they receive that response).

我们又回到了对 B 进行 stub ,将 B 的响应注入(inject) API,使整个旅程圆满结束。

在每种情况下,我们仍在验证与服务的交互是否有效;我们只是没有同时做这一切。这应该仍然提供足够的信心,一切都很好。只需要再添加几个场景即可。

也请务必与企业讨论此事,并使用他们在描述他们所做的事情时使用的语言,而不是像我在这里使用的 A 和 B 通知和回复。

关于testing - 如何测试两个用户之间的异步网站事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27569596/

相关文章:

android - 为什么我无法从 Android native 应用程序登录以测试 Facebook 用户帐户?

android - 为测试人员推出测试版本的最佳方式

angularjs - 如何在测试结束时关闭 selenium webdriver?

bdd - 带有时间戳的 Cucumber HTML 报告文件夹

unit-testing - 以随机顺序运行 TestNG 测试

javascript - 如何使用 Protractor 中的 dropzone.js 测试上传文件?

angular - 在 Jasmine 中模拟导入的类实例

java - 在 BDD 测试用例中使用模拟是否明智?

rest - Express.js 的 BDD 测试框架

ruby-on-rails - NoMethodError 运行 cucumber 测试