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

目录

一、项目介绍

二、测试计划

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:系统不够稳定,后续应进一步优化系统以降低标准差,提高系统的可靠性和稳定性。

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

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


  • 8
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值