Добрый день,
подскажите как (и возможно ли вообще) в soapui коннектиться к удаленному серверу? Например, для просмотра файлов.
Спасибо!
Добрый день,
подскажите как (и возможно ли вообще) в soapui коннектиться к удаленному серверу? Например, для просмотра файлов.
Спасибо!
хм никогда не задавался такой задаей
я так понимаю, Вы хотите подконнектиться к ssh через groovy ?
ну или использую груви или может есть какие-то другие способы. главное надо осуществлять определеные действия на сервере с файлами.
Я делал через консоль Linux-a и работал с потоками ввода/вывода. Другого пути я не нашел. Настраиваем автоконнект с помощью пары ключей, или используем sshpass - доп. ПО для передачи пароля в консоль. Другого выхода я не нашел.
Если вам нужно оперировать только файлами, то можно конечно поднять там Samba и использовать в Groovy стандартный класс File (работа без аутентификации) или Smb пакет (работа с аутентификацией). Решать Вам, конечно, но работа ч/з консоль и потоками довольно сложная, так как отслеживать нудно все 3!!! стандартных потока (Input, output, error), ну и писать довольно сложный обработчик/парсер. Имхо проще Samba настроить. Но в моём случае нужно было управлять daemon-ами и запускать файлы на удаленной машине, поэтому только консоль, но повторюсь, всё довольно непросто, тем более стоит учитывать что в SoapUI не крайняя версия Groovy.
ja ispolzuu groovy step to run ssh command.
tak vigljadit moi groovy step:
def command = 'ls -lrt'
def scriptsLocation = context.expand('${projectRoot}' ) + '/scripts/'
//SSHCommandExecutor sshCommandExecutor = new SSHCommandExecutor()
SSHCommandExecutor sshCommandExecutor = context.getProperty("sshCommandExecutor")
def result = sshCommandExecutor.executeCommand(command, scriptsLocation)
log.info result
chtoby execute etot script v moem sluchae:
import java.io.InputStream;
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelExec;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
import groovy.util.logging.Log
@Log
class SSHCommandExecutor {
def Session session = null;
def sshHost = null;
def sshUser = null;
def sshPassword = null;
def configFile = "config.properties"
def response = ''
boolean autoCloseSession = true
def executeCommand(command, scriptsLocation) {
try{
if(session == null){
initializeSSHProperties(scriptsLocation)
}
Channel channel=session.openChannel("exec")
((ChannelExec)channel).setCommand(command)
channel.setInputStream(null)
((ChannelExec)channel).setErrStream(System.err)
InputStream inputStream = channel.getInputStream()
channel.connect()
byte[] tmp=new byte[1024]
response = ''
while(true){
while(inputStream.available()>0){
int i=inputStream.read(tmp, 0, 1024)
if(i<0)break
log.info "" + new String(tmp, 0, i)
response = response+new String(tmp, 0, i)
}
if(channel.isClosed()){
log.info "exit-status: " + channel.getExitStatus()
break
}
try{
Thread.sleep(1000)
}catch(Exception ee){
}
}
channel.disconnect()
if(autoCloseSession){
closeSession()
}
log.info "DONE";
return response;
}catch(Exception e){
e.printStackTrace();
}
}
def executeCommandsFromFile(scriptsLocation, filePath) {
if(session == null){
initializeSSHProperties(scriptsLocation)
}
def oldAutoCloseSession = autoCloseSession
autoCloseSession = false
def scriptFile = new File(filePath)
def finalResult = ''
scriptFile.eachLine { line ->
log.info '>' + line
def result = executeCommand(line, scriptsLocation)
System.out.println result
finalResult = finalResult + result
}
if(oldAutoCloseSession){
closeSession()
}
autoCloseSession = oldAutoCloseSession
return finalResult
}
def executeCommands(scriptsLocation,String commandLines, String separator) {
if(session == null){
initializeSSHProperties(scriptsLocation)
}
def oldAutoCloseSession = autoCloseSession
autoCloseSession = false
String [] commnads = commandLines.split(separator)
def finalResult = ''
for(String command: commnads){
finalResult = finalResult + executeCommand(command, scriptsLocation)
}
if(oldAutoCloseSession){
closeSession()
}
autoCloseSession = oldAutoCloseSession
return finalResult
}
def executeStartMVPServer(scriptsLocation) {
try{
def restartCommand = "~/arf/fileToRun.sh"
if(session == null){
initializeSSHProperties(scriptsLocation)
}
Channel channel=session.openChannel("exec");
((ChannelExec)channel).setCommand(restartCommand);
channel.setInputStream(null);
((ChannelExec)channel).setErrStream(System.err);
InputStream inputStream = channel.getInputStream();
channel.connect();
byte[] tmp=new byte[1024];
response = '';
while(true){
while(inputStream.available()>0){
int i=inputStream.read(tmp, 0, 1024);
if(i<0)break;
log.info "" + new String(tmp, 0, i);
response = response+new String(tmp, 0, i);
}
if(channel.isClosed()){
log.info "exit-status: " + channel.getExitStatus();
break;
}
try{
Thread.sleep(1000);
}catch(Exception ee){
}
}
channel.disconnect();
if(autoCloseSession){
closeSession()
}
log.info "DONE";
return response;
}catch(Exception e){
e.printStackTrace();
}
}
def executeStopMVPServer(scriptsLocation) {
try{
def restartCommand = "~/arf/fileToRun.sh"
if(session == null){
initializeSSHProperties(scriptsLocation)
}
Channel channel=session.openChannel("exec");
((ChannelExec)channel).setCommand(restartCommand);
channel.setInputStream(null);
((ChannelExec)channel).setErrStream(System.err);
InputStream inputStream = channel.getInputStream();
channel.connect();
byte[] tmp=new byte[1024];
response = '';
while(true){
while(inputStream.available()>0){
int i=inputStream.read(tmp, 0, 1024);
if(i<0)break;
log.info "" + new String(tmp, 0, i);
response = response+new String(tmp, 0, i);
}
if(channel.isClosed()){
log.info "exit-status: " + channel.getExitStatus();
break;
}
try{
Thread.sleep(1000);
}catch(Exception ee){
}
}
channel.disconnect();
if(autoCloseSession){
closeSession()
}
log.info "DONE";
return response;
}catch(Exception e){
e.printStackTrace();
}
}
def executeRestartMVPServer(scriptsLocation) {
try{
def restartCommand = "~/arf/mmeRestartForGroovy.sh"
initializeSSHProperties(scriptsLocation);
Channel channel=session.openChannel("exec");
((ChannelExec)channel).setCommand(restartCommand);
channel.setInputStream(null);
((ChannelExec)channel).setErrStream(System.err);
InputStream inputStream = channel.getInputStream();
channel.connect();
byte[] tmp=new byte[1024];
response = '';
while(true){
while(inputStream.available()>0){
int i=inputStream.read(tmp, 0, 1024);
if(i<0)break;
log.info "" + new String(tmp, 0, i);
response = response+new String(tmp, 0, i);
}
if(channel.isClosed()){
log.info "exit-status: " + channel.getExitStatus();
break;
}
try{
Thread.sleep(1000);
}catch(Exception ee){
}
}
channel.disconnect();
if(autoCloseSession){
closeSession()
}
log.info "DONE";
return response;
}catch(Exception e){
e.printStackTrace();
}
}
def createSession() {
try{
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
JSch jsch = new JSch();
Session session=jsch.getSession(sshUser, sshHost, 22);
session.setPassword(sshPassword);
session.setConfig(config);
session.connect();
log.info("Connected");
return session;
}catch(Exception e){
e.printStackTrace();
}
}
def initializeSSHProperties(scriptsLocation){
log.info "Initializing SSH properties"
Properties properties = new Properties()
File propertiesFile = new File(scriptsLocation + '/' + configFile)
propertiesFile.withInputStream {
properties.load(it)
}
sshHost = properties["sshHost"]
sshUser = properties["sshUser"]
sshPassword = properties["sshPassword"]
log.info "sshHost=" + sshHost
log.info "sshUser=" + sshUser
log.info "sshPassword=" + sshPassword
session = createSession()
log.info "Initialized SSH properties";
}
def closeSession(){
session.disconnect()
session = null
log.info 'Session Closed'
}
}