MyMusic 项目测试

项目当中的测试

主要通过对 MyMusic 项目做测试,通过 Selenium 自动化套件 + JUnit 单元测试框架,来对项目的功能进行自动化测试。

项目的功能:登录、注册、修改密码、播放音乐、搜索音乐、收藏音乐、上传音乐、删除音乐。

测试用例的设计

界面测试

在这里插入图片描述

功能测试

在这里插入图片描述

性能测试

在这里插入图片描述

安全测试

在这里插入图片描述

易用性测试

在这里插入图片描述

兼容性测试

在这里插入图片描述

功能测试

我测试了项目的功能,代码如下

登陆测试

package com.example.onlinemusic.Mymusic;

import org.junit.jupiter.api.*;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import java.time.Duration;
import java.util.Set;

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class LoginTest{
    private static ChromeDriver driver;

    private static ChromeDriver getDriver() {
        if (driver == null) {
            driver = new ChromeDriver();
            //隐式等待
            driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
        }
        return driver;
    }

    @Test
    @BeforeAll
    static void start() throws InterruptedException {
        driver = getDriver();
        driver.get("http://49.232.4.81:8080/login.html");
        Thread.sleep(2000);
    }

    //测试正常情况下 页面的元素是否正常
    @Test
    @Order(1)
    public void appearance() throws InterruptedException {
        System.out.println("apprearance");
        String register = driver.findElement(By.cssSelector("#body > div > div:nth-child(5) > a")).getText();
        Assertions.assertEquals(register, "注册账号!");

        String login = driver.findElement(By.cssSelector("#submit")).getAttribute("value");
        Assertions.assertEquals(login, "登录");

        String mainText = driver.findElement(By.cssSelector("#body > div > h3")).getText();
        Assertions.assertEquals(mainText, "登录");

        driver.findElement(By.cssSelector("#body > div > div:nth-child(5) > a")).click();

        String label = driver.findElement(By.cssSelector("#body > div > div:nth-child(2) > label")).getText();
        Assertions.assertEquals(label, "用户名:");

        String placeholder = driver.findElement(By.cssSelector("#user")).getAttribute("placeholder");
        Assertions.assertEquals(placeholder, "请输入用户名");

        String label1 = driver.findElement(By.cssSelector("#body > div > div:nth-child(3) > label")).getText();
        Assertions.assertEquals(label1, "密码:");

        String placeholder1 = driver.findElement(By.cssSelector("#password1")).getAttribute("placeholder");
        Assertions.assertEquals(placeholder1, "请输入密码");

        String label2 = driver.findElement(By.cssSelector("#body > div > div:nth-child(4) > label")).getText();
        Assertions.assertEquals(label2, "确认密码:");

        String placeholder2 = driver.findElement(By.cssSelector("#password2")).getAttribute("placeholder");
        Assertions.assertEquals(placeholder2, "再次输入密码");

        String button = driver.findElement(By.cssSelector("#submit")).getAttribute("value");
        Assertions.assertEquals(button, "注册");

        driver.navigate().back();

        String label3 = driver.findElement(By.cssSelector("#body > div > div:nth-child(2) > label")).getText();
        Assertions.assertEquals(label3, "用户名:");

        String placeholder3 = driver.findElement(By.cssSelector("#user")).getAttribute("placeholder");
        Assertions.assertEquals(placeholder3, "请输入用户名");

        String label4 = driver.findElement(By.cssSelector("#body > div > div:nth-child(3) > label")).getText();
        Assertions.assertEquals(label4, "密码:");

        String placeholder4 = driver.findElement(By.cssSelector("#password")).getAttribute("placeholder");
        Assertions.assertEquals(placeholder4, "请输入密码");

        WebElement element1 = driver.findElement(By.cssSelector("#submit"));
        Assertions.assertNotNull(element1);
    }

    //测试窗口
    @Order(2)
    void windowSize() throws InterruptedException {
        driver.manage().window().maximize();
        appearance();
        driver.manage().window().minimize();
        appearance();
        Thread.sleep(2000);
    }

    //username都是错误的 4种长度密码 都不能登录 username对 4种长度密码
    @ParameterizedTest
    @CsvSource(value = {"a,123", "b,123", "c,123", "d,123",
            "e,123", "f,123", "g,123", "h,123"})
    @Order(3)
    void falseLogin(String username, String password) throws InterruptedException {
        driver.findElement(By.cssSelector("#user")).clear();
        driver.findElement(By.cssSelector("#user")).sendKeys(username);
        driver.findElement(By.cssSelector("#password")).clear();
        driver.findElement(By.cssSelector("#password")).sendKeys(password);
        driver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(2000);

        Alert alert = driver.switchTo().alert();
        alert.accept();
    }

    //正确登录
    @ParameterizedTest
    @CsvSource(value = {"gly,123", "aaa,123", "kkk,123"})
    @Order(4)
    void trueLogin(String username, String password) throws InterruptedException {
        String windowHandle = driver.getWindowHandle();
        driver.switchTo().window(windowHandle);
        driver.findElement(By.cssSelector("#user")).clear();
        driver.findElement(By.cssSelector("#user")).sendKeys(username);
        driver.findElement(By.cssSelector("#password")).clear();
        driver.findElement(By.cssSelector("#password")).sendKeys(password);
        driver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(2000);

        Alert alert = driver.switchTo().alert();
        alert.accept();

        Set<String> windowHandles = driver.getWindowHandles();
        for(String window : windowHandles){
            if(window != windowHandle){
                driver.switchTo().window(window);
                break;
            }
        }

        String text = driver.findElement(By.xpath("/html/body/div[1]/h3")).getText();
        Assertions.assertNotNull(text);
        String text2 = driver.findElement(By.cssSelector("#submit1")).getText();
        Assertions.assertEquals(text2, "查询");

        driver.navigate().back();
        driver.switchTo().window(windowHandle);

    }

    //账户名 密码为空
    @Test
    @Order(5)
    void nullLogin() throws InterruptedException {
        driver.findElement(By.cssSelector("#user")).clear();
        driver.findElement(By.cssSelector("#password")).clear();
        driver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(2000);
        Alert alert = driver.switchTo().alert();
        alert.accept();
    }

    //密码为空
    @Test
    @Order(6)
    void OneNoLogin1() throws InterruptedException {
        Thread.sleep(1000);
        driver.findElement(By.cssSelector("#user")).sendKeys("qqq");
        driver.findElement(By.cssSelector("#password")).clear();
        driver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(3000);
        Alert alert = driver.switchTo().alert();
        alert.accept();
    }

    //账号为空
    @Test
    @Order(7)
    void OneNoLogin2() throws InterruptedException {
        Thread.sleep(1000);
        driver.findElement(By.cssSelector("#user")).clear();
        driver.findElement(By.cssSelector("#password")).sendKeys("123");
        driver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(3000);
        Alert alert = driver.switchTo().alert();
        alert.accept();
        driver.quit();
    }
}

注册测试

package com.example.onlinemusic.Mymusic;

import org.junit.jupiter.api.*;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import java.time.Duration;

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class RegistTest{
    private static ChromeDriver driver;

    private static ChromeDriver getDriver() {
        if (driver == null) {
            driver = new ChromeDriver();
            //隐式等待
            driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
        }
        return driver;
    }

    @Test
    @BeforeAll
    static void start() throws InterruptedException {
        driver = getDriver();
        driver.get("http://49.232.4.81:8080/login.html");
        driver.findElement(By.cssSelector("#body > div > div:nth-child(5) > a")).click();
        Thread.sleep(2000);
    }

    @Test
    @Order(1)
    void registUI(){
        String label = driver.findElement(By.cssSelector("#body > div > div:nth-child(2) > label")).getText();
        Assertions.assertEquals(label, "用户名:");

        String placeholder = driver.findElement(By.cssSelector("#user")).getAttribute("placeholder");
        Assertions.assertEquals(placeholder, "请输入用户名");

        String label1 = driver.findElement(By.cssSelector("#body > div > div:nth-child(3) > label")).getText();
        Assertions.assertEquals(label1, "密码:");

        String placeholder1 = driver.findElement(By.cssSelector("#password1")).getAttribute("placeholder");
        Assertions.assertEquals(placeholder1, "请输入密码");

        String label2 = driver.findElement(By.cssSelector("#body > div > div:nth-child(4) > label")).getText();
        Assertions.assertEquals(label2, "确认密码:");

        String placeholder2 = driver.findElement(By.cssSelector("#password2")).getAttribute("placeholder");
        Assertions.assertEquals(placeholder2, "再次输入密码");

        WebElement element = driver.findElement(By.cssSelector("#body > div > h3"));
        Assertions.assertNotNull(element);
    }

    //测试注册功能 成功注册和输入两次密码不正确的用户
    @ParameterizedTest
    @CsvSource(value = {"qqq,123,123", "aaa,123,1234"})
    @Order(2)
    void registGN(String username, String password, String newPassword) throws InterruptedException {
        if (driver.findElement(By.cssSelector("#body > div > h3")).getText().equals("登录")){
            driver.findElement(By.cssSelector("#body > div > div:nth-child(5) > a")).click();
        }
        driver.findElement(By.cssSelector("#user")).sendKeys(username);
        driver.findElement(By.cssSelector("#password1")).sendKeys(password);
        driver.findElement(By.cssSelector("#password2")).sendKeys(newPassword);
        driver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(3000);
        Alert alert = driver.switchTo().alert();
        alert.accept();
    }
    @Test
    @Order(3)
    void quite() {
        driver.quit();
    }
}

音乐列表页测试

package com.example.onlinemusic.Mymusic;
import org.junit.jupiter.api.*;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.chrome.ChromeDriver;

import java.time.Duration;
import java.util.Set;

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class MusicListTest {
    private static ChromeDriver driver;

    private static ChromeDriver getDriver() {
        if (driver == null) {
            driver = new ChromeDriver();
            //隐式等待
            driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
        }
        return driver;
    }

    @Test
    @BeforeAll
    static void start() throws InterruptedException {
        driver = getDriver();
        driver.get("http://49.232.4.81:8080/login.html");
        String windowHandle = driver.getWindowHandle();
        driver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(2000);
        Alert alert = driver.switchTo().alert();
        alert.accept();
        Set<String> windowHandles = driver.getWindowHandles();
        for(String window : windowHandles){
            if(window != windowHandle){
                driver.switchTo().window(window);
                break;
            }
        }
    }

    @Test
    @Order(1)
    void ListUI() throws InterruptedException {
        String text = driver.findElement(By.xpath("/html/body/div[1]/h3")).getText();
        Assertions.assertNotNull(text);

        String text1 = driver.findElement(By.cssSelector("#body > div.container > div:nth-child(2) > form > div > label")).getText();
        Assertions.assertEquals(text1, "歌曲名");

        String text2 = driver.findElement(By.cssSelector("#submit1")).getText();
        Assertions.assertEquals(text2, "查询");

        String text3 = driver.findElement(By.cssSelector("#body > div.container > div.nav > a:nth-child(1)")).getText();
        Assertions.assertEquals(text3, "喜欢列表");

        String text4 = driver.findElement(By.cssSelector("#body > div.container > div.nav > a:nth-child(2)")).getText();
        Assertions.assertEquals(text4, "添加歌曲");

        String text5 = driver.findElement(By.cssSelector("#delete")).getText();
        Assertions.assertEquals(text5, "删除选中");
    }

    //模糊查询 和 全值匹配
    @ParameterizedTest
    @ValueSource(strings = {"C", "Crush", "h"})
    @Order(2)
    void search(String name) throws InterruptedException {

        driver.findElement(By.cssSelector("#exampleInputName2")).clear();
        driver.findElement(By.cssSelector("#exampleInputName2")).sendKeys(name);
        driver.findElement(By.cssSelector("#submit1")).click();

        String text = driver.findElement(By.cssSelector("#info > tr:nth-child(1) > td:nth-child(2)")).getText();
        Assertions.assertEquals(text, "Crush");

        Thread.sleep(1000);
        //检测一下搜索后的 UI
        String text1 = driver.findElement(By.cssSelector("#info > tr:nth-child(1) > td:nth-child(5) > button:nth-child(2)")).getText();
        Assertions.assertEquals(text1, "喜欢");

        String text2 = driver.findElement(By.cssSelector("#info > tr:nth-child(1) > td:nth-child(5) > button:nth-child(1)")).getText();
        Assertions.assertEquals(text2, "删除");

        String text3 = driver.findElement(By.cssSelector("#info > tr:nth-child(1) > td:nth-child(4) > button")).getText();
        Assertions.assertEquals(text3, "播放歌曲");

    }

    @Test
    @Order(3)
    void deleteMusic() throws InterruptedException {
        driver.navigate().refresh();
        Thread.sleep(1000);
        driver.findElement(By.cssSelector("#info > tr:nth-child(5) > td:nth-child(5) > button:nth-child(1)")).click();
        Thread.sleep(3000);
        Alert alert = driver.switchTo().alert();
        alert.accept();

        Thread.sleep(3000);
        System.out.println("删除成功");
    }

    @Test
    @Order(4)
    void loveMusic() throws InterruptedException {
        //喜欢音乐
        driver.findElement(By.cssSelector("#info > tr > td:nth-child(5) > button:nth-child(2)")).click();
        Thread.sleep(3000);
        Alert alert = driver.switchTo().alert();
        alert.accept();
        Thread.sleep(2000);
        driver.findElement(By.cssSelector("#body > div.container > div.nav > a:nth-child(1)")).click();
        driver.findElement(By.cssSelector("#info > tr > td:nth-child(3) > button")).click();
        Thread.sleep(3000);
        String text = driver.findElement(By.cssSelector("#info > tr > td:nth-child(1)")).getText();
        Assertions.assertEquals(text, "Crush");
        driver.findElement(By.cssSelector("body > div.container > div:nth-child(3) > a")).click();
    }

    @Test
    @Order(5)
    void quit() {
        driver.quit();
    }
}

文件上传测试

package com.example.onlinemusic.Mymusic;

import org.junit.jupiter.api.*;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import java.time.Duration;
import java.util.Set;

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class FileUploadTest {
    private static ChromeDriver driver;

    private static ChromeDriver getDriver() {
        if (driver == null) {
            driver = new ChromeDriver();
            //隐式等待
            driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
        }
        return driver;
    }

    @Test
    @BeforeAll
    static void start() throws InterruptedException {
        driver = getDriver();
        driver.get("http://49.232.4.81:8080/login.html");
        Thread.sleep(2000);
        String windowHandle = driver.getWindowHandle();
        driver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(2000);
        Alert alert = driver.switchTo().alert();
        alert.accept();
        Set<String> windowHandles = driver.getWindowHandles();
        for(String window : windowHandles){
            if(window != windowHandle){
                driver.switchTo().window(window);
                break;
            }
        }
    }

    @Test
    @Order(1)
    void uploadUI() throws InterruptedException {
        driver.findElement(By.cssSelector("#body > div.container > div.nav > a:nth-child(2)")).click();
        Thread.sleep(3000);

        String text2 = driver.findElement(By.cssSelector("body > form > input[type=submit]:nth-child(3)")).getAttribute("value");
        Assertions.assertEquals(text2, "上传");
    }

    //成功上传
    @Test
    @Order(2)
    void uploadFile1() throws InterruptedException {
        WebElement element = driver.findElement(By.cssSelector("body > form > input[type=file]:nth-child(1)"));
        element.sendKeys("D:\\下载\\小半.mp3");
        Thread.sleep(3000);
        driver.findElement(By.cssSelector("body > form > label > input[type=text]")).sendKeys("陈粒");
        driver.findElement(By.cssSelector("body > form > input[type=submit]:nth-child(3)")).click();

        Thread.sleep(2000);
    }

    //同歌名不同歌手
    @Test
    @Order(3)
    void uploadFile2() throws InterruptedException {
        driver.findElement(By.cssSelector("#body > div.container > div.nav > a:nth-child(2)")).click();
        Thread.sleep(3000);
        WebElement element = driver.findElement(By.cssSelector("body > form > input[type=file]:nth-child(1)"));
        element.sendKeys("D:\\下载\\小半.mp3");
        Thread.sleep(3000);
        driver.findElement(By.cssSelector("body > form > label > input[type=text]")).sendKeys("陈粒粒");
        driver.findElement(By.cssSelector("body > form > input[type=submit]:nth-child(3)")).click();

        Thread.sleep(2000);

        try{
            String text = driver.findElement(By.cssSelector("#submit1")).getText();
            Assertions.assertEquals(text, "查询");
        }catch (Exception e){
            System.out.println("已用同名歌曲,上传失败");
        }
    }

    //不传文件 报错
    @Test
    @Order(4)
    void uploadFile3() throws InterruptedException {
        driver.findElement(By.cssSelector("#body > div.container > div.nav > a:nth-child(2)")).click();
        Thread.sleep(3000);
        WebElement element = driver.findElement(By.cssSelector("body > form > input[type=file]:nth-child(1)"));
        Thread.sleep(3000);
        driver.findElement(By.cssSelector("body > form > label > input[type=text]")).sendKeys("陈粒粒");
        driver.findElement(By.cssSelector("body > form > input[type=submit]:nth-child(3)")).click();

        Thread.sleep(2000);

        try{
            String text = driver.findElement(By.cssSelector("#submit1")).getText();
            Assertions.assertEquals(text, "查询");
        }catch (Exception e){
            System.out.println("没有选择文件,上传失败!");
            driver.navigate().back();
            driver.navigate().back();
        }
    }

    //上传的不是mp3文件
    @Test
    @Order(5)
    void uploadFile4() throws InterruptedException {
        driver.findElement(By.cssSelector("#body > div.container > div.nav > a:nth-child(2)")).click();
        Thread.sleep(3000);
        WebElement element = driver.findElement(By.cssSelector("body > form > input[type=file]:nth-child(1)"));
        element.sendKeys("D:\\下载\\《乔治湖,自由习作》.jpg");
        Thread.sleep(3000);
        driver.findElement(By.cssSelector("body > form > label > input[type=text]")).sendKeys("陈粒粒");
        driver.findElement(By.cssSelector("body > form > input[type=submit]:nth-child(3)")).click();

        Thread.sleep(2000);

        try{
            String text = driver.findElement(By.cssSelector("#submit1")).getText();
            Assertions.assertEquals(text, "查询");
        }catch (Exception e){
            System.out.println("不是MP3文件,上传失败!");
            driver.navigate().back();
            driver.navigate().back();
        }
    }

    //上传修改后缀名得到的 MP3 文件 格式错误
    @Test
    @Order(6)
    void uploadFile5() throws InterruptedException {
        driver.findElement(By.cssSelector("#body > div.container > div.nav > a:nth-child(2)")).click();
        Thread.sleep(3000);
        WebElement element = driver.findElement(By.cssSelector("body > form > input[type=file]:nth-child(1)"));
        element.sendKeys("D:\\下载\\修改后缀名.mp3");
        Thread.sleep(3000);
        driver.findElement(By.cssSelector("body > form > label > input[type=text]")).sendKeys("陈粒粒");
        driver.findElement(By.cssSelector("body > form > input[type=submit]:nth-child(3)")).click();

        Thread.sleep(2000);

        try{
            String text = driver.findElement(By.cssSelector("#submit1")).getText();
            Assertions.assertEquals(text, "查询");
        }catch (Exception e){
            System.out.println("不是mp3文件,上传失败!");
            driver.navigate().back();
            driver.navigate().back();
        }

        driver.quit();
    }
}

通过 Suite 套件测试

package com.example.onlinemusic.Mymusic;


import org.junit.platform.suite.api.SelectClasses;
import org.junit.platform.suite.api.Suite;

@Suite
@SelectClasses({LoginTest.class,RegistTest.class,MusicListTest.class,FileUploadTest.class})
public class RunSuit {
}

测试结果

全部通过测试:
在这里插入图片描述

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lockey-s

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值