论坛测试报告(简单的自动化测试)

一、功能

1.注册:用户可通过注册账号和密码进行登录

2.登录:用户可以通过已注册的账号和密码进行登录

3.发布帖子:登录成功后,用户可点击发布帖子,选择“板块”,输入标题,输入内容,点击发布即可发布成功

4.查看帖子:登录成功后,跳转至论坛首页,用户可点击想要查看的帖子,点击帖子标题后跳转至帖子详情页

5.查看个人帖子:登录成功后,点击个人用户名字,点击我的帖子,即可跳转至个人已发布的全部帖子列表

6.删除个人帖子:登录成功后,点击个人用户名字,点击我的帖子,跳转至个人已发布的全部帖子列表,点击帖子标题,点击删除,弹出弹窗点击确认,即可删除成功

7.退出:登录成功后,点击个人用户名字,点击退出,即可退出当前用户

二、测试用例的设计

三、自动化测试

1.注册

/**
     * 注册
     * @param userName
     * @param password
     * @throws InterruptedException
     */
    @Disabled
    @Order(1)
    @ParameterizedTest
    @MethodSource("dataRegister")
    public void Register(String userName, String password) throws InterruptedException {
        webDriver.get("http://127.0.0.1:9580/sign-in.html");
        webDriver.manage().timeouts().implicitlyWait(5,TimeUnit.SECONDS);
        webDriver.findElement(By.xpath("/html/body/div/div/div/div[1]/div/div[3]/a")).click();
        sleep(5000);
        webDriver.manage().timeouts().implicitlyWait(5,TimeUnit.SECONDS);
        webDriver.findElement(By.cssSelector("#username")).sendKeys(userName);
        webDriver.findElement(By.cssSelector("#nickname")).sendKeys(userName);
        webDriver.findElement(By.cssSelector("#password")).sendKeys(password);
        webDriver.findElement(By.cssSelector("#passwordRepeat")).sendKeys(password);
        webDriver.findElement(By.cssSelector("#policy")).click();
        webDriver.findElement(By.cssSelector("#submit")).click();
        webDriver.findElement(By.cssSelector("body > div > div > div.text-center.text-muted.mt-3 > a")).click();
        webDriver.manage().timeouts().implicitlyWait(5,TimeUnit.SECONDS);
        sleep(2000);
    }

2.登录,成功之后跳转至论坛首页

  

    /**
     * 成功登录
     * @param userName
     * @param password
     * @param url
     * @throws InterruptedException
     */
    @Order(2)
    @ParameterizedTest
    @MethodSource("dataRight")
    public void LoginSuccess(String userName, String password, String url) throws InterruptedException {
        System.out.println("userName:" + userName + "\npassword:" + password + "\nurl:" + url);
        webDriver.get("http://127.0.0.1:9580/sign-in.html");
        webDriver.manage().window().maximize();
        webDriver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
        webDriver.findElement(By.cssSelector("#username")).sendKeys(userName);
        webDriver.findElement(By.cssSelector("#password")).sendKeys(password);
        webDriver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
        webDriver.findElement(By.cssSelector("#submit")).click();
        sleep(5000);
        webDriver.navigate().refresh();
        sleep(3000);
        webDriver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
        Assertions.assertEquals(url, webDriver.getCurrentUrl());
        System.out.println("登录成功:" + userName);
    }

3.发布帖子,测试是否发布成功

    /**
     * 发布帖子
     * @throws InterruptedException
     */

    @Order(3)
    @ParameterizedTest
    @MethodSource("titlePost")
    public void postText(String title) throws InterruptedException {
        webDriver.manage().timeouts().implicitlyWait(5,TimeUnit.SECONDS);
        webDriver.findElement(By.xpath("//*[@id=\"bit-forum-content\"]/div[1]/div/div/div[2]/div/a[1]")).click();
        webDriver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
        String text = webDriver.findElement(By.cssSelector("#bit-forum-content > div.page-header.d-print-none > div > div > div > h2")).getText();
//        Assertions.assertEquals("发新帖 ", text);
        webDriver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
        WebElement element = webDriver.findElement(By.cssSelector("#article_post_borad"));
        webDriver.findElement(By.cssSelector("#article_post_borad")).click();
        Select select = new Select(element);
        select.selectByIndex(3);
        webDriver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
        String text_post = webDriver.findElement(By.cssSelector("#article_post_borad")).getText();
        webDriver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
        webDriver.findElement(By.cssSelector("#article_post_title")).sendKeys(title);
        sleep(3000);
        webDriver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
        webDriver.manage().window().maximize();
        webDriver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
        sleep(2000);
        //找到输入行
        webDriver.findElement(By.xpath("//*[@id=\"edit-article\"]/div[1]/div[6]/div[1]/div/div/div")).click();
        sleep(5000);
        webDriver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
        WebElement span = webDriver.findElement(By.cssSelector("#edit-article > div.CodeMirror.cm-s-default.CodeMirror-wrap > div.CodeMirror-scroll > div.CodeMirror-sizer > div > div > div > div.CodeMirror-code > div > pre > span > span"));
        Thread.sleep(3000);
        Actions action = new Actions(webDriver);
        action.doubleClick(span).sendKeys(Keys.DELETE).perform();
        action.sendKeys("这是第一篇博客内容").perform();
        //((JavascriptExecutor) webDriver).executeScript("arguments[0].textContent='这是第一篇博客内容';", span);
        sleep(2000);
        //滑动到最底端,否则会找不到元素
        ((JavascriptExecutor)webDriver).executeScript("document.documentElement.scrollTop=10000");
        webDriver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
        sleep(2000);
        webDriver.findElement(By.xpath("//*[@id=\"article_post_submit\"]")).click();
        sleep(3000);
        //System.out.println(text_posts);
        System.out.println("发布成功:" + title);
    }

 4.查看个人中心的帖子,检查“发帖数”不为0,并检查发布的帖子标题是否是上面成功发布的帖子标题

    /**
     * 查看个人中心-我的帖子
     */
    @ParameterizedTest
    @Order(4)
    @MethodSource("titlePost")
    public void PCenter(String title) {
        webDriver.navigate().refresh();
        webDriver.findElement(By.xpath("/html/body/div[1]/header[1]/div/div/div[3]")).click();
        webDriver.findElement(By.cssSelector("#index_user_profile")).click();
        webDriver.manage().timeouts().implicitlyWait(5,TimeUnit.SECONDS);
        String text = webDriver.findElement(By.cssSelector("#profile_articleCount")).getText();
        //帖子数量不为0
        Assertions.assertNotEquals("0", text);
        String title_cur = webDriver.findElement(By.xpath("//*[@id=\"profile_article_body\"]/li[1]/div[2]/div/div/div/div/div[1]/a/strong")).getText();
        //发布的是否是之前的帖子
        Assertions.assertEquals(title, title_cur);
        System.out.println("查看成功:" + title);
    }

 5.删除个人已发布的帖子,并检查个人已发布帖子的第一篇标题是否正确

    /**
     * 删除已发布的帖子
     * @param url
     * @throws InterruptedException
     */

    @ParameterizedTest
    @Order(5)
    @MethodSource("url")
    public void deletePost(String url) throws InterruptedException {
//        webDriver.findElement(By.xpath("//*[@id=\"profile_article_body\"]/li[1]/div[2]/div/div/div/div/div[1]/a")).click();
//        webDriver.manage().timeouts().implicitlyWait(5,TimeUnit.SECONDS);
//        sleep(5000);
        sleep(2000);
        webDriver.findElement(By.xpath("//*[@id=\"profile_article_body\"]/li[1]/div[2]/div/div/div/div/div[1]/a")).click();
        webDriver.findElement(By.xpath("//*[@id=\"bit-forum-content\"]/div[2]/div/div/div[1]/div[2]/div[2]/div/div[3]/div/a")).click();
        sleep(1000);
        webDriver.manage().timeouts().implicitlyWait(5,TimeUnit.SECONDS);
        webDriver.findElement(By.cssSelector("#details_artile_delete")).click();
        sleep(3000);
        String url_cur = webDriver.getCurrentUrl();
        Assertions.assertEquals(url, url_cur);
        System.out.println("url"+url);
        //因为会有“成功发布帖子的链接出现”,所以需要刷新一下,否则一直处于无法找到元素的状态
        webDriver.navigate().refresh();
        sleep(3000);
        webDriver.manage().timeouts().implicitlyWait(5,TimeUnit.SECONDS);
        String text = webDriver.findElement(By.xpath("//*[@id=\"artical-items-body\"]/div[1]/div/div[2]/div[1]/a/strong")).getText();
        Assertions.assertEquals("java2", text);
        System.out.println("删除成功,首页第一篇帖子标题" + text);
    }

6.退出登录,成功后跳转至登录页面,检查当前页面的url是否正确

    /**
     * 退出登录
     * @param url
     * @throws InterruptedException
     */
    @ParameterizedTest
    @MethodSource("urlSignUp")
    @Order(6)
    public void quitCase(String url) throws InterruptedException {
        webDriver.navigate().refresh();
        sleep(3000);
        String url_cur = webDriver.getCurrentUrl();
        System.out.println("url_cur_before:" + url_cur);
        webDriver.findElement(By.cssSelector("body > div.page > header.navbar.navbar-expand-md.navbar-light.d-print-none > div > div > div.nav-item.dropdown")).click();
        webDriver.manage().timeouts().implicitlyWait(5,TimeUnit.SECONDS);
        webDriver.findElement(By.cssSelector("#index_user_logout")).click();
        webDriver.manage().timeouts().implicitlyWait(5,TimeUnit.SECONDS);
        url_cur = webDriver.getCurrentUrl();
        System.out.println("url_cur_after:" + url_cur);
        Assertions.assertEquals(url, url_cur);
        System.out.println("退出成功");
    }

 7.登录失败,测试弹出的警告内容是否是“用户名或密码错误”

    /**
     * 错误的用户名或者密码会登陆失败,并检查弹出链接是否是“用户名或密码错误”
     * @param userName
     * @param password
     * @param url
     */

    @Disabled
    @Order(10)
    @ParameterizedTest
    @MethodSource("dataFailed")
    public void LoginFailed(String userName, String password, String url) {
        System.out.println("userName:" + userName + "\npassword:" + password );
        webDriver.get("http://127.0.0.1:9580/sign-in.html");
        webDriver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
        webDriver.findElement(By.cssSelector("#username")).sendKeys(userName);
        webDriver.findElement(By.cssSelector("#password")).sendKeys(password);
        webDriver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
        webDriver.findElement(By.cssSelector("#submit")).click();
        String url_cur = webDriver.getCurrentUrl();
        System.out.println("url_cur:" + url_cur);
        //测试登陆失败后是否会跳转至别的页面
        Assertions.assertEquals(url, url_cur);
        //是否会弹出警告并且警告内容是否一致
        //服务器崩溃会提醒“内部问题,请联系管理员操作”
        String text = webDriver.findElement(By.xpath("/html/body/div[2]/div[1]")).getText();
        //这里需要的是最后一行的信息
        String[] alert_text = text.split("\n");
        System.out.println(alert_text[alert_text.length-1]);
        Assertions.assertEquals("用户名或密码错误", alert_text[alert_text.length-1]);
    }

8.自动化测试成功界面

 

四、遇到的问题

1.在获取当前页面的url时,断言一直显示错误,与实际不符,添加了强制等待sleep,断言成功

2.在“发布帖子”中,发现要先定位输入框,并且使用click点击一下才可继续输入

3.在“发布帖子”中,要输入帖子内容,一开始是用js语句和sendkeys输入,结果发现一直提示定位不到该元素,或者是该元素不可交互,以为是页面没被渲染成功,就添加了强制等待sleep和隐式等待,后来发现还是不行,又以为是页面没有最大化,添加了maximize,结果发现还是不行,即使使用sendkeys或者js输入内容后,后端接口依旧接收不到该内容,就改用Actions类输入,最后成功了

4.在“删除帖子”成功之后,页面需要刷新一下(refresh),因为删除成功后页面会变“灰”,无法定位元素,这里不太清楚原理

五、改进

1.可添加“编辑帖子”的测试

2.可添加“检查发布帖子的时间”的测试

3.可添加“搜索帖子标题”的测试

4.可添加性能测试(性能测试工具有一点点问题,一直没解决,无法回放,且无法生成分析报告)

5.可添加“弱网”测试

六、完整代码

selenium_forum_test: 论坛项目的简单自动化测试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值