1.系统介绍
在我上一篇文章中展示了一个在线网盘的功能介绍以及实现细节,不了解的可以直接到网盘在线地址体验,文章的资料在GitHub - retire-at-35/myyundrive: 简单云盘,这篇文章主要讲述对这个项目的测试过程。
2.功能测试
在功能测试中我使用了xmind和excel来实现测试用例的提取以及编写,部分测试用例的内容如下(图片和表格过多无法全部展示):
.....
用例编号 | 用例标题 | 项目 / 模块 | 优先级 | 前置条件 | 测试步骤 | 测试数据 | 预期结果 | 实际结果 |
网盘系统注册功能 | P0 | 打开网盘系统注册页面 | 1. 在昵称输入框输入数据;2. 其他输入框输入有效数据;3. 点击注册按钮。 | 昵称:"a" | 注册成功,跳转到登录页 | 通过 | ||
网盘系统注册功能 | P0 | 打开网盘系统注册页面 | 1. 在昵称输入框输入数据;2. 其他输入框输入有效数据;3. 点击注册按钮。 | 昵称:"abcdef" | 注册成功,跳转到登录页 | 通过 | ||
网盘系统注册功能 | P0 | 打开网盘系统注册页面 | 1. 在昵称输入框输入数据;2. 其他输入框输入有效数据;3. 点击注册按钮。 | 昵称:"abc" | 注册成功,跳转到登录页 | 通过 | ||
网盘系统注册功能 | P0 | 打开网盘系统注册页面 | 1. 在昵称输入框输入数据;2. 其他输入框输入有效数据;3. 点击注册按钮。 | 昵称:"" | 提示 “昵称不能为空”,注册失败,页面保持在注册页 | 通过 | ||
网盘系统注册功能 | P0 | 打开网盘系统注册页面 | 1. 在昵称输入框输入数据;2. 其他输入框输入有效数据;3. 点击注册按钮。 | 昵称:"abcdefg" | 提示 “昵称长度不能超过 6 位”,注册失败,页面保持在注册页 | 通过 | ||
网盘系统注册功能 | P0 | 打开网盘系统注册页面 | 1. 在昵称输入框输入数据;2. 其他输入框输入有效数据;3. 点击注册按钮。 | 昵称:"a@" | 提示 “昵称包含非法字符”,注册失败,页面保持在注册页 | 通过 | ||
网盘系统注册功能 | P0 | 打开网盘系统注册页面 | 1. +A8在邮箱号输入框输入数据;2. 点击发送邮箱按钮。 | 邮箱号:"test@example.com" | 注册流程可继续,发送邮箱按钮可点击,按钮变为不可点击状态,显示倒计时,系统发送验证邮件到输入的邮箱 | 通过 | ||
网盘系统注册功能 | P0 | 打开网盘系统注册页面 | 1. 在邮箱号输入框输入数据;2. 点击发送邮箱按钮。 | 邮箱号:"" | 提示 “邮箱不能为空”,发送邮箱按钮不可点击,注册失败,页面保持在注册页 | 通过 | ||
网盘系统注册功能 | P0 | 打开网盘系统注册页面 | 1. 在邮箱号输入框输入数据;2. 点击发送邮箱按钮。 | 邮箱号:"testexample.com" | 提示 “请输入有效的邮箱地址”,发送邮箱按钮不可点击,注册失败,页面保持在注册页 | 通过 | ||
网盘系统注册功能 | P0 | 打开网盘系统注册页面 | 1. 在邮箱号输入框输入数据;2. 点击发送邮箱按钮。 | 邮箱号:"test@" | 提示 “请输入有效的邮箱地址”,发送邮箱按钮不可点击,注册失败,页面保持在注册页 | 通过 | ||
网盘系统注册功能 | P0 | 打开网盘系统注册页面 | 1. 在邮箱号输入框输入数据;2. 点击发送邮箱按钮。 | 邮箱号:test@example.com | 提示:邮箱账号已经存在 | 通过 | ||
网盘系统注册功能 | P0 | 打开网盘系统注册页面,已发送邮箱验证码 | 1. 在邮箱验证码输入框输入数据;2. 其他输入框输入有效数据;3. 点击注册按钮。 | 邮箱验证码:"123456" | 注册流程可继续 | 通过 | ||
网盘系统注册功能 | P0 | 打开网盘系统注册页面,已发送邮箱验证码 | 1. 在邮箱验证码输入框输入数据;2. 其他输入框输入有效数据;3. 点击注册按钮。 | 邮箱验证码:"" | 提示 “邮箱验证码不能为空”,注册失败,页面保持在注册页 | 通过 | ||
网盘系统注册功能 | P0 | 打开网盘系统注册页面,已发送邮箱验证码 | 1. 在邮箱验证码输入框输入数据;2. 其他输入框输入有效数据;3. 点击注册按钮。 | 邮箱验证码:"654321" | 提示 “邮箱验证码错误”,注册失败,页面保持在注册页 | 通过 | ||
网盘系统注册功能 | P0 | 打开网盘系统注册页面 | 1. 在密码输入框输入数据;2. 其他输入框输入有效数据;3. 点击注册按钮。 | 密码:"abc123!@" | 注册流程可继续 | 通过 | ||
网盘系统注册功能 | P0 | 打开网盘系统注册页面 | 1. 在密码输入框输入数据;2. 其他输入框输入有效数据;3. 点击注册按钮。 | 密码:"abcdef123456!@#$%^" | 注册流程可继续 | 通过 | ||
网盘系统注册功能 | P0 | 打开网盘系统注册页面 | 1. 在密码输入框输入数据;2. 其他输入框输入有效数据;3. 点击注册按钮。 | 密码:"abc123!@def456" | 注册流程可继续 | 通过 | ||
网盘系统注册功能 | P0 | 打开网盘系统注册页面 | 1. 在密码输入框输入数据;2. 其他输入框输入有效数据;3. 点击注册按钮。 | 密码:"" | 提示 “密码不能为空”,注册失败,页面保持在注册页 | 通过 | ||
网盘系统注册功能 | P0 | 打开网盘系统注册页面 | 1. 在密码输入框输入数据;2. 其他输入框输入有效数据;3. 点击注册按钮。 | 密码:"abc123!" | 提示 “密码长度不能少于 8 位”,注册失败,页面保持在注册页 | 通过 | ||
网盘系统注册功能 | P0 | 打开网盘系统注册页面 | 1. 在密码输入框输入数据;2. 其他输入框输入有效数据;3. 点击注册按钮。 | 密码:"abcdef123456!@#$%^&" | 提示 “密码长度不能超过 18 位”,注册失败,页面保持在注册页 | 通过 | ||
网盘系统注册功能 | P0 | 打开网盘系统注册页面 | 1. 在密码输入框输入数据;2. 其他输入框输入有效数据;3. 点击注册按钮。 | 密码:"abcdefgh!@" | 提示 “密码必须包含数字、字母和特殊字符”,注册失败,页面保持在注册页 | 通过 | ||
网盘系统注册功能 | P0 | 打开网盘系统注册页面 | 1. 在密码输入框输入数据;2. 其他输入框输入有效数据;3. 点击注册按钮。 | 密码:"12345678!@" | 提示 “密码必须包含数字、字母和特殊字符”,注册失败,页面保持在注册页 | 通过 | ||
网盘系统注册功能 | P0 | 打开网盘系统注册页面 | 1. 在密码输入框输入数据;2. 其他输入框输入有效数据;3. 点击注册按钮。 | 密码:"abc12345" | 提示 “密码必须包含数字、字母和特殊字符”,注册失败,页面保持在注册页 | 通过 | ||
网盘系统注册功能 | P0 | 打开网盘系统注册页面 | 1. 设置密码;2. 在确认密码输入框输入数据;3. 其他输入框输入有效数据;4. 点击注册按钮。 | 密码:"abc123!@",确认密码:"abc123!@" | 注册流程可继续 | 通过 | ||
网盘系统注册功能 | P0 | 打开网盘系统注册页面 | 1. 设置密码;2. 在确认密码输入框输入数据;3. 其他输入框输入有效数据;4. 点击注册按钮。 | 密码:"abc123!@",确认密码:"def456#$" | 提示 “确认密码与密码不一致”,注册失败,页面保持在注册页 | 通过 | ||
网盘系统注册功能 | P0 | 打开网盘系统注册页面 | 1. 在验证码输入框输入数据;2. 其他输入框输入有效数据;3. 点击注册按钮。 | 验证码:"ABCD" | 注册流程可继续 | 通过 | ||
网盘系统注册功能 | P0 | 打开网盘系统注册页面 | 1. 在验证码输入框输入数据;2. 其他输入框输入有效数据;3. 点击注册按钮。 | 验证码:"" | 提示 “验证码不能为空”,注册失败,页面保持在注册页 | 通过 | ||
网盘系统注册功能 | P0 | 打开网盘系统注册页面 | 1. 在验证码输入框输入数据;2. 其他输入框输入有效数据;3. 点击注册按钮。 | 验证码:"DCBA" | 提示 “验证码错误”,注册失败,页面保持在注册页 | 通过 | ||
网盘系统注册功能 | P0 | 打开网盘系统注册页面 | 1. 在邮箱号输入框输入数据;2. 点击发送邮箱按钮。 | 邮箱号:"test@example.com" | 按钮变为不可点击状态,显示倒计时,系统发送验证邮件到输入的邮箱 | 通过 | ||
网盘系统注册功能 | P0 | 打开网盘系统注册页面 | 1. 在邮箱号输入框输入数据;2. 点击发送邮箱按钮。 | 邮箱号:"testexample.com" | 提示 “请输入有效的邮箱地址”,按钮保持可点击状态 | 通过 | ||
网盘系统注册功能 | P0 | 打开网盘系统注册页面 | 点击验证码切换按钮 | 无 | 验证码图片更新为新的验证码 | 通过 | ||
网盘系统注册功能 | P0 | 打开网盘系统注册页面 | 点击切换回登录界面按钮 | 无 | 页面跳转到登录界面 | 通过 | ||
email_001 | 登录成功_标准邮箱格式 | 网盘系统登录功能 | P0 | 打开网盘系统登录页面 | 1. 在邮箱号输入框输入数据;2. 在密码输入框输入正确密码;3. 在验证码输入框输入正确验证码;4. 点击登录按钮。 | 邮箱号:"test@example.com";密码:"abc123!@";验证码:假设正确验证码为 "ABCD",输入 "ABCD" | 输入框无错误提示,系统验证通过,页面跳转到用户主页,登录成功 | |
email_002 | 登录失败_邮箱为空 | 网盘系统登录功能 | P1 | 打开网盘系统登录页面 | 1. 在邮箱号输入框输入数据;2. 在密码输入框输入正确密码;3. 在验证码输入框输入正确验证码;4. 点击登录按钮。 | 邮箱号:"";密码:"abc123!@";验证码:假设正确验证码为"ABCD",输入"ABCD" | 输入框旁显示提示信息 “邮箱不能为空”,登录按钮置灰不可点击 | |
email_003 | 登录失败_无效邮箱 | 网盘系统登录功能 | P1 | 打开网盘系统登录页面 | 1. 在邮箱号输入框输入数据;2. 在密码输入框输入正确密码;3. 在验证码输入框输入正确验证码;4. 点击登录按钮。 | 邮箱号:"test@";密码:"abc123!@";验证码:假设正确验证码为 "ABCD",输入 "ABCD" | 输入框旁显示提示信息 “请输入有效的邮箱地址”,登录按钮置灰不可点击 | |
password_001 | 登录成功_正确密码 | 网盘系统登录功能 | P0 | 打开网盘系统登录页面 | 1. 在邮箱号输入框输入正确邮箱;2. 在密码输入框输入数据;3. 在验证码输入框输入正确验证码;4. 点击登录按钮。 | 邮箱号:"test@example.com";密码:"abc123!@";验证码:假设正确验证码为 "ABCD",输入 "ABCD" | 输入框无错误提示,系统验证通过,页面跳转到用户主页,登录成功 | |
password_002 | 登录失败_密码为空 | 网盘系统登录功能 | P1 | 打开网盘系统登录页面 | 1. 在邮箱号输入框输入正确邮箱;2. 在密码输入框输入数据;3. 在验证码输入框输入正确验证码;4. 点击登录按钮。 | 邮箱号:"test@example.com";密码:"";验证码:假设正确验证码为"ABCD",输入"ABCD" | 输入框旁显示提示信息 “密码不能为空”,登录按钮置灰不可点击 | |
password_003 | 登录失败_错误密码 | 网盘系统登录功能 | P1 | 打开网盘系统登录页面 | 1. 在邮箱号输入框输入正确邮箱;2. 在密码输入框输入数据;3. 在验证码输入框输入正确验证码;4. 点击登录按钮。 | 邮箱号:"test@example.com";密码:"abc123!";验证码:假设正确验证码为 "ABCD",输入 "ABCD" | 弹出提示框显示 “用户名或密码错误”,页面保持在登录界面,输入框内容保留 | |
captcha_001 | 登录成功_正确验证码 | 网盘系统登录功能 | P0 | 打开网盘系统登录页面 | 1. 在邮箱号输入框输入正确邮箱;2. 在密码输入框输入正确密码;3. 在验证码输入框输入数据;4. 点击登录按钮。 | 邮箱号:"test@example.com";密码:"abc123!@";验证码:假设正确验证码为 "ABCD",输入 "ABCD" | 输入框无错误提示,系统验证通过,页面跳转到用户主页,登录成功 | |
captcha_002 | 登录失败_验证码为空 | 网盘系统登录功能 | P1 | 打开网盘系统登录页面 | 1. 在邮箱号输入框输入正确邮箱;2. 在密码输入框输入正确密码;3. 在验证码输入框输入数据;4. 点击登录按钮。 | 邮箱号:"test@example.com";密码:"abc123!@";验证码:"" | 输入框旁显示提示信息 “验证码不能为空”,登录按钮置灰不可点击 | |
captcha_003 | 登录失败_错误验证码 | 网盘系统登录功能 | P1 | 打开网盘系统登录页面 | 1. 在邮箱号输入框输入正确邮箱;2. 在密码输入框输入正确密码;3. 在验证码输入框输入数据;4. 点击登录按钮。 | 邮箱号:"test@example.com";密码:"abc123!@";验证码:假设正确验证码为 "ABCD",输入 "DCBA" | 输入框旁显示提示信息 “验证码错误”,登录按钮置灰不可点击 | |
captcha_004 | 登录失败_过期验证码 | 网盘系统登录功能 | P1 | 打开网盘系统登录页面 | 1. 在邮箱号输入框输入正确邮箱;2. 在密码输入框输入正确密码;3. 在验证码输入框输入数据;4. 点击登录按钮。 | 邮箱号:"test@example.com";密码:"abc123!@";验证码:假设正确验证码为 "ABCD",输入过期的 "ABCD" | 输入框旁显示提示信息 “验证码错误”,登录按钮置灰不可点击 | |
login_button_001 | 登录成功_信息全部正确 | 网盘系统登录功能 | P0 | 打开网盘系统登录页面 | 1. 在邮箱号输入框输入数据;2. 在密码输入框输入数据;3. 在验证码输入框输入数据;4. 点击登录按钮。 | 邮箱号:"test@example.com";密码:"abc123!@";验证码:假设正确验证码为 "ABCD",输入 "ABCD" | 系统验证通过,页面跳转到用户主页,登录成功 | |
login_button_002 | 登录失败_部分信息错误 | 网盘系统登录功能 | P1 | 打开网盘系统登录页面 | 1. 在邮箱号输入框输入数据;2. 在密码输入框输入数据;3. 在验证码输入框输入数据;4. 点击登录按钮。 | 邮箱号:"test@example.com";密码:"123456";验证码:假设正确验证码为 "ABCD",输入 "ABCD" | 弹出提示框显示 “用户名或密码错误”,页面保持在登录界面,输入框内容保留 | |
register_option_001 | 成功跳转注册页面 | 网盘系统登录功能 | P0 | 打开网盘系统登录页面 | 点击 “注册账号” 选项 | 无 | 页面跳转到注册页面 | |
forget_password_option_001 | 成功弹出找回密码弹窗 | 网盘系统登录功能 | P0 | 打开网盘系统登录页面 | 点击 “忘记密码” 选项 | 无 | 弹出 “找回密码” 弹窗,弹窗包含邮箱输入框和发送验证码按钮 |
3.接口测试
在接口测试中,我选择了apifox作为工具,这是我编写的接口文档云盘接口文档(部分接口的详细信息未完善),写好接口文档之后也需要提取接口测试的测试用例,正好apifox提供了编写测试用例的功能,就在apifox里面编写并执行接口测试用例:
4.自动化测试
在这个项目中,我使用了pytest+selenium测试了登录后上传文件等业务的自动化测试,测试的代码一并提交到了GitHub内,这里展示一下核心的代码:
4.1 业务流程的封装:
class SmokePage(BasePage):
"""
登录页面的页面对象,包含登录页面的所有元素定位和操作方法
"""
# 定义页面元素的定位器
username_input = (By.XPATH, '//input[@placeholder="请输入账号"]') # 账号输入框
password_input = (By.XPATH, '//input[@placeholder="请输入密码"]') # 密码输入框
check_code_input = (By.XPATH,'//input[@placeholder="请输入验证码"]') # 登录按钮
sumbit_btn = (By.XPATH,'//*[@id="app"]/div/div/div[1]/div/form/div[4]/div/button') # 提交按钮
upload_btn = (By.XPATH, '/html/body/div[1]/div/div[2]/div[2]/div/div[1]/div[1]/button[1]') #上传文件
# sel_btn = (By.XPATH, '/html/body/div[1]/div/div[2]/div[2]/div/div[4]/div/div/div/div/div/div/div/button')
upload_input = (By.XPATH, '//input[@type="file"]')
start_upload_btn = (By.XPATH,'/html/body/div[1]/div/div[2]/div[2]/div/div[4]/div/div/div/div/div/button')
success_msg =(By.XPATH,'//*[@id="message_2"]/p')
# 登录方法
def login(self, username, password,verification_code):
"""
执行登录操作
:param username: 用户名
:param password: 密码
"""
self.input_text(self.username_input, username) # 输入用户名
self.input_text(self.password_input, password) # 输入密码
self.input_text(self.check_code_input,verification_code) # 输入验证码
self.click(self.sumbit_btn)
time.sleep(3)
assert self.driver.current_url == 'http://114.132.59.198:18080/home/index'
# 上传方法
def upload(self, param):
self.click(self.upload_btn)
self.upload_file(self.upload_input,'D:\code\yundriver_pytest\check_code\captcha.png')
time.sleep(3)
# 点击上传文件的按钮
self.click(self.start_upload_btn)
# 断言是否上传成功
assert '所有文件上传成功' == self.get_text(self.success_msg)
4.2 测试用例的执行:
def test_smoke(self, driver):
"""
测试登录成功的场景
:param driver: WebDriver实例
"""
# 登录操作
smoke_page = SmokePage(driver)
wait = WebDriverWait(driver, 10)
time.sleep(2)
captcha_img = wait.until(EC.presence_of_element_located(
(By.XPATH, '//*[@id="app"]/div/div/div[1]/div/form/div[3]/div/div/div[2]/img')))
captcha_img.screenshot('../check_code/captcha.png')
verification_code = self.get_verification_code('../check_code/captcha.png')
smoke_page.login('3169642314@qq.com','123456',verification_code)
# 上传文件
smoke_page.upload('../check_code/captcha.png')