网页聊天室项目测试报告

一.项目背景

1.网页聊天室是一种基于浏览器运行的实时在线聊天系统,允许多用户通过网页端进行文字交互,类似于微信的简易版,用户无需下载APP,通过浏览器快速进入临时讨论,支持用户之间的临时通信,好友管理和历史消息记录查看。

聊天室采用了SpringBoot,SpringMVC作为后端框架,通过WebSocket实现消息的实时传输,前端使用HTML,JavaScript,CSS构建用户界面,项目的自动化测试部分通过Selenium进行编写,结合Java语言进行测试脚本开发,主要对部分功能进行测试。

二.项目功能

网页聊天室主要实现了以下几个功能:登录,消息列表,联系人列表,会话框。

1.登录功能:用户以及密码已经在后端写入了数据库,没有实现用户注册功能,用户名和密码是已经存在的,登陆成功后会弹出弹窗,提示登陆成功,此时我们点击确定按钮就会跳转到会话框页面。

2.会话框:可以会话框页面看到登录用户的昵称,界面上有会话框和联系人两个图标,页面会显示与部分用户的聊天消息,最多不会出现十个字,上面有搜索框可以搜索联系人或某一条消息,但此功能还未实现。

3.消息列表:点进和某人的聊天界面,在输入框输入消息并发送,接收方可以收到发送方发送的消息,也可以在此界面查看到历史消息。

4.联系人列表:此界面会显示联系人好有,点击某一个联系人,他的会话会显示在会话界面的置顶位置,与该联系人进行聊天。

三.测试计划

设计测试用例方法主要从功能测试,界面测试,性能测试,兼容性测试,易用性测试,安全性测试,弱网测试,安装和卸载测试等方面进行测试,但个人博客的测试主要针对核心功能进行测试。

1.测试用例:

2.1.实际执行测试的部分操作步骤/截图

提示:用户名以及密码已经在后端写入了数据库了,是已经存在的,登录成功后点击确定按钮就会跳转到聊天页面

以zhangsan作为用户名为例

1)正常登录

用户名和密码正确,

预期结果:出现弹窗,提示登录成功点击弹窗确定按钮,进入主页面

2)错误登录

用户名错误,密码正确

预期结果:提示登录失败!

3)用户名正确,密码错误

预期结果:提示登录失败!

4)用户名为空,密码不为空

预期结果:提示当前输入的用户名或密码为空!

5)密码为空,用户名不为空

预期结果:提示当前输入的用户名或密码为空!

6)用户名和密码都为空

 预期结果:提示当前输入的用户名或密码为空!

2.2.聊天消息列表展示

在此列表页可以看到部分用户最近的聊天,以及联系人的名称,以及最后一条消息的部分内容,点击对应的联系人就会跳转到相应的聊天详情页。

1)列表页

2)聊天详情页

 3.3.联系人列表

可以在此列表查看所有的联系人,点击对应的联系人可与其进行聊天,并在聊天消息页将此联系人置顶。

1)联系人列表

2)跳转到相应聊天页

 4.4.聊天消息详情展示页

在此列表可以查看具体的信息详情,也可以查看其历史的消息,也可以编辑和发送消息,发送方点击发送按钮接收方会收到消息。

1)消息详情页

2)编辑和发送消息

3)发送消息

 4)发送成功

5.搜索框

但此功能还未实现,搜索东西并不能搜出来

四.自动化测试

1.登录界面测试

package tests;

import common.Utils;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;

public class LoginPage extends Utils {
    public static String url="http://127.0.0.1:8080/login.html";
    public LoginPage() {
        super(url);
    }
    //查看是否有登录页面
    public void LoginPageRight() throws InterruptedException {
        //通过查看页面元素是否存在来检查页面加载是否成功
        driver.findElement(By.cssSelector("body > div.login-container > div"));
        //页面上是否出现登录文字
        driver.findElement(By.cssSelector("body > div.login-container > div > h3"));
        Thread.sleep(3000);
        driver.findElement(By.cssSelector("#username"));
        driver.findElement(By.cssSelector("#password"));
        driver.findElement(By.cssSelector("#submit"));

    }
    //登录成功
    public void LoginSuc() throws InterruptedException {
        //清除原有的用户名和密码
        driver.navigate().refresh();
        Thread.sleep(3000);
        driver.findElement(By.cssSelector("#username")).sendKeys("zhangsan");
        driver.findElement(By.cssSelector("#password")).sendKeys("123");
        driver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(3000);
        //出现登录成功弹窗,点击确定进入列表页
        Alert alert=driver.switchTo().alert();
        alert.accept();
        Thread.sleep(3000);
        //检查点击确定之后是否登陆成功,进入会话列表页
        driver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.tab > div.tab-friend"));
        Thread.sleep(3000);
    }
    //登录失败
    //1.用户名,密码错误
    public void LoginFail() throws InterruptedException {
        //清除原有的用户名和密码
        driver.navigate().refresh();
        driver.findElement(By.cssSelector("#username")).sendKeys("zhangsan1");
        driver.findElement(By.cssSelector("#password")).sendKeys("1234");
        driver.findElement(By.cssSelector("#submit")).click();
        //等待弹窗
        Thread.sleep(3000);
        //出现登录失败弹窗,点击确定按钮重新登陆
        Alert alert=driver.switchTo().alert();
        String except="登录失败!";
        String res=driver.switchTo().alert().getText();
        assert res.equals(except);
        alert.accept();
        Thread.sleep(3000);
        driver.navigate().refresh();
        Thread.sleep(3000);
    }
    //2.用户名和密码为空
    public void LoginFailNull() throws InterruptedException {
        //清除原有的用户名和密码
        driver.navigate().refresh();
        driver.findElement(By.cssSelector("#submit")).click();
        //等待弹窗
        Thread.sleep(3000);
        //出现登录失败弹窗,点击确定按钮重新登陆
        Alert alert=driver.switchTo().alert();
        String except="当前输入的用户名或者密码为空!";
        String res=driver.switchTo().alert().getText();
        assert res.equals(except);
        alert.accept();
        Thread.sleep(3000);
        driver.navigate().refresh();
        Thread.sleep(3000);
    }
}

2.会话功能测试

package tests;

import common.Utils;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;

import java.io.IOException;
import java.util.List;


public class SessionPage extends Utils {
    public static String url="http://127.0.0.1:8080/client.html";
    public SessionPage() {
        super(url);
    }
    //进入会话页成功
    public void SessionPageRight() throws IOException, InterruptedException {
        //聊天页表
        driver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.tab > div.tab-session"));
        //用户名
        String expect="zhangsan";
        String res=driver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.user")).getText();
        assert res.equals(expect);
        //好友列表
        driver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.tab > div.tab-friend"));
        //搜索框
        driver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.search > input[type=text]"));
        //搜索按钮
        driver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.search > button"));
        //聊天的某一个用户
        driver.findElement(By.cssSelector("#session-list > li.selected"));
        //消息列表
        driver.findElement(By.cssSelector("#session-list"));
        //联系人列表
        driver.findElement(By.cssSelector("#friend-list"));
        Thread.sleep(3000);
        getScreenShot(getClass().getName());
        Thread.sleep(3000);
    }
    //点击消息,右侧会话框能正常显示该消息详细信息
    public void SessionList() throws InterruptedException, IOException {
        //点击消息列表标签页
        driver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.tab > div.tab-session")).click();
        //点击具体会话
        driver.findElement(By.cssSelector("#session-list > li:nth-child(1)>h3")).click();
        Thread.sleep(3000);
        //消息列表
        driver.findElement(By.cssSelector("#session-list"));
        Thread.sleep(3000);
        //遍历每条消息,记录最新消息的用户和消息
        List<WebElement> nums=driver.findElements(By.cssSelector("#session-list->li"));
        if(nums.size()!= 0){
            String name= driver.findElement(By.cssSelector("#session-list > li.selected > h3")).getText();
            String text=driver.findElement(By.cssSelector("#session-list > li.selected > p")).getText();
            Thread.sleep(3000);
            //点击具体会话
            driver.findElement(By.cssSelector("#session-list > li:nth-child(1)>h3")).click();
            Thread.sleep(3000);
            //检查消息和用户名
            String nameA=driver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.message-show > div:nth-child(5) > div > p")).getText();
            //验证最新一条消息
            assert nameA.equals(text);
            getScreenShot(getClass().getName());
            Thread.sleep(3000);
        }
    }
}

3.消息详情页

package tests;

import common.Utils;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;

import java.io.IOException;
import java.util.List;


public class ContactPage extends Utils {
    public static String url="http://127.0.0.1:8080/client.html";
    public ContactPage() {
        super(url);
    }


    public void ContactPageRight() throws InterruptedException, IOException {
        //点击联系人列表
        driver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.tab > div.tab-friend")).click();
        Thread.sleep(3000);
        //遍历联系人列表
        List<WebElement> nums=driver.findElements(By.cssSelector("#friend-list"));
        if(nums.size()!= 0){
            String name= driver.findElement(By.cssSelector("#friend-list > li:nth-child(1) > h4")).getText();
            Thread.sleep(3000);
            //点击置顶联系人
            driver.findElement(By.cssSelector("#friend-list > li:nth-child(1) > h4")).click();
            Thread.sleep(3000);
            //点击具体会话
            driver.findElement(By.cssSelector("#session-list > li:nth-child(1)>h3")).click();
            Thread.sleep(3000);
            //检查消息和用户名
            String text=driver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.message-show > div.message.message-right > div > p")).getText();
            String nameA=driver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.message-show > div.message.message-right > div > h4")).getText();
            //验证最新一条消息
            assert text.equals("你好呀!");
            getScreenShot(getClass().getName());
            Thread.sleep(3000);
        }
    }
}

4.信息编辑页

package tests;

import common.Utils;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;

import java.io.IOException;

public class MessageDetailsPage extends Utils {
    public static String url="http://127.0.0.1:8080/client.html";
    public MessageDetailsPage() {
        super(url);
    }
    //zhangsan给lisi发送消息
    public void ChatSuc() throws InterruptedException, IOException {
        //点击消息列表标签页
        driver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.tab > div.tab-session")).click();
        //点击具体会话
        driver.findElement(By.cssSelector("#session-list > li:nth-child(1)>h3")).click();
        Thread.sleep(3000);
        //在输入框发送消息
        driver.findElement(By.cssSelector("body > div.client-container > div > div.right > textarea")).sendKeys("你好呀!");
        Thread.sleep(3000);
        //点击发送按钮
        driver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.ctrl > button")).click();
        Thread.sleep(3000);
        //通过屏幕截图验证消息是否发送成功
        getScreenShot(getClass().getName());

    }
    //lisi收到消息
    public void Receive() throws InterruptedException {
        //退出登录
        //1.返回到登录页面
        driver.navigate().back();
        //2.清空用户账号和密码
        driver.navigate().refresh();
        //登录李四用户名和密码
        Thread.sleep(3000);
        driver.findElement(By.cssSelector("#username")).sendKeys("lisi");
        driver.findElement(By.cssSelector("#password")).sendKeys("123");
        driver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(3000);
        //出现登录成功弹窗,点击确定进入列表页
        Alert alert=driver.switchTo().alert();
        alert.accept();
        Thread.sleep(3000);
        //检查点击确定之后是否登陆成功,进入会话列表页
        driver.findElement(By.cssSelector("body > div.client-container > div > div.left > div.user"));
        Thread.sleep(3000);
        //点击zhangsan会话页
        driver.findElement(By.cssSelector("#session-list > li:nth-child(1) > h3")).click();
        //获取好友名
        String name=driver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.message-show > div.message.message-left > div > h4")).getText();
        //获取最后一条消息
        String text=driver.findElement(By.cssSelector(" body > div.client-container > div > div.right > div.message-show > div.message.message-left > div > p")).getText();
        //判断好友是否一致
        assert name.equals("zhangsan");
        //判断内容
        assert text.equals("你好呀!");
        driver.quit();

    }
}

 5.创建驱动和截屏

package common;

import io.github.bonigarcia.wdm.WebDriverManager;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.time.Duration;


public class Utils {
    public static WebDriver driver;
    public static WebDriver createDriver(){
        if(driver==null){
            WebDriverManager.chromedriver().setup();
            ChromeOptions options=new ChromeOptions();
            //允许访问所有的链接
            options.addArguments("--remote-allow-origins=*");
            driver=new ChromeDriver(options);
            //等待
            driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
        }
        return driver;
    }
    public  Utils(String url){
        //调用driver对象
        driver=createDriver();
        //访问url
        driver.get(url);
    }
    public void getScreenShot(String src) throws IOException {
        //屏幕截图
        SimpleDateFormat sim1=new SimpleDateFormat("yyyy-MM-dd");
        SimpleDateFormat sim2=new SimpleDateFormat("HHmmssSS");
        String dirTime=sim1.format(System.currentTimeMillis());
        String fileTime=sim2.format(System.currentTimeMillis());
        String filename="./src/test/image/"+dirTime+"/"+src+"-"+fileTime+".png";
        File srcFile=((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
        //srcFile放到指定位置
        FileUtils.copyFile(srcFile,new File(filename));
    }
}

 6.测试套件

package tests;

import java.io.IOException;


public class RunTests {
    public static void main(String[] args) throws InterruptedException, IOException {
        LoginPage login=new LoginPage();
        login.LoginPageRight();
        login.LoginFail();
        login.LoginFailNull();
        login.LoginSuc();
        SessionPage session=new SessionPage();
        session.SessionPageRight();
        session.SessionList();
        ContactPage contact=new ContactPage();
        contact.ContactPageRight();
        MessageDetailsPage message=new MessageDetailsPage();
        message.ChatSuc();
        message.Receive();
    }
}

7.屏幕截图

 

8.pom.xml依赖引入

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>WebChatAutoTest</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <dependency>
            <groupId>io.github.bonigarcia</groupId>
            <artifactId>webdrivermanager</artifactId>
            <version>5.9.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>4.0.0</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.6</version>
        </dependency>
    </dependencies>
</project>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值