我在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 => {
...
})
一个任务只允许有一个参数,所以传入一个对象并在任务内部解构它,如上所示。