首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

软件测试笔记|web自动化测试|文件上传处理

“动动小手,点点关注呗~”

他已骨瘦如柴,我也老态龙钟。他没有力量说话,还强睁着眼睛招待我……他现在故意慢慢儿走,让我一程一程送,尽量多聚聚,把一个小梦拉成一个万里长梦。这我愿意。送一程,说一声再见,又能见到一面。离别拉得长,是增加痛苦还是减少痛苦呢?我算不清。但是我陪他走得愈远,愈怕从此不见。 ——杨绛《我们仨》

在Web应用程序的功能测试中,文件上传功能是一个常见且重要的模块。它涉及到用户与服务器之间的数据交互,确保文件上传功能的正确性和稳定性对于整个Web应用的质量至关重要。在自动化测试领域,如何高效、准确地处理文件上传操作是测试工程师需要攻克的难题。本文将深入探讨Web自动化测试中文件上传处理的各种方法和技巧,结合代码实例,为你呈现硬核干货。

一、Web自动化测试框架选择

目前,比较流行的Web自动化测试框架有Selenium、Appium(也可用于Web测试)、Playwright等。本文主要以Python语言结合Selenium框架为例进行讲解,Selenium是一个强大且应用广泛的自动化测试工具,它支持多种浏览器,能够模拟用户在浏览器中的操作。

首先,需要安装Selenium库和对应的浏览器驱动。以Chrome浏览器为例,安装ChromeDriver,并将其路径添加到系统环境变量中。在Python中安装Selenium库的命令如下:

二、文件上传的常见实现方式及测试方法

(一)input标签实现文件上传

在HTML中,最常见的文件上传方式是使用<input type="file">。对于这种类型的文件上传,Selenium可以直接定位到<input>元素,并使用send_keys()方法传入文件的绝对路径,从而实现文件上传。

下面是一个简单的HTML文件示例(upload.html):

对应的Python自动化测试代码如下:

代码含义描述:

1. from selenium import webdriver:导入Selenium的WebDriver模块,用于控制浏览器。

2. driver = webdriver.Chrome():启动Chrome浏览器,创建一个WebDriver实例。

3. driver.get("file:///C:/path/to/upload.html"):打开本地的测试HTML页面,这里的路径需要根据实际情况修改。

4. file_input = driver.find_element_by_id("fileUpload"):通过元素的id属性定位到<input type="file">元素。

5. file_path = "C:/test.txt":指定要上传的文件的绝对路径。

6. file_input.send_keys(file_path):使用send_keys()方法将文件路径发送到<input>元素,模拟用户选择文件的操作。

7. 后面部分代码用于模拟点击上传按钮(这里注释掉了,可以根据实际情况取消注释并使用),以及等待一段时间观察结果,最后关闭浏览器。

运行上述代码后,会自动打开浏览器并加载测试页面,将指定的文件路径发送到文件上传输入框中。如果页面有自动上传逻辑,文件会开始上传;如果需要手动点击上传按钮,可取消注释相关代码。

(二)非input标签实现文件上传(使用JavaScript模拟)

有些情况下,Web应用的文件上传功能并不是通过<input type="file">标签直接实现的,可能是通过自定义的按钮、div等元素结合JavaScript来触发文件选择框。对于这种情况,无法直接使用send_keys()方法。此时,可以借助JavaScript来模拟文件上传操作。

假设存在这样一个页面,其文件上传区域的HTML代码如下:

对应的Python自动化测试代码如下:

代码含义描述:

1. 首先同样是启动浏览器并打开测试页面。

2. upload_button = driver.find_element_by_id("uploadButton"):定位到页面上的上传按钮元素。

3. driver.execute_script("arguments[0].click();", upload_button):使用execute_script()方法执行JavaScript代码,模拟点击上传按钮,触发页面原本的文件选择框弹出逻辑(虽然我们后续不会真正使用这个弹出的选择框)。

4. 定义js变量,其中包含一段JavaScript代码:

◦ 创建一个<input type="file">元素,并设置其display为none使其隐藏。

◦ 定义onchange事件处理函数,用于在文件选择后执行相关操作(这里只是简单打印文件名)。

◦ 使用input.value设置要上传的文件路径,这里通过Python的字符串格式化将file_path变量的值插入到JavaScript代码中。

◦ 将创建的<input>元素添加到页面的<body>中,并模拟点击操作,从而实现文件上传。

5. 最后等待一段时间观察结果,并关闭浏览器。

运行此代码后,会模拟用户点击上传按钮,并通过JavaScript设置文件路径,实现文件上传操作。在控制台中可以看到打印出的选择的文件信息。

三、处理文件上传后的结果验证

文件上传后,需要对上传结果进行验证,以确保文件上传功能的正确性。验证方式通常包括检查页面提示信息、数据库中文件记录、服务器文件存储目录等。

(一)检查页面提示信息

如果上传成功或失败后,页面会显示相应的提示信息,可以通过定位这些提示信息元素来判断上传结果。例如,上传成功后页面会显示“文件上传成功”的提示文本。

在上述input标签实现文件上传的例子中,假设上传成功后页面会显示一个id为uploadResult的

<p>元素,内容为“文件上传成功”。可以在上传操作后添加如下代码进行验证:

代码含义描述:

1. time.sleep(3):等待3秒钟,给页面足够的时间加载上传结果提示信息。

2. 使用try-except语句尝试定位id为uploadResult的元素,并获取其文本内容。

3. 根据获取到的文本内容判断文件上传是否成功,并输出相应的验证结果信息。

(二)检查数据库记录

如果文件上传后会在数据库中记录相关信息,可以通过连接数据库,执行SQL查询语句来验证文件是否上传成功。以MySQL数据库为例,假设文件上传后会在files表中插入一条记录,包含文件名、文件路径等信息。

首先需要安装pymysql库,用于连接MySQL数据库:

在文件上传后的验证代码中添加如下内容:

代码含义描述:

1. import pymysql:导入pymysql库。

2. 使用pymysql.connect()方法连接到MySQL数据库,需要根据实际情况填写主机名、用户名、密码、数据库名等信息。

3. 在try块中,创建游标对象cursor,执行SQL查询语句,根据上传的文件名在数据库表中查询记录。

4. 根据查询结果判断文件是否在数据库中有记录,从而验证文件上传是否成功。

5. 最后在finally块中关闭游标和数据库连接。

(三)检查服务器文件存储目录

如果文件上传后会存储在服务器的特定目录下,可以通过Python的文件操作相关模块来检查文件是否存在于该目录中。例如,假设文件上传后会存储在服务器的/upload目录下。

在文件上传后的验证代码中添加如下内容:

代码含义描述:

1. import os:导入os模块,用于进行文件和目录操作。

2. 定义文件上传后的存储目录upload_dir和文件名file_name,使用os.path.join()方法拼接出文件的完整路径file_path。

3. 使用os.path.exists()方法检查文件是否存在于指定路径中,根据结果判断文件上传是否成功。

四、文件上传测试的注意事项

1. 文件路径问题:确保传入send_keys()方法或在JavaScript中设置的文件路径是有效的绝对路径,并且测试脚本有访问该文件的权限。在不同的操作系统中,文件路径的格式有所不同,例如Windows系统使用反斜杠\作为路径分隔符,而Linux和macOS系统使用正斜杠/,需要注意路径格式的正确性。

2. 文件类型限制:有些Web应用会对上传的文件类型进行限制,在测试时需要准备符合要求的不同类型文件进行测试,同时也要测试上传不允许的文件类型时应用的响应是否正确。

3. 文件大小限制:类似文件类型限制,文件大小也可能有限制。要测试上传接近限制大小的文件以及超过限制大小的文件,检查应用是否能正确处理。

4. 并发上传测试:对于一些高并发访问的Web应用,需要进行文件的并发上传测试,模拟多个用户同时上传文件的场景,检查系统的稳定性和正确性。可以使用多线程或多进程的方式来实现并发测试。

5. 错误处理:在自动化测试代码中,要做好各种异常情况的处理,例如元素定位失败、文件路径无效、数据库连接失败等,确保测试脚本的健壮性。

通过以上对Web自动化测试中文件上传处理的详细讲解和代码示例,相信你已经掌握了文件上传测试的核心技术和方法。在实际的测试工作中,可以根据具体的Web应用场景,灵活运用这些技巧,提高测试效率和质量,保障Web应用的文件上传功能稳定可靠。

“动动小手,点点关注呗~”🫰

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OU3MIaXAq_Va4z-imopfnRTQ0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券