1.项目登陆页
1.项目首页
2.项目收藏页
2.功能测试的测试案例
3. 部分测试代码
1.登陆测试
public void Test() throws InterruptedException {
// 打开浏览器
// WebDriverManager 是一个用于自动管理浏览器驱动的工具,edgedriver().setup() 方法会自动下载并配置 Edge 浏览器的驱动
WebDriverManager.edgedriver().setup();
// 创建 EdgeOptions 对象,用于配置 Edge 浏览器的启动选项
EdgeOptions options = new EdgeOptions();
// 允许访问所有链接,这是为了解决在某些情况下,浏览器可能会限制远程访问的问题
options.addArguments("--remote-allow-origins=*");
// 创建一个 EdgeDriver 实例,传入之前配置好的 EdgeOptions 对象,从而启动 Edge 浏览器
WebDriver driver = new EdgeDriver(options);
// 输入网址
// 使用 driver.get() 方法让浏览器打开指定的 URL,这里打开的是本地的登录页面
driver.get("http://127.0.0.1:3060/login.html");
// 找到输入框
// 使用 By.cssSelector 定位器通过 CSS 选择器找到 id 为 "user" 的输入框,并输入 "bit"
driver.findElement(By.cssSelector("#user")).sendKeys("bit");
// 使用 By.cssSelector 定位器通过 CSS 选择器找到 id 为 "password" 的输入框,并输入 "123456"
driver.findElement(By.cssSelector("#password")).sendKeys("123456");
// 找到搜索按钮
// 使用 By.cssSelector 定位器通过 CSS 选择器找到 id 为 "submit" 的按钮,并模拟点击操作
driver.findElement(By.cssSelector("#submit")).click();
// 线程休眠 1 秒,等待页面响应和弹出提示框
Thread.sleep(1000);
// 处理弹出框
// 使用 driver.switchTo().alert() 方法切换到当前页面的弹出框(警告框)
Alert alert = driver.switchTo().alert();
// 调用 alert.accept() 方法点击弹出框的确认按钮
alert.accept();
// 关闭浏览器
// 注释掉的 driver.quit() 方法用于关闭浏览器并结束所有相关的进程,取消注释后会在测试完成后关闭浏览器
//driver.quit();
}
2.首页测试
1.查询测试
public void SearchTests (){
// 测试搜索功能
// 打开基础 URL 对应的页面,BASE_URL 应该是一个预先定义好的常量,表示要测试的网页的基础地址
driver.get(BASE_URL);
// 场景1:模糊查询
// 定义要搜索的关键词
String keyword = "你好";
// 使用 CSS 选择器定位到搜索输入框,将其存储在 searchInput 变量中
WebElement searchInput = driver.findElement(By.cssSelector("#exampleInputName2"));
// 在搜索输入框中输入关键词
searchInput.sendKeys(keyword);
// 使用 CSS 选择器定位到搜索按钮,并模拟点击操作
driver.findElement(By.cssSelector("#submit1")).click();
// 验证搜索结果
// 使用显式等待,等待搜索结果中的某个元素(通过 CSS 选择器定位)变得可见
// 这里的等待时间和等待条件由 wait 对象控制,wait 应该是一个 WebDriverWait 实例
wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("#info > tr > td:nth-child(2)")));
// 使用 CSS 选择器定位到所有搜索结果中的指定单元格,并将这些元素存储在 results 列表中
List<WebElement> results = driver.findElements(By.cssSelector("#info > tr > td:nth-child(2)"));
// 遍历搜索结果列表
for (WebElement result : results) {
// 获取每个搜索结果元素的文本内容
String resultText = result.getText();
// 使用断言验证搜索结果是否包含关键词
// 如果不包含关键词,会抛出断言异常,并给出相应的错误信息
Assertions.assertTrue(resultText.contains(keyword), "搜索结果不包含关键词: " + keyword);
}
// 场景2:空查询
// 清空搜索输入框中的内容
searchInput.clear();
// 再次点击搜索按钮,执行空查询
driver.findElement(By.cssSelector("#submit1")).click();
// 验证显示所有音乐
// 使用 CSS 选择器定位到表示所有音乐项的第一个单元格,并将这些元素存储在 allItems 列表中
List<WebElement> allItems = driver.findElements(By.cssSelector("#info > tr:nth-child(1) > td:nth-child(2)"));
// 使用断言验证音乐项列表不为空
// 如果列表为空,会抛出断言异常,并给出相应的错误信息
Assertions.assertFalse(allItems.isEmpty(), "空查询后未显示任何音乐项");
// 关闭浏览器并结束所有相关的进程
driver.quit();
}
2.批量删除测试
public void DeletesSelectedTest() throws InterruptedException {
// 打开指定的基础页面
driver.get(BASE_URL);
// 勾选前两首音乐
// 使用 CSS 选择器查找页面上所有类型为 checkbox 的元素,并将它们存储在一个列表中
List<WebElement> checkboxes = driver.findElements(By.cssSelector("input[type='checkbox']"));
// 点击列表中第一个 checkbox,即勾选第一首音乐
checkboxes.get(0).click();
// 点击列表中第二个 checkbox,即勾选第二首音乐
checkboxes.get(1).click();
// 点击批量删除按钮
// 使用 CSS 选择器找到 ID 为 "delete" 的元素(通常为按钮),并模拟点击操作
driver.findElement(By.cssSelector("#delete")).click();
// 处理确认弹窗
// 使用显式等待,等待确认弹窗出现。wait 应该是一个 WebDriverWait 实例,当确认弹窗出现时,返回该弹窗对象
Alert alert = wait.until(ExpectedConditions.alertIsPresent());
// 点击确认弹窗的“确定”按钮,确认删除操作
alert.accept();
// 验证删除成功
// 线程暂停 1 秒,给页面足够的时间来完成删除操作。不过使用 Thread.sleep 不是最佳实践,建议使用显式等待替代
Thread.sleep(1000);
// 再次使用 CSS 选择器查找页面上所有类型为 checkbox 的元素,得到删除操作执行后的 checkbox 列表
List<WebElement> updatedItems = driver.findElements(By.cssSelector("input[type='checkbox']"));
// 使用断言来验证删除操作是否成功。预期更新后的 checkbox 数量应该比之前少 2(因为勾选了两首音乐进行删除)
// 如果数量不匹配,会抛出断言异常,并给出相应的错误信息 "批量删除失败"
Assert.assertEquals(updatedItems.size(), checkboxes.size() - 2, "批量删除失败");
}
4.关于测试需要用到的依赖包
<dependencies>
<dependency>
<groupId>io.github.bonigarcia</groupId>
<artifactId>webdrivermanager</artifactId>
<version>5.8.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>4.0.0</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.8.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>7.4.0</version>
</dependency>
</dependencies>
5.了解测试
1.功能测试
功能测试是对软件系统的各项功能进行验证,确保其满足需求规格说明书的要求。
- 测试方法
- 黑盒测试:不考虑软件内部结构和实现细节,只关注输入和输出。例如,对于一个电商系统的购物车功能,输入商品数量和选择商品,检查购物车总价计算是否正确。
- 白盒测试:了解软件内部结构和代码逻辑,对代码的各个分支、路径进行测试。比如,测试一个函数的不同输入参数,确保函数在各种情况下都能正确执行。
- 测试要点
- 功能完整性:确保系统的所有功能都能正常使用,没有遗漏。例如,一个社交软件应具备注册、登录、发布动态、私信等功能。
- 功能正确性:验证功能的执行结果是否符合预期。如在一个计算器应用中,输入 “2 + 3”,结果应为 “5”。
- 功能容错性:测试系统在异常输入或异常情况下的处理能力。比如,在一个表单中输入非法的邮箱地址,系统应给出相应的错误提示。
2.界面测试
界面测试主要检查软件的用户界面是否符合设计要求,是否美观、易用。
- 测试方法
- 外观检查:检查界面的布局、颜色、字体、图标等是否符合设计规范。例如,界面元素的对齐方式是否整齐,颜色搭配是否协调。
- 交互检查:测试用户与界面元素的交互效果,如按钮的点击效果、下拉菜单的展开和收起等。
- 测试要点
- 界面布局:元素的位置、大小、间距是否合理,不会出现重叠或遮挡的情况。
- 界面一致性:在不同页面或不同操作下,界面风格应保持一致。例如,按钮的样式、字体的大小和颜色等应统一。
- 界面响应:当用户进行操作时,界面应能及时响应。如点击按钮后,按钮应立即有反馈效果。
3.性能测试
性能测试用于评估软件系统在不同负载下的性能表现,确保系统在高并发情况下仍能稳定运行。
- 测试方法
- 负载测试:逐步增加系统的负载,观察系统在不同负载下的性能指标,如响应时间、吞吐量等。例如,模拟多个用户同时登录一个网站,检查系统的响应时间是否在可接受范围内。
- 压力测试:在超过系统正常负载的情况下进行测试,测试系统的极限性能和稳定性。比如,让系统承受远超预期的用户并发量,观察系统是否会崩溃。
- 测试要点
- 响应时间:用户操作后系统的响应时间应在合理范围内。例如,一个网页的加载时间不应超过 3 秒。
- 吞吐量:系统在单位时间内能够处理的请求数量。例如,一个电商系统在促销活动期间应能处理大量的订单请求。
- 资源利用率:检查系统的 CPU、内存、磁盘 I/O 等资源的使用情况,避免出现资源耗尽的情况。
4.兼容性测试
兼容性测试主要验证软件在不同的硬件、软件、网络环境下的兼容性。
- 测试方法
- 硬件兼容性测试:在不同的硬件设备上进行测试,如不同型号的手机、电脑等。例如,测试一个手机应用在不同品牌、不同屏幕分辨率的手机上的显示效果和功能是否正常。
- 软件兼容性测试:测试软件与不同操作系统、浏览器、数据库等的兼容性。比如,测试一个网页应用在 Chrome、Firefox、Safari 等不同浏览器上的显示和功能是否一致。
- 网络兼容性测试:在不同的网络环境下进行测试,如 Wi-Fi、4G、5G 等。例如,测试一个在线游戏在不同网络速度下的流畅度。
- 测试要点
- 功能兼容性:确保软件在不同环境下的功能都能正常使用。
- 显示兼容性:界面在不同环境下的显示效果应符合预期,不会出现变形、错位等问题。
5.易用性测试
易用性测试关注软件的用户体验,评估软件是否容易使用、学习和操作。
- 测试方法
- 用户调查:通过问卷调查、用户访谈等方式收集用户对软件易用性的反馈。
- 实际操作测试:让不同类型的用户实际使用软件,观察他们在操作过程中遇到的问题。
- 测试要点
- 操作便捷性:软件的操作流程应简单明了,用户能够轻松完成各种任务。例如,一个支付应用的支付流程不应过于复杂。
- 学习成本:新用户能够快速上手使用软件,不需要花费过多的时间和精力去学习。
- 错误提示:当用户操作错误时,系统应给出清晰、易懂的错误提示,帮助用户解决问题。
6.安全测试
安全测试旨在发现软件系统中存在的安全漏洞,保护用户的信息和系统的安全。
- 测试方法
- 漏洞扫描:使用专业的漏洞扫描工具对软件进行扫描,检测是否存在常见的安全漏洞,如 SQL 注入、跨站脚本攻击(XSS)等。
- 渗透测试:模拟黑客的攻击行为,对软件系统进行攻击测试,发现潜在的安全风险。
- 测试要点
- 数据加密:用户的敏感信息,如密码、银行卡号等,应进行加密处理,防止信息泄露。
- 访问控制:确保只有授权用户才能访问系统的敏感资源和功能。例如,管理员才能进行系统设置等操作。
- 身份验证:验证用户身份的真实性和合法性,防止非法用户登录系统。
7.弱网测试
弱网测试主要模拟在网络信号较弱的情况下,软件的性能和功能表现。
- 测试方法
- 网络模拟工具:使用专业的网络模拟工具,如 Charles、Fiddler 等,模拟不同的网络环境,如 2G、3G、弱 Wi-Fi 等。
- 实际弱网环境测试:在实际的弱网环境中进行测试,如电梯、地下室等信号较弱的地方。
- 测试要点
- 功能可用性:在弱网环境下,软件的基本功能应能正常使用,如聊天应用应能正常发送和接收消息。
- 响应时间:虽然网络速度慢,但系统的响应时间应在可接受范围内,不会出现长时间无响应的情况。
- 数据完整性:在网络不稳定的情况下,数据的传输应保证完整性,不会出现数据丢失或损坏的情况。
8.安装卸载测试
安装卸载测试用于验证软件的安装和卸载过程是否正常,是否会对系统造成不良影响。
- 测试方法
- 正常安装卸载测试:按照软件的安装和卸载流程进行操作,检查是否能顺利完成。
- 异常安装卸载测试:在安装和卸载过程中,模拟各种异常情况,如安装过程中突然断电、卸载过程中删除文件等,检查系统的恢复能力。
- 测试要点
- 安装过程:安装过程应简单明了,用户能够轻松完成。安装过程中不应出现错误提示,安装完成后软件应能正常使用。
- 卸载过程:卸载过程应能彻底删除软件的所有文件和注册表信息,不会在系统中留下残留文件。
- 系统影响:安装和卸载软件不应影响系统的正常运行,不会导致系统崩溃或出现其他异常问题。