Hi
I would like to suggest the development of a FTP/SFTP TestStep where I can FTP a generated DataSink file.
That will assist me greatly in automating an entire end to end process without the need for Groovy.
Thank you.
Regards
Charles
Hi
I would like to suggest the development of a FTP/SFTP TestStep where I can FTP a generated DataSink file.
That will assist me greatly in automating an entire end to end process without the need for Groovy.
Thank you.
Regards
Charles
GillerM,
I see that the FTP test step is for uploads. Is there one for downloads?
Thanks
There's now an FTP test step available with latest 2.3 release - https://support.smartbear.com/readyapi/docs/general-info/whats-new.html
Please try it
An FTP step will be available in ReadyAPI v2.3.
Thanks,
Mike Giller
Product Owner
Hello Charles,
I can definitely second your request as I had run into the same situation where I had to do an FTP upload.
While we're waiting on the Smartbear to implement it, I have found a solution that you can use meanwhile.
You could also make a Groovy file and add it to the /ext folder so that the FTP function globally available for the entire project.
import org.apache.commons.net.ftp.* import java.io.InputStream import java.io.ByteArrayInputStream String ftphost = context.expand( '${#Project#ftphost}' ) //String ftphost = //"va-dev-dmstable.alterian.com" String ftpuser = context.expand( '${#Project#username}' ) String ftppwd = context.expand( '${#Project#password}' ) int ftpport = 21 def newDropFolderCategoryName = context.expand( '${DM FTP Drop Folders - Create Drop Folder Category#newDropFolderCategoryName}' ) def newImportDropFolderName = context.expand( '${DM FTP Drop Folders - Create Drop Folder Category#newImportDropFolderName}' ) String ftpDir = "/${newDropFolderCategoryName}/${newImportDropFolderName}" int TENSECONDS = 10*1000 int THIRTYSECONDS = 30*1000 //Declare FTP client FTPClient ftp = new FTPClient() try { ftp.setConnectTimeout(TENSECONDS) ftp.setDefaultTimeout(TENSECONDS) ftp.connect(ftphost, ftpport) //30 seconds to log on. Also 30 seconds to change to working directory. ftp.setSoTimeout(THIRTYSECONDS) def reply = ftp.getReplyCode() if (!FTPReply.isPositiveCompletion(reply)) { throw new Exception("Unable to connect to FTP server") } if (!ftp.login(ftpuser, ftppwd)) { throw new Exception("Unable to login to FTP server") } if (!ftp.changeWorkingDirectory(ftpDir)) { throw new Exception("Unable to change working directory on FTP server") } //Change the timeout here for a large file transfer that will take over 30 seconds //ftp.setSoTimeout(THIRTYSECONDS); ftp.setFileType(FTPClient.ASCII_FILE_TYPE) ftp.enterLocalPassiveMode() // String filetxt = "Some String file content" // InputStream is = new ByteArrayInputStream(filetxt.getBytes('US-ASCII')) String filename = "C:\\QA_Automation_Branch\\DataFiles\\email_list_test_file_15_records_FTP.csv"; is = new FileInputStream(filename); try { if (!ftp.storeFile("email_list_test_file_15_records_FTP.csv", is)) { throw new Exception("Unable to write file to FTP server") } //Make sure to always close the inputStream } finally { is.close() } } catch(Exception e) { //handle exceptions here by logging or auditing } finally { //if the IO is timed out or force disconnected, exceptions may be thrown when trying to logout/disconnect try { //10 seconds to log off. Also 10 seconds to disconnect. ftp.setSoTimeout(TENSECONDS); ftp.logout(); //depending on the state of the server the .logout() may throw an exception, //we want to ensure complete disconnect. } catch(Exception innerException) { //You potentially just want to log that there was a logout exception. } finally { //Make sure to always disconnect. If not, there is a chance you will leave hanging sockects ftp.disconnect(); } } return true