个人音乐播放器项目测试

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.安装卸载测试

安装卸载测试用于验证软件的安装和卸载过程是否正常,是否会对系统造成不良影响。

  • 测试方法
    • 正常安装卸载测试:按照软件的安装和卸载流程进行操作,检查是否能顺利完成。
    • 异常安装卸载测试:在安装和卸载过程中,模拟各种异常情况,如安装过程中突然断电、卸载过程中删除文件等,检查系统的恢复能力。
  • 测试要点
    • 安装过程:安装过程应简单明了,用户能够轻松完成。安装过程中不应出现错误提示,安装完成后软件应能正常使用。
    • 卸载过程:卸载过程应能彻底删除软件的所有文件和注册表信息,不会在系统中留下残留文件。
    • 系统影响:安装和卸载软件不应影响系统的正常运行,不会导致系统崩溃或出现其他异常问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值