【问题标题】:Robot framework: Get multiple files from remote location to target directory机器人框架:从远程位置获取多个文件到目标目录
【发布时间】:2016-08-30 03:14:08
【问题描述】:

使用 Robot Framework,有没有办法将多个文件从一个目录复制到本地目录?

我在 SSHLibrary 中看到了 Get File 关键字。 它支持复制多个文件,但在指定目标目录时不起作用。

如果我们只指定一个要复制的文件,则目标目录参数有效。
如果在源文件中指定了多个文件(例如 /path/*.ext)并且指定了目标目录,则会出现以下错误:

Cannot copy multiple source files to one destination file

如果我删除目标目录作为参数,那么所有文件都会被复制到执行目录,这是我想要避免的。

这是一个存根:

Get Remote files 
     [Arguments]    ${HOST} ${ROOT_PASS}    ${TARGET_DIR}
     Open Connection  ${HOST}
     Login  ${ROOT_USER}    ${ROOT_PASS}
     Log To Console     Logged in to server
     SSHLibrary.Get File    //*.ext ${TARGET_DIR}
     Log To Console     Files copied to ${TARGET_DIR}

【问题讨论】:

  • 指定目录的时候,是怎么做的呢?目录是否以“/”(或 Windows 上的“\”)结尾?目标目录是否存在?
  • 我在 Windows 上工作。目标目录指定为绝对路径(不以 / 结尾)且已存在。
  • 你能显示你调用关键字的确切方式吗?
  • 我正在使用 SSHLibrary 从远程服务器获取文件。见robotframework.org/SSHLibrary/latest/SSHLibrary.html#Get%20File
  • 我明白这一点。这将有助于了解您如何调用关键字。不看实际代码很难找到代码中的错误。

标签: automation robotframework


【解决方案1】:

如果你想从其他文件夹中的文件夹下载多个文件,那么你可以使用 SSH 库的**Get Directory****List Directories In Directory** 方法。

  1. 创建一个关键字“从远程服务器获取文件夹并复制它”,它带有两个参数:源文件夹路径和目标文件夹路径。

    ***Keywords***
    Get Folder from remote server and copy it
        [Documentation]    Used to copy Folder within Folder from some source location(can be from local or remote machine) to destination location(can be into local or remote machine)
        [Arguments]    ${source}    ${destination}
        Log To Console    \n--------------------------------Copying Result folder from remote machine to local machine      
        Get Directory    ${source}    ${destination}
        @{directories}    List Directories In Directory    ${source}
        : FOR    ${dir}    IN    @{directories}
        \    ${currentSrc}    Catenate    SEPARATOR=     ${source}    ${dir}           
        \    ${currentDestination}    Catenate    SEPARATOR=     ${destination}    ${dir}
        \    Get Directory    ${currentSrc}    ${currentDestination}
    
  2. 在你的测试用例中调用这个关键字。

    *** Test Cases ***
    Copy multiple files    
        Get Folder from remote server and copy it locally    ${Resultsource}  ${Resultdestination}
    

【讨论】:

    【解决方案2】:

    这是一个测试机器人脚本,它成功地将所有文件从远程机器中获取到本地机器中的目标目录。

    技巧是用 / 结束目标目录(使用 ${/} 表示平台无关,比如 C:${/}temp${/} 在 Windows 上告诉 C:/temp/,无论如何下面给出的 linux 示例)

    *** Settings ***
    
    Library                SSHLibrary
    
    *** Variables ***
    ${SERVER}                   192.168.0.1
    ${SYSTEM_USER}                  app1
    ${SYSTEM_PASSWORD}              app1xxx
    ${QUERY}                        /home/app1/test/configuration/*.props
    ${TARGET_DIR}                   /tmp/test/
    *** Test Cases ***
    
    
    Get Multiple Files To A Directory
        [tags]              multi-files
        Get Remote files  ${SERVER}     ${SYSTEM_USER}  ${SYSTEM_PASSWORD}  ${QUERY}    ${TARGET_DIR}
    
    *** Keywords ***
    Get Remote files
         [Arguments]    ${host}     ${user}     ${pwd}    ${query}     ${dir}
         Open Connection  ${host}
         Login  ${user}    ${pwd}
         Log To Console     Logged in to server
         SSHLibrary.Get File    ${query}    ${dir}
         Log To Console     Files copied to ${TARGET_DIR}
         close all connections
    

    【讨论】:

      【解决方案3】:

      我假设 SSHLibrary 文档中存在错误。

      来自获取文件的文档:

      1. 如果目标是现有文件,则通过它下载源文件。 2. 如果目标是现有目录,则将源文件下载到其中。可能的同名文件被覆盖。 3. 如果destination不存在且以本地操作系统的路径分隔符结尾,则认为是目录。然后创建目录并将源文件下载到其中。还创建了可能缺少的中间目录。 4. 如果目标不存在且不以本地路径分隔符结尾,则认为是文件。使用该文件名下载并保存源文件,并且还会创建可能缺少的中间目录。

      我假设 (2) 就像 (3) 一样,您需要在目标文件夹上添加尾随 /。

      您也可以尝试指向一个不存在的文件夹(将在现场创建) - 再次使用尾随 /

      【讨论】:

      • 是的,我正在使用 SSHLibrary。我在尝试了所有这些组合后发布了这个问题这些都不起作用。现在我首先将所需的文件复制到 ROBOT 的本地工作目录,然后使用 OperatingSystem 库中的“移动文件”关键字将它们移动到我的目标目录。 robotframework.org/robotframework/latest/libraries/
      猜你喜欢
      • 1970-01-01
      • 2019-07-04
      • 2012-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-19
      • 2017-11-11
      • 2016-09-17
      相关资源
      最近更新 更多