我打算测试一个简单的实时网络应用程序。这个应用程序是用 JavaScript 编写的,它显示登录用户的“存在状态”。如果用户A记录他的状态正在从“非活动”修改为“活动”。此操作会反映到登录到应用程序的所有其他用户。登录的用户 B 实时显示用户 A 的存在以进行更改。
我想测试这种情况。测试处理程序打开一个浏览器,执行写入操作,同时更新第二个浏览器。
有哪些工具可用?这可以用 WebDriver/WebDriverJs 完成吗?我可以通过 WebDriver 处理两个线程/会话吗?有什么例子吗?
我打算测试一个简单的实时网络应用程序。这个应用程序是用 JavaScript 编写的,它显示登录用户的“存在状态”。如果用户A记录他的状态正在从“非活动”修改为“活动”。此操作会反映到登录到应用程序的所有其他用户。登录的用户 B 实时显示用户 A 的存在以进行更改。
我想测试这种情况。测试处理程序打开一个浏览器,执行写入操作,同时更新第二个浏览器。
有哪些工具可用?这可以用 WebDriver/WebDriverJs 完成吗?我可以通过 WebDriver 处理两个线程/会话吗?有什么例子吗?
您可以使用 WebdriverJS 来做到这一点。只需创建两个 Webdriver 实例并导航它们,例如:
var WebdriverJS = require('webdriverjs'),
assert = require('assert'),
browser1 = new WebdriverJS({
desiredCapabilities: {browserName:'chrome'}
}).init().url('http://github.com'),
browser2 = new WebdriverJS({
desiredCapabilities: {browserName:'chrome'}
}).init().url('http://github.com');
browser1
.setValue('#js-command-bar-field',['webdriverjs','Enter'])
.getText('.sort-bar h3',function(err,text) {
assert(text.indexOf('found 24 repository results') >= 0);
})
.end();
browser2
.setValue('#js-command-bar-field',['linux','Enter'])
.getText('.sort-bar h3',function(err,text) {
assert(text.indexOf('We\'ve found 22,466 repository results') >= 0);
})
.end();
两个 Chrome 窗口打开,将独立执行您的指令。
使用更高版本的 WebDriver.js,所有异步操作都在控制流中进行管理。因为控制流会以正确的顺序序列化所有操作,所以仅仅创建多个驱动实例可能是不够的。一个驱动程序上的所有操作都将发生在另一个驱动程序上的操作之前。
要实现真正的并行化,请创建多个控制流。以下是文档https://code.google.com/p/selenium/wiki/WebDriverJs#Defining_Multiple_Flows的摘录:
var terms = [
'javascript',
'selenium',
'webdriver'
];
var flows = terms.map(function(term) {
return webdriver.promise.createFlow(function() {
var driver = new webdriver.Builder().build();
driver.get('http://www.google.com');
driver.findElement(webdriver.By.name('q')).sendKeys(term);
driver.findElement(webdriver.By.name('btnG')).click();
driver.getTitle().then(function(title) {
if (title !== (term + ' - Google Search')) {
throw Error('Unexpected title: ' + title);
}
});
});
});
webdriver.promise.fullyResolved(flows).then(function() {
console.log('All tests passed!');
});
Selenium Grid 选项应该可以解决问题。您将在此处找到一个教程 ,您可以使用 webdriverJS 进行调整。
你可以用 WebDriver 来做,但是如果你想在同一台机器上运行两个浏览器,最好的方法是使用不同的浏览器,这样你就可以有两个不同的会话。
因此,尝试使用 ChromeDriver 和 FirefoxDriver,您将有两个不同的会话来测试您的应用程序。