在Windows下使用RobotFramework下载文件

it2026-02-03  1

在Windows下使用RobotFramework下载文件

前言

这个需求其实很少见,但是在需要下文件进行测试的时候还是很头疼的,研究了一天,参考了网上的一些资料都写的比较简单,故写下来供参考。

方案制定

首先要明确一件事,我所知的RobotFramework目前没有Keyword可以直接用来下载文件,我想到的有两种方法可以用来下载文件。

打开浏览器模拟点击下载在RobotFramework上运行CMD命令进行下载

打开浏览器模拟点击下载

这种方法的看起来还是很简单的,但是仔细实施起来会非常困难,因为下载文件时,有些浏览器会弹出一些框,而这些框需要引入其他库去操作,过于麻烦,故选择第二种方式。

在RobotFramework上运行CMD命令进行下载

在RobotFramework的OperatingSystem库中,有一个叫Run and return rc的Keyword,这个Keyword可以用来运行一些系统级别的指令,例如,在Windows下可以运行cmd命令;在Linux下,可以运行shell脚本。经过查询和反复实验,最后发现使用bitsadmin效果很好。就开始着手写Keyword。

需要使用到的库

OperatingSystemBuiltInDateTime

方案实现

首先是编写cmd指令,将文件下载到c盘的tmp下的pkg文件夹中并在系统中测试通过:

bitsadmin /transfer job1 /download /priority normal "https://xxx.xxx.com/${FILENAME}" "C:\\tmp\\pkg\\${FILENAME}"

这其中的job1相当于任务的ID,是不能重复的,因此我们使用文件名+时间的方式来防止重复发生。因此可以写出这条Keyword:

Run and return rc bitsadmin /transfer ${FILENAME}${time} /download /priority normal "https://xxx.xxx.com/${FILENAME}" "C:\\tmp\\pkg\\${FILENAME}"

当这条命令执行成功时,将会return 0,如果执行失败,会返回1-200之间的一个整数。因此,可以加入变量来判断是否执行成功。 这便是整个下载的核心部分,加入成功与否判断,加入文件是否存在判断,超时自动失败等锦上添花的功能后,最后的代码如下:

*** Settings *** Library OperatingSystem Library BuiltIn Library DateTime *** Variables *** ${rc} ${EMPTY} *** Test Cases *** Run Download File Download File 1.tgz *** Keywords *** Download File [Arguments] ${FILENAME} [Timeout] 5 minutes ${time} Get Current Date UTC +8 hours result_format=%Y-%m-%d-%H_%M_%S File should not exist /tmp/pkg/${FILENAME} msg=File "${FILENAME}" has existed! Create directory /tmp/pkg ${rc}= Run and return rc bitsadmin /transfer ${FILENAME}${time} /download /priority normal "https://xxx.xxx.com/${FILENAME}" "C:\\tmp\\pkg\\${FILENAME}" Should be equal as integers 0 ${rc} msg=Run Download Command Failed, Please check the Filename values=${EMPTY} base=${EMPTY}
最新回复(0)