前言
接口自动化中自然不能少的了上传文件,但是上传文件好多同学不太清楚怎么去做,我这里做一个批量上传的接口,同样也支持单个上传。
开始
首先我们找一个支持文件上传的接口,或者自己写一个(有开发能力可动手实现.)
此处注意:request 上传文件默认编码是asci,我们要改成utf-8,不然中文文件上传是不成功的,具体我就不演示了,想看看不改utf-8效果可以跳过这步。
在python的sit-packages/urllib3路径下找到fields.py文件,如图修改,代码大概在40行左右,具体行数版本不同会不同。
我使用的接口如下:
下面我们开始写上传文件的RF脚本
-
先在TestLibrary写个方法,把文件封装成List形式
files封装好我们可以写上传文件的关键字了
批量上传文件
[Arguments] ${currentDate} @{filelist}
create session api 此处是测试接口的ip
${FilesList} create files list @{filelist}
${addr} POST request api 此处是接口路径 data=${data} files=${FilesList}
#验证code码
should be equal as string ${addr.status_code} 200
${response} to json ${addr.content}
#验证返回message
should be equal as string ${response.message} 文件上传完成
- 此时我们可以调用这个关键字上传文件了
上传两个文件
批量上传文件 文件1.txt 文件2.txt
我们可以发现,上传的当前路径下的文件好操作,但是windows如果不是当前路径下,是其他路径下的怎么办呢?直接写路径下的文件吗?可以试试看。
但是我们通常写自动化不直接写绝对路径,使用 ${CURDIR}参数(特别是jenkins执行的时候),但这个参数在windows和linux上返回的路径是不同的,open()方法在windows和linux “ / " 这种格式通用。windows上是\ \ 格式。我们想用通用的怎么办?
之后,我们可以这样使用
上传非当前目录下的文件
${file1} turn to backslash ${CURDIR}/XX/文件1.txt
${file2} turn to backslash ${CURDIR}/XX/文件2.txt
批量上传文件 ${file1} ${file2}