在cy.exe()中使用ssh总是得到超时错误



我在cypress exec命令中使用ssh命令。ssh命令工作正常,但我从exec()函数总是得到超时错误。

我的代码是:
cy.exec('ssh username@111.111.1.1  "file.exe"')

实际上这段代码工作正常,我可以看到file.exe工作在远程桌面,但我在exec()上得到错误。

我认为我必须在ssh命令中添加一些选项,如-q -w。我试了一些,但没有工作。

你能帮帮我吗?

也许exec在与被调用的命令交互的方式上太有限了,您需要一个可编程的API,而不仅仅是配置选项。

你可以尝试使用一个任务代替,有一个库node-ssh将与Cypress任务接口。

我不熟悉ssh协议,所以您必须填写这些细节,但这里是Cypress任务和node-ssh库的基本示例

柏树/插件/index.js

module.exports = (on, config) => {
on('task', {
ssh(params) {  
const {username, host, remoteCommand} = params // destructure the argument
const {NodeSSH} = require('node-ssh')
const ssh = new NodeSSH()
ssh.connect({
host: host,
username: username,
privateKey: '/home/steel/.ssh/id_rsa'  // maybe parameterize this also
})
.then(function() {
ssh.execCommand(remoteCommand, { cwd:'/var/www' })  
.then(function(result) {
console.log('STDOUT: ' + result.stdout)
console.log('STDERR: ' + result.stderr)
})
})
return null   
},
})
}

返回结果

上面的ssh代码只是来自node-ssh的示例页面。如果你想返回result的值,我想这就可以了。

module.exports = (on, config) => {
on('task', {
ssh(params) { 

const {username, host, remoteCommand} = params // destructure the argument
// returning promise, which is awaited by Cypress
return new Promise((resolve, reject) => {
const {NodeSSH} = require('node-ssh')
const ssh = new NodeSSH()
ssh.connect({   
host: host,
username: username,
privateKey: '/home/steel/.ssh/id_rsa'
})
.then(function() {
ssh.execCommand(remoteCommand, { cwd:'/var/www' })
.then(function(result) {
resolve(result)          // resolve to command result
})
})
})
},
})
}

在测试

cy.task('ssh', {username: 'username', host: '111.111.1.1', command: 'file.exe'})
.then(result => {
...
})

一个任务只允许有一个参数,所以传入一个对象并在任务内部解构它,如上所示。

相关内容

  • 没有找到相关文章

最新更新