个人博客论坛系统测试报告

news2024/12/23 4:42:53

目录

一、项目介绍

二、测试计划

1、功能测试

(1)测试环境:

(2)测试用例编写

(3)部分功能测试

2、自动化测试

🍑注册页面测试

验证注册成功的情况

验证注册失败的情况

🍑登录界面测试

登录成功测试

登录失败测试

🍑显示博客列表测试

未登录状态下测试

登录状态下测试

🍑 发布帖子测试

未登录状态下测试

登录后测试

🍑帖子详情页测试

未登录状态下

登录状态下

🍑删除帖子测试

登录状态下测试

🍑个人中心显示

未登录测试

登录状态下测试

🍑显示个人信息并修改

未登录测试

登录显示个人信息测试

 登录后修改昵称测试

 登录后修改密码测试

🍑退出测试

3、性能测试

对登录界面进行性能测试。

VUG录制脚本 

使用Controller 

生成测试报告


一、项目介绍

   基于Spring前后端分离的博客论坛系统,实现了注册、登录、显示帖子、编辑帖子、删除帖子、回复帖子、点赞帖子,修改个人信息等功能,并将其部署到云服务器上。

要点:

1、使用统⼀返回格式+全局错误信息定义处理前后端交互时的返回结果;
2、使用@ControllerAdvice+@ExceptionHandler实现全局异常处理;
3、使用拦截器实现用户登录校验;
4、集成Swagger实现⾃动⽣成API测试接口;

5、对密码进行加密处理。

 访问地址:http://124.71.152.247:8081/sign-in.html

二、测试计划

1、功能测试

(1)测试环境:

操作系统:Windows 10家庭版
项目运行环境:IIntelliJ IDEA Community Edition 2022.1.4、JDK1.8、MySQL5.7
浏览器:Chorme、Edge、FireFox、QQ浏览器
自动化脚本环境:IIntelliJ IDEA Community Edition 2022.1.4
访问链接:http://124.71.152.247:8081/index.html
测试技术: 主要手工进行单元测试和自动化测试
测试人员: 本人

(2)测试用例编写

  功能测试:

         非功能测试点:

 (3)部分功能测试

对注册页面进行的测试

场景1:输入用户名存在,密码与确认密码一致,点击注册

预期结果:提示用户已经存在

实际结果:提示用户已经存在,与预期结果一致。

场景2:输入用户名不存在,密码与却密码一致,点击注册

预期结果:注册成功,跳转回登录界面

实际结果:注册成功,跳转回登录界面,与预期结果一致。

对登录页面进行的测试

场景1:输入用户名存在,密码与确认密码一致,点击登录

预期结果:登录成功,跳转到首页博客列表页面

实际结果:与预期结果一致。 

场景2:输入用户名存在,密码与确认密码不一致,点击登录

预期结果:登录失败,给出错误提示

实际结果:登录失败,给出错误提示。

 ......

对首页进行的测试

场景1:未登录状态下,点击首页

预期结果:跳转回登录界面

实际结果:跳转回登录界面,与预期结果一致。

场景2:登录状态下,点击“首页”

预期结果:导航栏显示所有的版块名,下方显示所有帖子列表,右上方显示登录用户信息。

实际结果:与预期结果一致。

场景3:登录状态下,点击导航栏处的版块名“C++”

预期结果:下方显示C++名称,该版块下的帖子数量,版块下的所有帖子列表,右上方显示登录用户信息。

实际结果:与预期结果一致。

场景4:登录状态下,在搜索框输入关键字“数据库”搜索

预期结果:下方显示帖子正文中所有存在“数据库”这三个字的帖子;

实际结果:刷新回到首页界面,与预期不符。不支持搜索功能。

场景5:登录状态下,点击“月亮”按钮

预期结果:进入夜间模式的切换

实际结果:进入夜间模式的切换,与预期相符。

场景6:登录状态下,点击“发布帖子”按钮

预期结果:进入博客编辑页面,版块名默认选择Java

实际结果:与预期相符。

......

对编辑页面进行的测试

场景1:未登录状态下,进入编辑页面

预期结果:跳转回登录界面

实际结果:跳转回登录界面,与预期结果一致。

场景2:登录状态下,不输入帖子标题,输入帖子内容,点击发布

预期结果:给出提示:请输入帖子标题

实际结果:与预期相符。

场景3:登录状态下,输入帖子标题,不输入帖子内容,点击发布

预期结果:给出提示:请输入帖子内容

实际结果:与预期相符。

场景4:登录状态下,输入帖子标题,输入帖子内容,点击发布

预期结果:编辑成功,跳转回首页,最上方显示刚发布的帖子信息

实际结果:与预期相符。

...... 

对帖子详情页面进行的测试

场景1:未登录状态下,点击首页下的任意一条帖子内容

预期结果:跳转回登录界面

实际结果:跳转回登录界面,与预期结果一致。

场景2:登录状态下,点击首页下的一条帖子内容“西安”

预期结果:跳转到该帖子详情页面

实际结果:与预期相符。

场景3:登录状态下,点击首页下的一条帖子内容“西安”(帖子作者“小狐狸”,当前登录作者“小星星”)

预期结果:跳转到该帖子详情页面,最上方显示帖子信息,左侧显示帖子作者信息,下方显示该帖子的内容,下方只显示点赞按钮。

实际结果:与预期相符。

场景4:登录状态下,下方点赞按钮

预期结果:上方显示的点赞数加1

实际结果:与预期相符。

场景5:登录状态下,点击首页下的一条帖子内容“123”(帖子作者“小星星”,当前登录作者“小星星”)

预期结果:跳转到该帖子详情页面,最上方显示帖子信息,左侧显示帖子作者信息,下方显示该帖子的内容,下方显示点赞按钮,删除按钮、编辑按钮。

实际结果:与预期相符。

场景6:登录状态下,点击首页下的一条帖子内容“123”,观察访问数变化

预期结果:跳转到该帖子详情页面,最上方显示帖子信息中的访问数+1

实际结果:与预期相符。

场景7:登录状态下,点击发私信按钮,不输入文本内容,点击“发送”

预期结果:给出警告提示:请输入要发送的内容

实际结果:与预期相符。

场景8:登录状态下,点击发私信按钮,输入文本内容,点击“发送”

预期结果:给出成功提示,发送成功

实际结果:与预期相符。

 

场景9:登录状态下,在下方的回复框中不输入文本内容,点击“回复”

预期结果:给出警告提示,请输入回复内容

实际结果:与预期相符。

场景10:登录状态下,在下方的回复框中输入文本内容,点击“回复”

预期结果:给出成功提示,同时下方显示回复内容。

实际结果:与预期相符。

...... 

对个人中心页面进行的测试

场景1:未登录状态下,点击首页下的任意一条帖子内容

预期结果:跳转回登录界面

实际结果:跳转回登录界面,与预期结果一致。

场景2:登录状态下,点击“我的帖子”

预期结果:下方显示该登录用户的所有帖子信息

实际结果:与预期相符。

场景3:登录状态下,点击“个人中心”

预期结果:下方显示该登录用户的所有信息

实际结果:与预期相符。

场景4:登录状态下,“修改头像”

预期结果:打开 电脑,上传本地图片并更新头像。

实际结果:打开电脑,上传本地图片,但是没有反应。与预期不符。(不支持修改头像)

场景5:登录状态下,“修改昵称”

预期结果:输入修改后的昵称,并刷新成功

实际结果:与预期一致。

场景5:登录状态下,“修改密码”:原密码错误,新密码和确认密码一致,点击修改密码

预期结果:给出警告提示:原密码有误。

实际结果:输出后端具体代码信息,与预期不一致。

场景6:登录状态下,“修改密码”:原密码正确,新密码和确认密码不一致,点击修改密码

预期结果:给出警告提示:两次输入的密码不一致。

实际结果:与预期一致。

场景7:登录状态下,“修改密码”:原密码正确,新密码和确认密码一致,点击修改密码

预期结果:跳转回登录界面,要求重新登录

实际结果:与预期一致。

 ......

这里只给出部分测试,其他功能测试就不一一展示了。

2、自动化测试

🍑注册页面测试

验证注册成功的情况

场景1:注册用户名在数据库不存在,昵称,两次密码一致,注册成功,跳转回登录界面。

/**
     * 场景1:不存在的用户名,昵称,两次密码一致
     */
    @Order(1)
    @ParameterizedTest
    @CsvSource(value = "apple,apple,123,123")
    void Register(String username, String nickname,String password1,String password2) throws InterruptedException, IOException {
        // 打开注册页面
        webDriver.get("http://124.71.152.247:8081/sign-in.html");
        //点击注册按钮
        webDriver.findElement(By.cssSelector("body > div > div > div > div:nth-child(1) > div > div.text-center.text-muted.mt-3 > a")).click();
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        // 输入用户名
        webDriver.findElement(By.cssSelector("#username")).sendKeys(username);
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        // 输入昵称
        webDriver.findElement(By.cssSelector("#nickname")).sendKeys(nickname);
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        // 输入密码
        webDriver.findElement(By.cssSelector("#password")).sendKeys(password1);
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        // 确认密码
        webDriver.findElement(By.cssSelector("#passwordRepeat")).sendKeys(password2);
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        //点击复选框
        webDriver.findElement(By.cssSelector("#policy")).click();
        // 点击提交
        webDriver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(1000); // 显示等待
        // 注册成功之后,判断是否会跳转回登录界面
        String expect = "http://124.71.152.247:8081/sign-in.html";
        String actual = webDriver.getCurrentUrl();
        // 进行截图,看当前是否跳转到了登录界面
        webDriver.manage().timeouts().implicitlyWait(300, TimeUnit.MINUTES);
        Assertions.assertEquals(expect, actual);
        System.out.println("注册成功");
        // 进行截图,看当前是否跳转到了登录界面
        // 程序执行的速度和页面渲染的速度
        File srcFile =  ((TakesScreenshot)webDriver).getScreenshotAs(OutputType.FILE);
        String fileName = "RegisterTest.png";
        FileUtils.copyFile(srcFile, new File(fileName));
        Thread.sleep(1000); // 显示等待
        //因为我们要测试多个账号,所有在一个账号检测完了后,还需要回退到登录界面
        webDriver.navigate().back();
    }

验证注册失败的情况

场景2:注册用户名在数据库存在,昵称,两次密码一致,注册失败,获取警告框信息。

代码同上。测试结果

🍑登录界面测试

登录成功测试

场景1:测试用户名正确,密码正确,登录成功

/**
     * 场景1:用户名和密码都正确
     */
    @Order(1)
    @ParameterizedTest
    @CsvSource(value = "cherry, 123")
    void Login1(String username, String password) throws InterruptedException, IOException {
        // 打开登录页面
        webDriver.get("http://124.71.152.247:8081/sign-in.html");
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        // 输入用户名
        webDriver.findElement(By.cssSelector("#username")).sendKeys(username);
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        // 输入密码
        webDriver.findElement(By.cssSelector("#password")).sendKeys(password);
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        // 点击提交
        webDriver.findElement(By.cssSelector("#submit")).click();
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.MINUTES);

        Thread.sleep(1000); // 显示等待,等待弹窗出现
        // 上述步骤只是说明输入了账号和密码,但还不知道点击提交后是否会跳转到博客列表页
        String expect = "http://124.71.152.247:8081/index.html";
        String actual = webDriver.getCurrentUrl();//
//        // 进行截图,看当前是否跳转到了登录界面
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        Assertions.assertEquals(expect, actual); // 查看当前的url是否在博客详情页面
        // 进行截图,看当前是否跳转到了登录界面
        // 程序执行的速度和页面渲染的速度
        File srcFile =  ((TakesScreenshot)webDriver).getScreenshotAs(OutputType.FILE);
        String fileName = "loginTest.png";
        FileUtils.copyFile(srcFile, new File(fileName));
        Thread.sleep(1000); // 显示等待,等待弹窗出现
        //因为我们要测试多个账号,所有在一个账号检测完了后,还需要回退到登录界面
        webDriver.navigate().back();
    }

登录失败测试

场景2:测试用户名正确,密码错误,登录失败

@Order(2)
    @ParameterizedTest
    @CsvSource(value = "cherry1, 123")
    void Login2(String username, String password) throws InterruptedException, IOException {
        // 打开登录页面
        webDriver.get("http://124.71.152.247:8081/sign-in.html");
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        // 输入用户名
        webDriver.findElement(By.cssSelector("#username")).sendKeys(username);
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        // 输入密码
        webDriver.findElement(By.cssSelector("#password")).sendKeys(password);
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        // 点击提交
        webDriver.findElement(By.cssSelector("#submit")).click();
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.MINUTES);

        Thread.sleep(1000);
        String msg = webDriver.findElement(By.cssSelector("body > div.jq-toast-wrap.bottom-right > div")).getText();
        System.out.println(msg);
    }

🍑显示博客列表测试

未登录状态下测试

场景1:未登录状态下进入博客列表页,直接跳转回登录界面。测试通过。

/**
     * 场景1:未登录状态下,进入博客列表页,是否跳转回登录页面
     */
    @Order(1)
    @Test
    void BlogList1() throws InterruptedException, IOException {
        //1-不登录,直接打开博客显示列表页
        webDriver.get("http://124.71.152.247:8081/index.html");
        //获取当前的url地址
        String expect = "http://124.71.152.247:8081/sign-in.html";
        String actual = webDriver.getCurrentUrl();
        //判断是否跳转到登录界面
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        Assertions.assertEquals(expect, actual);
        //截图
        File srcFile =  ((TakesScreenshot)webDriver).getScreenshotAs(OutputType.FILE);
        String fileName = "BlogListFailed.png";
        FileUtils.copyFile(srcFile, new File(fileName));
    }

未登录,直接跳转回登录界面

登录状态下测试

场景2:登录后进入博客列表页,查看“首页”元素是否存在,查看是否含有“发布帖子”按钮。

 /**
     * 场景2:登录状态下,进入博客列表页,是否正确显示帖子相应的控件信息
     */
    @Order(2)
    @ParameterizedTest
    @CsvSource(value = "cherry, 123")
    void BlogList2(String username, String password) throws InterruptedException, IOException {
        //1-登录
        // 打开登录页面
        webDriver.get("http://124.71.152.247:8081/sign-in.html");
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        // 输入用户名
        webDriver.findElement(By.cssSelector("#username")).sendKeys(username);
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        // 输入密码
        webDriver.findElement(By.cssSelector("#password")).sendKeys(password);
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        // 点击提交
        webDriver.findElement(By.cssSelector("#submit")).click();
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.MINUTES);

        //2-查看页面的文本内容显示是否正确
        String expect1 = "首页";
        System.out.println();
        String actual1 = webDriver.findElement(By.cssSelector("#nav_board_index > a > span.nav-link-title")).getText();
        Assertions.assertEquals(expect1, actual1); // 断言

        //截图
        File srcFile =  ((TakesScreenshot)webDriver).getScreenshotAs(OutputType.FILE);
        String fileName = "BlogListSuccess.png";
        FileUtils.copyFile(srcFile, new File(fileName));

        //3-查看是否有发布帖子按钮,并点击
        webDriver.findElement(By.cssSelector("#bit-forum-content > div.page-header.d-print-none > div > div > div.col-auto.ms-auto.d-print-none > div > a.btn.btn-primary.d-none.d-sm-inline-block.article_post")).click();
Thread.sleep(1000);
        //查看是否跳转到博客编辑页面
        String expectUrl = "http://124.71.152.247:8081/index.html";
        String actualUrl = webDriver.getCurrentUrl();
        Assertions.assertEquals(expectUrl, actualUrl); // 断言
        System.out.println("跳转到边界帖子页面");

    }

🍑 发布帖子测试

未登录状态下测试

场景1:未登录状态下发布帖子,直接跳转回登录界面。

 /**
     * 场景1:未登录状态下,是否跳转回登录页面
     */
    @Order(1)
    @Test
    void WriteBlog1() throws InterruptedException, IOException {
        //1-不登录,直接打开博客编辑页
        webDriver.get("http://124.71.152.247:8081/index.html");
        //获取当前的url地址
        String expect = "http://124.71.152.247:8081/sign-in.html";
        String actual = webDriver.getCurrentUrl();
        //判断是否跳转到登录界面
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        Assertions.assertEquals(expect, actual);
        //截图
        File srcFile =  ((TakesScreenshot)webDriver).getScreenshotAs(OutputType.FILE);
        String fileName = "WriteBlogFailed.png";
        FileUtils.copyFile(srcFile, new File(fileName));
    }

登录后测试

场景2:登录后,输入帖子标题,不输入帖子内容,点击发布按钮,给出提示信息。

/**
     * 场景2:登录状态下
     */
    @Order(2)
    @ParameterizedTest
    @CsvSource(value = "cherry, 321")
    void WriteBlog2(String username, String password) throws InterruptedException, IOException {
        //1-登录
        // 打开登录页面
        webDriver.get("http://124.71.152.247:8081/sign-in.html");
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        // 输入用户名
        webDriver.findElement(By.cssSelector("#username")).sendKeys(username);
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        // 输入密码
        webDriver.findElement(By.cssSelector("#password")).sendKeys(password);
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        // 点击提交
        webDriver.findElement(By.cssSelector("#submit")).click();
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.MINUTES);

        //场景2:输入标题,内容为空,点击发布帖子按钮,获取警告信息
        //2-点击 发布帖子按钮#article_post_submit
        webDriver.findElement(By.cssSelector("#bit-forum-content > div.page-header.d-print-none > div > div > div.col-auto.ms-auto.d-print-none > div > a.btn.btn-primary.d-none.d-sm-inline-block.article_post")).click();
        //场景1:输入标题
        webDriver.findElement(By.cssSelector("#article_post_title")).sendKeys("标题");
        Thread.sleep(1000);
        //不输入内容
        //点击提交按钮
        webDriver.findElement(By.cssSelector("#article_post_submit")).click();
        //获取警告框信息
        System.out.println(webDriver.findElement(By.cssSelector("body > div.jq-toast-wrap.bottom-right > div")).getText());

        // 截图
        File srcFile =  ((TakesScreenshot)webDriver).getScreenshotAs(OutputType.FILE);
        String fileName = "WriteBlogFailed.png";
        FileUtils.copyFile(srcFile, new File(fileName));
    }

🍑帖子详情页测试

未登录状态下

场景1:未登录状态下,进入帖子详情页,直接跳转回登录界面。

/**
     * 场景1:未登录状态下,进入博客详情页,是否跳转回登录页面
     */
    @Order(1)
    @Test
    void BlogDetail1() throws InterruptedException, IOException {
        //1-不登录,直接打开博客详情页
        webDriver.get("http://124.71.152.247:8081/index.html");
        //获取当前的url地址
        String expect = "http://124.71.152.247:8081/sign-in.html";
        String actual = webDriver.getCurrentUrl();
        //判断是否跳转到登录界面
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        Assertions.assertEquals(expect, actual);
        //截图
        File srcFile =  ((TakesScreenshot)webDriver).getScreenshotAs(OutputType.FILE);
        String fileName = "BlogListFailed.png";
        FileUtils.copyFile(srcFile, new File(fileName));
    }

登录状态下

/**
     * 场景2:登录状态下,进入博客详情页,是否正确显示对应帖子的信息
     */
    @Order(2)
    @ParameterizedTest
    @CsvSource(value = "cherry, 123")
    void BlogList2(String username, String password) throws InterruptedException, IOException {
        //1-登录
        // 打开登录页面
        webDriver.get("http://124.71.152.247:8081/sign-in.html");
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        // 输入用户名
        webDriver.findElement(By.cssSelector("#username")).sendKeys(username);
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        // 输入密码
        webDriver.findElement(By.cssSelector("#password")).sendKeys(password);
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        // 点击提交
        webDriver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(5000);

//        2-场景1:点击帖子内容"西安",博客作者与登录作者不一致,只显示点赞按钮
        webDriver.findElement(By.cssSelector("#artical-items-body > div:nth-child(3) > div > div.col > div.text-truncate > a > strong")).click();
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.MINUTES);
        //是否跳转到 帖子详情页
        //获取当前的url地址
        String expect = "http://124.71.152.247:8081/index.html";
        String actual = webDriver.getCurrentUrl();
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        Assertions.assertEquals(expect, actual);
        //帖子详情页是否含有 帖子 标题
        System.out.println(webDriver.findElement(By.cssSelector("#details_article_content_title")).getText());
        Thread.sleep(5000);
        //帖子内容
        System.out.println(webDriver.findElement(By.cssSelector("#h1-u897Fu5B89u5927u5510u4E0Du591Cu57CE")).getText());
        Thread.sleep(1000);
        //帖子作者
        System.out.println(webDriver.findElement(By.cssSelector("#article_details_author_name")).getText());
        Thread.sleep(1000);
        //点赞按钮
        webDriver.findElement(By.cssSelector("#details_btn_like_count")).click();
        Thread.sleep(1000);
//        截图
        File srcFile =  ((TakesScreenshot)webDriver).getScreenshotAs(OutputType.FILE);
        String fileName = "BlogDetailSuccess1.png";
        FileUtils.copyFile(srcFile, new File(fileName));


        //2-场景2:点击帖子内容"测试",博客作者与登录作者一致,显示点赞按钮、编辑按钮,删除按钮
//        webDriver.findElement(By.cssSelector("#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong")).click();
//        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.MINUTES);
//        //是否跳转到 帖子详情页
//        //获取当前的url地址
//        String expect2 = "http://124.71.152.247:8081/index.html";
//        String actual2 = webDriver.getCurrentUrl();
//        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
//        Assertions.assertEquals(expect2, actual2);
//        //帖子详情页是否含有 帖子 标题
//        System.out.println(webDriver.findElement(By.cssSelector("#details_article_content_title")).getText());
//        Thread.sleep(1000);
//        //帖子内容
//        System.out.println(webDriver.findElement(By.cssSelector("#details_article_content > p")).getText());
//        Thread.sleep(1000);
//        //帖子作者
//        System.out.println(webDriver.findElement(By.cssSelector("#article_details_author_name")).getText());
//        Thread.sleep(1000);
//        //点赞按钮
//        webDriver.findElement(By.cssSelector("#details_btn_like_count")).click();
//        //编辑按钮
//        webDriver.findElement(By.cssSelector("#details_artile_edit"));
//        //删除按钮
//        webDriver.findElement(By.cssSelector("#bit-forum-content > div.page-body > div > div > div:nth-child(1) > div.col-9.card.card-lg > div.card-footer.bg-transparent.mt-auto.justify-content-end > div > div:nth-child(3) > div > a"));
//        Thread.sleep(1000);
//        System.out.println("测试成功2");
//
//        //截图
//        File srcFile =  ((TakesScreenshot)webDriver).getScreenshotAs(OutputType.FILE);
//        String fileName = "BlogDetailSuccess2.png";
//        FileUtils.copyFile(srcFile, new File(fileName));
    }

场景1:登录后,登录用户与帖子作者不一致,获取帖子标题、帖子内容、帖子作者、点赞按钮。

 场景2:登录后,登录用户与帖子作者一致,获取帖子标题、帖子内容、帖子作者、点赞按钮、编辑按钮、删除按钮。

🍑删除帖子测试

登录状态下测试

场景:登录后,进入帖子详情页,点击删除按钮,删除帖子成功,成功跳转回帖子列表页面。

 /**
     * 场景2:登录状态下,进入博客详情页,是否正确显示对应帖子的信息,点击删除按钮并删除
     */
    @Order(2)
    @ParameterizedTest
    @CsvSource(value = "cherry, 123")
    void BlogList2(String username, String password) throws InterruptedException, IOException {
        //1-登录
        // 打开登录页面
        webDriver.get("http://124.71.152.247:8081/sign-in.html");
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        // 输入用户名
        webDriver.findElement(By.cssSelector("#username")).sendKeys(username);
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        // 输入密码
        webDriver.findElement(By.cssSelector("#password")).sendKeys(password);
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        // 点击提交
        webDriver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(5000);


        //2-场景2:点击帖子内容"测试",博客作者与登录作者一致,显示点赞按钮、编辑按钮,删除按钮
        webDriver.findElement(By.cssSelector("#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong")).click();
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.MINUTES);
        //是否跳转到 帖子详情页
        //获取当前的url地址
        String expect2 = "http://124.71.152.247:8081/index.html";
        String actual2 = webDriver.getCurrentUrl();
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        Assertions.assertEquals(expect2, actual2);
        
        //删除按钮
        webDriver.findElement(By.cssSelector("#bit-forum-content > div.page-body > div > div > div:nth-child(1) > div.col-9.card.card-lg > div.card-footer.bg-transparent.mt-auto.justify-content-end > div > div:nth-child(3) > div > a")).click();
        Thread.sleep(1000);
        //判断是否跳转回博客列表页面
        //是否跳转到 帖子详情页
        //获取当前的url地址
        String expect1 = "http://124.71.152.247:8081/index.html";
        String actual1 = webDriver.getCurrentUrl();
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        Assertions.assertEquals(expect1, actual1);
        System.out.println("帖子删除成功");

        //截图
        File srcFile =  ((TakesScreenshot)webDriver).getScreenshotAs(OutputType.FILE);
        String fileName = "BlogDeleteSuccess1.png";
        FileUtils.copyFile(srcFile, new File(fileName));
    }

🍑个人中心显示

未登录测试

未登录状态下,进入博客列表页,点击我的帖子(都走不到这一步),跳转回登录页面。

登录状态下测试

场景:登录状态下,进入博客列表页,点击我的帖子,跳转到个人中心页面,显示用户昵称等信息。

/**
     * 场景2:登录状态下,进入博客列表页,点击我的帖子,跳转到个人中心页面
     */
    @Order(2)
    @ParameterizedTest
    @CsvSource(value = "cherry, 123")
    void BlogList2(String username, String password) throws InterruptedException, IOException {
        //1-登录
        // 打开登录页面
        webDriver.get("http://124.71.152.247:8081/sign-in.html");
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        // 输入用户名
        webDriver.findElement(By.cssSelector("#username")).sendKeys(username);
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        // 输入密码
        webDriver.findElement(By.cssSelector("#password")).sendKeys(password);
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        // 点击提交
        webDriver.findElement(By.cssSelector("#submit")).click();
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.MINUTES);

        //2-点击我的帖子
        webDriver.findElement(By.cssSelector("#index_nav_avatar")).click();
        Thread.sleep(1000);
        webDriver.findElement(By.cssSelector("#index_user_profile")).click();
        Thread.sleep(1000);
        //是否有用户昵称
        webDriver.findElement(By.cssSelector("#profile_nickname"));

        //截图
        File srcFile =  ((TakesScreenshot)webDriver).getScreenshotAs(OutputType.FILE);
        String fileName = "CenterInfoSuccess.png";
        FileUtils.copyFile(srcFile, new File(fileName));
    }

🍑显示个人信息并修改

未登录测试

场景1:未登录状态下,进入博客列表页,点击用户头像下的个人中心(都走不到这一步),跳转回登录页面。

登录显示个人信息测试

场景2:登录后点击用户头像下的个人中心,输入新昵称并修改,获取新昵称观察是否显示成功。

场景3:登录后点击用户头像下的个人中心,输入新密码并修改,其中两次密码一致,输入原密码也正确,观察是否跳转回登录界面。

@Order(2)
    @ParameterizedTest
    @CsvSource(value = "cherry, 123")
    void BlogList2(String username, String password) throws InterruptedException, IOException {
        //1-登录
        // 打开登录页面
        webDriver.get("http://124.71.152.247:8081/sign-in.html");
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        // 输入用户名
        webDriver.findElement(By.cssSelector("#username")).sendKeys(username);
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        // 输入密码
        webDriver.findElement(By.cssSelector("#password")).sendKeys(password);
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        // 点击提交
        webDriver.findElement(By.cssSelector("#submit")).click();
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.MINUTES);

        //2-点击我的帖子
        webDriver.findElement(By.cssSelector("#index_nav_avatar")).click();
        Thread.sleep(1000);
        webDriver.findElement(By.cssSelector("#index_user_settings")).click();
        Thread.sleep(1000);
        //是否有用户昵称
        webDriver.findElement(By.cssSelector("#settings_nickname"));
        //是否有“昵称”这两个字
        webDriver.findElement(By.cssSelector(" #bit-forum-content > div.page-body > div > div > div > div.col.d-flex.flex-column > div > h3:nth-child(4)"));
        //是否有“邮箱地址”这几个字
        webDriver.findElement(By.cssSelector(" #bit-forum-content > div.page-body > div > div > div > div.col.d-flex.flex-column > div > h3:nth-child(7)"));
        //是否有“电话号码”这几个字
        webDriver.findElement(By.cssSelector(" #bit-forum-content > div.page-body > div > div > div > div.col.d-flex.flex-column > div > h3:nth-child(10)"));
        //是否有“修改密码”这几个字
        webDriver.findElement(By.cssSelector(" #bit-forum-content > div.page-body > div > div > div > div.col.d-flex.flex-column > div > h3:nth-child(13)"));

        //是否有“提交修改”按钮#settings_input_passwordRepeat
        webDriver.findElement(By.cssSelector("#settings_submit_password"));
        Thread.sleep(1000);
        //截图
        File srcFile =  ((TakesScreenshot)webDriver).getScreenshotAs(OutputType.FILE);
        String fileName = "CenterInfoListSuccess.png";
        FileUtils.copyFile(srcFile, new File(fileName));
    }

 登录后修改昵称测试

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class CenterInfoListTest extends InitAndEnd {
    /**
     * 场景1:用户名和密码都正确
     */
    @Order(1)
    @ParameterizedTest
    @CsvSource(value = "cherry, 123")
    void Login1(String username, String password) throws InterruptedException, IOException {
        // 打开登录页面
        webDriver.get("http://124.71.152.247:8081/sign-in.html");
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        // 输入用户名
        webDriver.findElement(By.cssSelector("#username")).sendKeys(username);
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        // 输入密码
        webDriver.findElement(By.cssSelector("#password")).sendKeys(password);
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        // 点击提交
        webDriver.findElement(By.cssSelector("#submit")).click();
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.MINUTES);
    }
    /**
     * 场景2:登录状态下,进入博客列表页,点击个人中心,跳转到个人中心页面
     */
    @Order(2)
    @Test
    void BlogList2() throws InterruptedException, IOException {
        //2-点击我的帖子
        webDriver.findElement(By.cssSelector("#index_nav_avatar")).click();
        Thread.sleep(1000);
        webDriver.findElement(By.cssSelector("#index_user_settings")).click();
        Thread.sleep(1000);
        //是否有用户昵称
        webDriver.findElement(By.cssSelector("#settings_nickname"));
        //是否有“昵称”这两个字
        webDriver.findElement(By.cssSelector(" #bit-forum-content > div.page-body > div > div > div > div.col.d-flex.flex-column > div > h3:nth-child(4)"));
        //是否有“邮箱地址”这几个字
        webDriver.findElement(By.cssSelector(" #bit-forum-content > div.page-body > div > div > div > div.col.d-flex.flex-column > div > h3:nth-child(7)"));
        //是否有“电话号码”这几个字
        webDriver.findElement(By.cssSelector(" #bit-forum-content > div.page-body > div > div > div > div.col.d-flex.flex-column > div > h3:nth-child(10)"));
        //是否有“修改密码”这几个字
        webDriver.findElement(By.cssSelector(" #bit-forum-content > div.page-body > div > div > div > div.col.d-flex.flex-column > div > h3:nth-child(13)"));

        //是否有“提交修改”按钮#settings_input_passwordRepeat
        webDriver.findElement(By.cssSelector("#settings_submit_password"));
        Thread.sleep(1000);
        //截图
        File srcFile =  ((TakesScreenshot)webDriver).getScreenshotAs(OutputType.FILE);
        String fileName = "CenterInfoListSuccess1.png";
        FileUtils.copyFile(srcFile, new File(fileName));

        //3-修改昵称
        //清除昵称的文本内容
        webDriver.findElement(By.cssSelector("#setting_input_nickname")).clear();
        //输入要修改的内容
        webDriver.findElement(By.cssSelector("#setting_input_nickname")).sendKeys("newCherry");
        //点击修改按钮
        webDriver.findElement(By.cssSelector("#setting_submit_nickname")).click();
        Thread.sleep(1000);
        //再次获取昵称,判断是不是修改后的昵称名
        String actualNickName = webDriver.findElement(By.cssSelector("#settings_nickname")).getText();
        Thread.sleep(1000);
        String exceptNickName = "newCherry";
        Assertions.assertEquals(actualNickName, exceptNickName); // 断言
        System.out.println("昵称修改成功!");

        //截图
        File srcFile1 =  ((TakesScreenshot)webDriver).getScreenshotAs(OutputType.FILE);
        String fileName1 = "CenterInfoListSuccess2.png";
        FileUtils.copyFile(srcFile1, new File(fileName1));
    }
}

 登录后修改密码测试

//4-修改密码:原密码123正确,两次新密码321也一致
        //输入原密码
        webDriver.findElement(By.cssSelector("#settings_input_oldPassword")).sendKeys("123");
        //输入新密码
        webDriver.findElement(By.cssSelector("#settings_input_newPassword")).sendKeys("321");
        //输入确认密码
        webDriver.findElement(By.cssSelector("#settings_input_passwordRepeat")).sendKeys("321");
        //点击 提交修改 按钮
        webDriver.findElement(By.cssSelector("#settings_submit_password")).click();
        Thread.sleep(1000);
        //判断是否返回登录界面
        //获取当前的url地址
        String expect = "http://124.71.152.247:8081/sign-in.html";
        String actual = webDriver.getCurrentUrl();
        //判断是否跳转到登录界面
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        Assertions.assertEquals(expect, actual);
        //截图
        File srcFile2 =  ((TakesScreenshot)webDriver).getScreenshotAs(OutputType.FILE);
        String fileName2 = "CenterInfoListSuccess3.png";
        FileUtils.copyFile(srcFile2, new File(fileName2));

🍑退出测试

场景:登录后,点击用户头像下的退出按钮,跳转回登录界面,退出成功。

 @Order(1)
    @ParameterizedTest
    @CsvSource(value = "cherry, 321")
    void LoginOut1(String username, String password) throws InterruptedException, IOException {
        //1-登录
        // 打开登录页面
        webDriver.get("http://124.71.152.247:8081/sign-in.html");
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        // 输入用户名
        webDriver.findElement(By.cssSelector("#username")).sendKeys(username);
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        // 输入密码
        webDriver.findElement(By.cssSelector("#password")).sendKeys(password);
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        // 点击提交
        webDriver.findElement(By.cssSelector("#submit")).click();
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.MINUTES);

        //2-点击我的帖子
        webDriver.findElement(By.cssSelector("#index_nav_avatar")).click();
        Thread.sleep(1000);
        //点击退出按钮
        webDriver.findElement(By.cssSelector("#index_user_logout")).click();
        Thread.sleep(1000);
        //获取当前的url地址
        String expect = "http://124.71.152.247:8081/sign-in.html";
        String actual = webDriver.getCurrentUrl();
        //判断是否跳转到登录界面
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        Assertions.assertEquals(expect, actual);

        //截图
        File srcFile =  ((TakesScreenshot)webDriver).getScreenshotAs(OutputType.FILE);
        String fileName = "LoginOutSuccess.png";
        FileUtils.copyFile(srcFile, new File(fileName));
    }

3、性能测试

对登录界面进行性能测试。

VUG录制脚本 

Action()
{

	web_url("sign-in.html", 
		"URL=http://124.71.152.247:8081/sign-in.html", 
		"Resource=0", 
		"Referer=", 
		"Snapshot=t1.inf", 
		"Mode=HTML", 
		EXTRARES, 
		"Url=/sign-in.html", ENDITEM, 
		LAST);

	web_add_cookie("__huid=119NsjOYxU6mdbuaWxJs2RsDkAbqvUbWoATer/xQupFzE=; DOMAIN=cloud.browser.360.cn");

	lr_think_time(7);

	web_custom_request("sea", 
		"URL=http://cloud.browser.360.cn/hp/sea", 
		"Method=POST", 
		"Resource=0", 
		"Referer=", 
		"Snapshot=t2.inf", 
		"Mode=HTML", 
		"EncType=text/plain", 
		"Body=WQF5sG2A3G87Di1j/9lVU6tGpUxjbi8h9dOSKi0nx0bBqI3NhNjo%2BhJjBEgGG7vJpmWkPaE8H7VriNz9f/uQIcxcAQMslbR5BrNQFX%2BaLkMlu51TJYzYI03Ix9kMz7AGv5atKy3kF9YF86MaiowJ%2B88BdH2zke9LfjkSSOnDIB9pCrQEMhm%2BWy2gk8ziS7Izk7GF/IvqUyc5GvTM4PFYu3hjejRzs4fV", 
		LAST);

	web_custom_request("safe_update", 
		"URL=http://vconf.f.360.cn/safe_update", 
		"Method=POST", 
		"Resource=0", 
		"RecContentType=application/octet-stream", 
		"Referer=", 
		"Snapshot=t3.inf", 
		"Mode=HTML", 
		"BodyBinary=\\x0E\\x06$!\\x01\\x08$\\xB8j\\xC4\\x00\\x00\\x00\\x00\\xF8\\xD7\\xFB\\xE5\\xFD\\x9A/\\xC2&\\x90\\x94$N\\x85R\\x1Br$2>b\\xB8\\x84\\xE5\\xE6\\xF8\\x18\\xF2\\xC1,\\x88\\xFC\t\\xF9\\x84\\xB1Ls)q\n\\x05\\x8Bw\\x8B,\\x066\\xE1\\xE50\\x11\\xB9\\xAF\\xD5!\\x18\\x14\\x8C,\\x86I_\\x1C\\xE81\\xFAE\\xB8L\\xD0\\x95\\x03\\x8E\\xCB\\xB9}\\xFCi,\\x18F\\xAD\\xF4\r\\x82'IqH\\xFD\\xF8\\x0CIe\\x84\\x1B\\xF8\\x00\\x9C\\x0Be]"
		"#\\xD0f\\x82\\xA6\\xE2c\\x7F\\xCC\\xC9.\\xE2\\x03\\xDB\\xBF\\xF5\\xBF3Mfu\\xF2\\xF2Hz\\x1B\\x02M\\xB7;\\xC9U\\xF9\\xED\\x90\\x06\\xB7\\x19\\xA1\\x96\\x98S\\xCF\\xB2\\x00LO\"\\xDD\\xD4S\\x11Zp\\xB1\\x9B\\x7F\\xDA\\x9C\\x03|\\x9B\\xCB\\xE9\\x96-T.3\\xF4\\xF8\\xE7O2DK\\x00\\xA0J\\xC5\\x06\\x9Cb \\xC8\\xA8\\xDF\\xBB3\\xA5\\x82\\x902\\x82\\xF4\\xB7nH\\x90\\xCAN<\\x07\\xC0\\x074l>4=\\x12\\x8D\\x8E9\\xDB}\\xA7\\xDA\\x05e\\x085V^#~\\x03%\\x07\\xD0\\xD4N\\x9C\\x98b\\x93g\\x84z\\xE2"
		"[x\\xB3E\\x10\\xDA\\x86w3fpk:\\x0E?B?_\\xF9\\xBB\\x8D(@\\xE9\\x1D\\x02D\\xFB\\xEC\\xFE\\xE8\\xA88\\xB6-\\xBA$6\\x8D\\x00\\x04\\xBC\\x06\\xFFN", 
		EXTRARES, 
		"Url=http://t.wg.360-api.cn/api/helpgame?app=hotrank", "Referer=", ENDITEM, 
		"Url=http://t.wg.360-api.cn/ap/tips/browse?cver=&mid=9584dcf1d21227deae8dfc79c880b3cc", "Referer=", ENDITEM, 
		"Url=http://t.wg.360-api.cn/ap/tips/guess?sence=browse_ai&mid=9584dcf1d21227deae8dfc79c880b3cc&cver=9.1.2.1018&gver=", "Referer=", ENDITEM, 
		"Url=http://cseupdate.360safe.com/formal/360chrome.cab?ver=13.5.2044.0&mid=9584dcf1d21227deae8dfc79c880b3cc&guid=9584dcf1d21227deae8dfc79c880b3cc&pid=360CE", "Referer=", ENDITEM, 
		LAST);

	web_add_cookie("__huid=11jHmC5E3q3/A2xfpl7ar/4QDK+68TzjQe82izYITuvsI=; DOMAIN=browser.360.cn");

	web_custom_request("crx_game_2.html", 
		"URL=http://browser.360.cn/se/config/crx_game_2.html", 
		"Method=GET", 
		"Resource=0", 
		"RecContentType=text/html", 
		"Referer=", 
		"Snapshot=t4.inf", 
		"Mode=HTML", 
		LAST);

	web_add_cookie("__huid=11jHmC5E3q3/A2xfpl7ar/4QDK+68TzjQe82izYITuvsI=; DOMAIN=cloud.browser.360.cn");

	web_submit_data("info", 
		"Action=http://cloud.browser.360.cn/site/info", 
		"Method=POST", 
		"EncType=multipart/form-data", 
		"RecContentType=text/plain", 
		"Referer=", 
		"Snapshot=t5.inf", 
		"Mode=HTML", 
		ITEMDATA, 
		"Name=rn", "Value=459029", ENDITEM, 
		"Name=sitedata", "Value=6f1751515d170703091e5156591a1b6d", ENDITEM, 
		LAST);

	web_submit_data("info_2", 
		"Action=http://cloud.browser.360.cn/site/info", 
		"Method=POST", 
		"EncType=multipart/form-data", 
		"RecContentType=text/plain", 
		"Referer=", 
		"Snapshot=t6.inf", 
		"Mode=HTML", 
		ITEMDATA, 
		"Name=rn", "Value=224189", ENDITEM, 
		"Name=sitedata", "Value=691005030c1705031a000d0b1c0000060201020a051e4b50555c195856175a46595d1a64", ENDITEM, 
		LAST);

	web_submit_data("info_3", 
		"Action=http://cloud.browser.360.cn/site/info", 
		"Method=POST", 
		"EncType=multipart/form-data", 
		"RecContentType=text/plain", 
		"Referer=", 
		"Snapshot=t7.inf", 
		"Mode=HTML", 
		ITEMDATA, 
		"Name=rn", "Value=112784", ENDITEM, 
		"Name=sitedata", "Value=6a1303000a1a03051c050b071f0006040205010903184f5153655d424a471e136f", ENDITEM, 
		LAST);

	web_submit_data("info_4", 
		"Action=http://cloud.browser.360.cn/site/info", 
		"Method=POST", 
		"EncType=multipart/form-data", 
		"RecContentType=text/plain", 
		"Referer=", 
		"Snapshot=t8.inf", 
		"Mode=HTML", 
		ITEMDATA, 
		"Name=rn", "Value=774065", ENDITEM, 
		"Name=sitedata", "Value=6c150507041b05031a020506190600030c04070f041f415055635b454446156a", ENDITEM, 
		LAST);

	web_submit_data("info_5", 
		"Action=http://cloud.browser.360.cn/site/info", 
		"Method=POST", 
		"EncType=multipart/form-data", 
		"RecContentType=text/plain", 
		"Referer=", 
		"Snapshot=t9.inf", 
		"Mode=HTML", 
		ITEMDATA, 
		"Name=rn", "Value=587854", ENDITEM, 
		"Name=sitedata", "Value=6e1a5051415c405a195b5a591a5355425d555b5f070d05011765", ENDITEM, 
		LAST);

	web_submit_data("info_6", 
		"Action=http://cloud.browser.360.cn/site/info", 
		"Method=POST", 
		"EncType=multipart/form-data", 
		"RecContentType=text/plain", 
		"Referer=", 
		"Snapshot=t10.inf", 
		"Mode=HTML", 
		ITEMDATA, 
		"Name=rn", "Value=314153", ENDITEM, 
		"Name=sitedata", "Value=6813585e56525f595b4241090b010c001a77565c5b076a7f5c565d5f7c5d116c", ENDITEM, 
		EXTRARES, 
		"Url=http://t.wg.360-api.cn/ap/bar/pull?mid=9584dcf1d21227deae8dfc79c880b3cc&cver=", "Referer=", ENDITEM, 
		LAST);

	lr_start_transaction("1_login");

	web_add_cookie("__huid=11jHmC5E3q3/A2xfpl7ar/4QDK+68TzjQe82izYITuvsI=; DOMAIN=upext.chrome.360.cn");

	lr_think_time(8);

	web_url("intf.php", 
		"URL=http://upext.chrome.360.cn/intf.php?method=ExtUpdate.query&os=win&arch=x86&os_arch=x86_64&nacl_arch=x86-64&prod=chromiumcrx&prodchannel=stable&prodversion=86.0.4240.198&lang=zh-CN&acceptformat=crx2,crx3&cse=13.5.2044.0&x=id%3Dcfbkpilajlmedibkjkhcckpkpphhhklm%26v%3D1.3.1%26installsource%3Dnotfromwebstore%26installedby%3Dinternal%26uc", 
		"Resource=0", 
		"RecContentType=text/xml", 
		"Referer=", 
		"Snapshot=t11.inf", 
		"Mode=HTML", 
		LAST);

	lr_think_time(8);

	web_submit_data("login", 
		"Action=http://124.71.152.247:8081/user/login", 
		"Method=POST", 
		"RecContentType=application/json", 
		"Referer=http://124.71.152.247:8081/sign-in.html", 
		"Snapshot=t12.inf", 
		"Mode=HTML", 
		ITEMDATA, 
		"Name=username", "Value=apple", ENDITEM, 
		"Name=password", "Value=123", ENDITEM, 
		LAST);

	web_url("index.html", 
		"URL=http://124.71.152.247:8081/index.html", 
		"Resource=0", 
		"Referer=http://124.71.152.247:8081/sign-in.html", 
		"Snapshot=t13.inf", 
		"Mode=HTML", 
		EXTRARES, 
		"Url=/user/info", ENDITEM, 
		"Url=/board/topList", ENDITEM, 
		"Url=/message/getUnreadCount", ENDITEM, 
		"Url=/message/getAll", ENDITEM, 
		"Url=/article/getAllByBoardId", ENDITEM, 
		LAST);

	web_url("article_list.html", 
		"URL=http://124.71.152.247:8081/article_list.html", 
		"Resource=0", 
		"Referer=http://124.71.152.247:8081/index.html", 
		"Snapshot=t14.inf", 
		"Mode=HTML", 
		LAST);

	lr_end_transaction("1_login",LR_AUTO);

	return 0;
}

 脚本录制通过

设置10个虚拟用户数量,防止电脑崩溃。 

使用Controller 

(1)创建性能测试场景

一次初始化一个用户,每次间隔15s初始化一个虚拟用户;

设置虚拟用户数量10个,每隔10S启动一个用户;

 

运行5分钟;

 

退出所有用户,每隔10s退出一个用户。

 

 (2)点击运行,启动场景

运行过程截图

结束截图  

 生成测试报告

  • 虚拟用户数为10:测试中使用了10个虚拟用户。
  • 点击率为2928:在一定时间内发生的点击次数。测试中出现了2928次点击。
  • 吞吐量为112738:系统在单位时间内处理的请求数量,测试期间处理了112738个请求。
  • 标准差为23.316:系统不够稳定,后续应进一步优化系统以降低标准差,提高系统的可靠性和稳定性。

 点击率:刚开始启动,点击率较少,后面慢慢开始增大。

吞吐量:点击数越多,要处理的数量就越多,和上图的趋势相似。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/948872.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WebDAV之π-Disk派盘 + 思源笔记

思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。 融合块、大纲和双向链接,重构你的思维。 π-Disk派盘 – 知识管理专家 派盘是一款面向个人和企业的本地云存储解决方案,它可以帮助用户打造“数字第二大脑”,并支持KMS知识管理系…

Qt自定义标题栏

一、创建项目 最终项目文件结构如下 “iconfont.tff”的使用方式见如下博客&#xff0c;用于更改图标颜色Qt更改图标颜色_怎么追摩羯座的博客-CSDN博客 二、MyTitleBar.pro #------------------------------------------------- # # Project created by QtCreator 2023-08-2…

antd upload组件beforeUpload返回promise之后,获取的文件不是file类型导致上传失败

之前的beforeUpload直接返回一个false值 &#xff0c;文件是可以正常与服务端进行传输的 beforeUpload: (file) > {return false},但是这样并不能阻止文件上传&#xff0c;看了官方文档后&#xff0c;改用返回promise对象上传 beforeUpload: (file) > {console.log(-befo…

Primeng table filter 重置条件

我用一个overlayPanel装了p-table&#xff0c;里面有个count的filter&#xff0c;但是我设置值之后&#xff0c;让overlayPanel消失&#xff0c;再出现的时候&#xff0c;明明已经重新设置了表里面的数据和filter的变量值&#xff0c;但是上一次的条件仍然在,旁边的文字filter依…

openGauss本地Centos7.6单机安装和简单应用

openGauss本地Centos7.6单机安装和简单应用 openGauss基础环境配置openGauss安装openGauss使用测试openGauss常用命令 openGauss基础环境配置 在VMware Workstation中安装一台 centos7.6 内存&#xff1a;8GB&#xff0c;亲测4GB安装不够 磁盘&#xff1a;测试50GB-100GB够用 …

谈了千百遍的数据一致性

今天来说一个老生常谈的问题&#xff0c;来看一个实际案例&#xff1a; 现有业务中往往都会通过缓存来提高查询效率&#xff0c;降低数据库的压力&#xff0c;尤其是在分布式高并发场景下&#xff0c;大量的请求直接访问Mysql很容易造成性能问题。 有一天老板找到了你… 老板…

四川玖璨电子商务有限公司:开抖店怎么运营

开抖店是一种越来越流行的创业方式&#xff0c;在社交媒体平台上开店销售各种商品&#xff0c;比如服装、配饰、美妆和家居用品等等。对于新手来说&#xff0c;他们可能会很关心自己开抖店能够多久出单。虽然这个问题没有一个固定的答案&#xff0c;但是以下是一些关键的运营方…

一文讲透:低代码平台是什么?低代码平台应该如何挑选?

低代码平台是什么&#xff1f;低代码平台的边界在哪&#xff1f;低代码平台的优势&#xff1f;低代码平台哪个好用&#xff1f;2023年有哪些国内值得关注的低代码平台&#xff1f;本文将深入浅出的带大家了解低代码平台&#xff0c;并且为大家带来2023年国内最热六款低代码平台…

【MySQL系列】-ORDER BY……HAVING详解及limit

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …

【ELK日志收集系统】

目录 一、概述 1.作用 2.为什么使用&#xff1f; 二、组件 1.elasticsearch 1.1 作用 1.2 特点 2.logstash 2.1 作用 2.2 工作过程 2.3 INPUT 2.4 FILETER 2.5 OUTPUTS 3.kibana 三、架构类型 1.ELK 2.ELKK 3.ELFK 4.ELFKK 四、案例 - 构建ELK集群 1.环境…

【行为树】py_trees 学习笔记

学习资料 《Introduction to behavior trees》 1. 概念说明 1.1 Action&#xff1a;pt.behaviour.Behaviour 在一个行为树中&#xff0c;Action 是一个叶节点&#xff08;Leaf Node&#xff09;&#xff0c;它实际执行某种行为或任务&#xff0c;并返回成功、失败或运行中的…

微服务·架构组件之注册与发现

引言 微服务架构在现代软件开发中越来越受欢迎&#xff0c;它通过将系统拆分为多个小型、自治的服务来提高可维护性、可扩展性和灵活性。然而随着服务数量的增多&#xff0c;服务之间的通信何发现变得更加复杂。本报告旨在深入探讨微服务中的注册与发现&#xff0c;介绍其背景…

使用rem + sass + 媒体查询 进行横竖屏适配移动端项目

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、 媒体查询&#xff08;Media Query&#xff09;1.简单了解2.简单例子3. 语法&#xff08;1&#xff09;媒体类型&#xff08;mediatype &#xff09;&#xff0…

【黑科技】游戏开发程序员必备工具【一】

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;效率…

MongoDB实验——在Java应用程序中操作 MongoDB 数据

在Java应用程序中操作 MongoDB 数据 1. 启动MongoDB Shell 2. 切换到admin数据库&#xff0c;使用root账户 3.开启Eclipse&#xff0c;创建Java Project项目&#xff0c;命名为MongoJava File --> New --> Java Project 4.在MongoJava项目下新建包&#xff0c;包名为mo…

【SpringBoot系列】 测试框架之@SpringBootTest的使用

SpringBootTest的详细介绍 SpringBootTest 是 Spring Boot 测试框架中的注解&#xff0c;用于标识一个测试类&#xff0c;以指示该类是一个 Spring Boot 应用程序的测试类。它允许你在测试环境中加载整个 Spring Boot 应用程序上下文&#xff0c;测试应用程序的各种组件、服务…

如何备考 PMP 考试?

一、PMP学习7步走攻略 ​1、熟悉考试大纲&#xff1a; PMP考试大纲是备考的基础&#xff0c;考生需要详细熟悉考试大纲&#xff0c;了解各个知识领域的重点和难点。 2、制定学习计划&#xff1a; 根据考试大纲和个人情况&#xff0c;制定学习计划&#xff0c;合理分配学习时间…

OA项目之我的会议(查询会议排座送审)

目录 会议查询 会议排座 会议送审 思路&#xff1a; 关键性会议SQL的编写后台实现前台实现 会议查询 MeetingInfoDao.java // 通用的会议查询SQL语句&#xff0c;包含会议信息表数据&#xff0c;主持人姓名、审批人姓名、会议状态private String getSQL() {return "…

android:新建工程文件介绍

一、前言当我们新建一个app时会呈现出固定的工程文件&#xff0c;这篇文章介绍新建工程里的文件。 二、介绍 Structure:就是你选择哪个页面就会显示那个页面的结构&#xff0c;就比如说我选择的是MainActivity他就会显示这个页面所使用的方法。 1-2&#xff1a;是android自动生…

【ESP32】解决接串口助手时,无法启动问题

本文主要记录ESP32正常烧录程序后&#xff0c;接上串口助手就无法启动&#xff0c;报错 waiting for download&#xff0c;拔掉串口助手后&#xff0c;程序可以正常启动 &#x1f4cb; 个人简介 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是喜欢记录零碎知识点的…