验证下载文件

「这是我参与2022首次更文挑战的第17天,活动详情查看:2022首次更文挑战

前言

在自动化测试中,经常会遇到验证文件下载,有时只会验证下载这个动作能够正常点击,有时会验证下载的文件是否正确,下载的文件是否正确包括两个方面,下载的文件是否存在和下载文件的内容是否正确。下载的文件是否存在比较好判断,下载文件的内容,怎么去比较和对比文件下载的内容和预期的结果一致呢,如果是csv文件和txt文件,我们可以对它进行读取进行比对,如果是其他文件呢,例如压缩文件等其他更复杂的类型呢

解决第一步:验证文件下载

模拟手工点击下载链接,下载的文件会放置浏览器的默认下载位置,如果想让文件下载到指定的目录,需要去修改浏览器的配置,可以手动进行修改,但是自动化执行时,是创建了一个新的浏览器实例,手工修改的配置并不会生效,这时可以通过代码来控制,看代码

 from selenium import webdriver
 import os
 # 设置浏览器下载目录
 chrome_options = webdriver.ChromeOptions()
 prefs = {"download.default_directory":"D:\\DOWNLOAD\\"}
 chrome_options.add_experimental_option("prefs", prefs)
 driver = webdriver.Chrome(chrome_options=chrome_options)
复制代码

验证文件是否存在,首先把目录里已存在的文件删除,然后下载,再判断文件是否下载成功

file = "D:\\DOWNLOAD\\test.pdf"
if os.path.exists(file):
    os.remove(file)
# 点击操作下载文件,这一步的详细代码省略
driver.find_element_by_xx(locator).click()
# 判断是否下载成功

if os.path.exists(file):
    print("download sucess!!")
复制代码

解决第二步,验证文件内容

这里也有一个前提,每次去验证这个文件内容应该是不变的,如果是根据不同的过滤条件实时生成不同的文件,那以下方法不适用。验证结果每次都一样的可以采用md5

我们先手工执行一次,得到目标文件,去网上或安装一个可以获取文件md5的工具,得到目标文件的md5值存起来,接下来用代码来获取下载文件的md5,两者进行比对

import hashlib
download_file = “xxxx.rar”
m = hashlib.md5()
with open(file, "rb") as f:
    for line in f:
        m.update(line)
expect_md5_code = m.hexdiget()

if expect_md5_code==source_md5_code:
    print("sucess!!")

复制代码

结语

如果是每次下载的文件不一样的那种情况,具体情况具体分析,我们可以事先准备好数据,让其每次执行,虽然过滤条件不一样,但可以保证每次结果都是可以预期的,那我们也可以用这种方法,如果是运行时随机创建的数据,那预期结果不是可以预估的,那就要看下载的文件类型是什么,python是否可以处理。

Guess you like

Origin juejin.im/post/7067878094731739149