协作Web应用程序的端到端UI测试?

时间:2013-03-07 23:58:56

标签: unit-testing angularjs jasmine end-to-end

我们有一个协作网络应用程序,在用户A的浏览器中执行的操作将在用户B的浏览器中产生副作用。聊天室是应用程序的一部分,也是我们尝试测试的一个很好的例子。

我们目前的筹码是:

  • 前端的AngularJS
  • Express在节点上运行以提供静态文件
  • 在Node上运行的Socket.IO处理客户端浏览器之间的Web套接字通信
  • 我们构建过程的早午餐
  • Angular Seed是我们测试的起点
  • 实际测试框架的Jasmine
  • Testacular运行测试

测试此测试的最佳方法是什么?而“最好的”我的意思是“任何”。完整集成测试需要2个浏览器和2个Web服务器(HTML和Web套接字)。两个Web服务器都在Node上运行,因此至少它与Testacular的其余部分处于相同的环境中。

在我看来,它需要

  1. 启动套接字服务器的实例
  2. 在Jasmine中启动Web浏览器,并保留对该浏览器的引用
  3. 启动另一个浏览器,浏览器B,并保留该引用。
  4. 向浏览器A发出命令并在浏览器B中测试结果更改。
  5. 有没有人遇到这类测试的文档或示例(最好是使用Jasmine的Testacular,但我们愿意接受选项)?甚至关于使用哪些搜索术语的建议也会有所帮助。

1 个答案:

答案 0 :(得分:0)

我不确定我的建议是否会对你有所帮助。

我想到的第一个工具是Selenium。好消息(基于您当前使用的堆栈)是您可以使用JavaScript进行编写测试。这是一个在Google上搜索术语“Cheese”然后将结果页面的标题输出到控制台的示例:

var driver = new webdriver.Builder().build();
driver.get('http://www.google.com');

var element = driver.findElement(webdriver.By.name('q'));
element.sendKeys('Cheese!');
element.submit();

driver.getTitle().then(function(title) {
  console.log('Page title is: ' + title);
});

driver.wait(function() {
  return driver.getTitle().then(function(title) {
    return title.toLowerCase().lastIndexOf('cheese!', 0) === 0;
  });
}, 3000);

driver.getTitle().then(function(title) {
  console.log('Page title is: ' + title);
});

driver.quit();

我认为使用Selenium 2可以“打开”更多浏览器实例 - 这意味着您将能够测试它们之间的副作用/交互。

作为替代方案,您还可以查看使用Selenium的WindMill项目,UItest.js或商业产品Twist或(也是Spudley提到的)Sahi作为{ {3}}用于测试。