网上聊天室测试

网上聊天室测试

网上聊天室设计
测试顺序:单元测试、集成测试、系统测试、验收测试等

测试用例

测试用例分别从界面、功能、兼容性、易用性、安全性、性能等方面进行分析

单元测试:针对系统最小的模块进行测试,此处将使用Junit(功能),自动化测试(兼容),loadRunner测试(性能)

单元测试环境准备

1.pom文件中引入依赖

        <dependency>
            <groupId>junitgroupId>
            <artifactId>junitartifactId>
            <version>4.12version>
            <scope>testscope>
        dependency>
2.安装插件

(1)File——》Setting——》Plugins
网上聊天室测试_第1张图片
2)安装JUnitGenerator.jar(建议找网盘下载然后本地导入)(这边懒的重新弄图,直接引用个人博客的环境安装步骤)
链接:JUnitGenerator.jar百度网盘
提取码:hhpn
网上聊天室测试_第2张图片
环境准备完毕,开始测试

测试UserDao类

Junit创建单元测试快捷键:点击类名,ctrl+shift+T 将会在test文件夹下自动生成一个包存放创建的测试类
UserDao类

public class UserDao {
    //1.新增一个用户(注册功能)
    public void add(User user){
        //1.获取数据库连接
        Connection c=DBUtil.getConnection();
        PreparedStatement ps=null;

        try {
            //2.拼装SQL语句
            String sql="insert into user value (null,?,?,?,now())";
            ps=c.prepareStatement(sql);
            ps.setString(1,user.getName());
            ps.setString(2,user.getPassword());
            ps.setString(3,user.getNickname());

            //3.执行SQL语句
            int rs=ps.executeUpdate();
            if(rs!=1){
                //出现问题的处理方式有很多种
                //此处可以抛出一个自定义异常
                throw new ChatroomException("插入用户失败");
            }
            System.out.println("插入用户成功");
        } catch (SQLException e) {
            e.printStackTrace();
            throw new ChatroomException("插入用户失败");
        } finally {
            //4.释放连接
            DBUtil.close(c,ps);
        }
    }

    //2.按用户名查找用户信息(登录功能)
    public User selectByName(String name){
        //1.获取到连接

        Connection c=DBUtil.getConnection();
        PreparedStatement ps=null;
        ResultSet rs=null;
        //2.拼装SQL
        String sql= null;
        try {
            sql = "select userId,name ,password, nickname, lastLogout from user where name=?";
            ps=c.prepareStatement(sql);
            ps.setString(1,name);

            //3.执行SQL
            rs=ps.executeQuery();
            if(rs.next()){
                User user=new User();
                user.setUserId(rs.getInt("userId"));
                user.setName(rs.getString("name"));
                user.setPassword(rs.getString("password"));
                user.setNickname(rs.getString("nickname"));
                user.setLastLogout(rs.getTimestamp("lastLogout"));
                return user;
            }else{
                System.out.println("该用户不存在");
            }
            //throw new ChatroomException("查询用户信息失败");
        } catch (Exception e) {
            e.printStackTrace();
            throw new ChatroomException("按用户名查询用户信息失败");
        } finally {
            //5.释放连接
            DBUtil.close(c,ps,rs);
        }
        return null;
    }


    //3.按用户id查找用户信息(把userID转换成昵称的时候)
    public User selectByID(int userId){
        //1.获取到连接
        Connection c=DBUtil.getConnection();
        PreparedStatement ps=null;
        ResultSet rs=null;
        //2.拼装SQL
        String sql= null;
        try {
            sql = "select userId,name ,password, nickname, lastLogout from user where userId= ?";
            ps=c.prepareStatement(sql);
            ps.setInt(1,userId);

            //3.执行SQL
            rs=ps.executeQuery();
            if(rs.next()){
                User user=new User();
                user.setUserId(rs.getInt("userId"));
                user.setName(rs.getString("name"));
                user.setPassword(rs.getString("password"));
                user.setNickname(rs.getString("nickname"));
                user.setLastLogout(rs.getTimestamp("lastLogout"));
                return user;
            }else{
                System.out.println("该用户不存在");
            }
            //throw new ChatroomException("查询用户信息失败");
        } catch (Exception e) {
            e.printStackTrace();
            throw new ChatroomException("按id查询用户信息失败");
        } finally {
            //5.释放连接
            DBUtil.close(c,ps,rs);
        }
        return null;
    }


    //4.更新用户的lastLogout时间,(用户下线的时刻更新,为了实现历史纪录功能)
    public void updateLogout(int userID){
        //1.获取连接
        Connection c=DBUtil.getConnection();
        PreparedStatement ps=null;

        //2.拼装sql
        try {
            String sql="update user set lastLogout=now() where userId=?";
            ps=c.prepareStatement(sql);
            ps.setInt(1,userID);
            //3.执行操作
            int ret=ps.executeUpdate();
            if(ret!=1) {
                throw new ChatroomException("退出更新时间失败1");
            }
            System.out.println("更新退出时间成功");
        } catch (SQLException e) {
            e.printStackTrace();
            throw new ChatroomException("退出更新时间失败1");
        } finally {
            DBUtil.close(c,ps);
        }
    }
}

测试UserDao类中的add(User user)模块
测试用例:
1.无用户昵称,无用户名,无密码
2.有用户昵称,无用户名,无密码
3.无用户昵称,有用户名,无密码
4.无用户昵称,无用户名,有密码
5.有用户昵称,有用户名,无密码
6.有用户昵称,无用户名,有密码
7.无用户昵称,有用户名,有密码
8.有用户昵称,有用户名,有密码

@Test
    public void add() {
        User user=new User();
        user.setNickname("YIYI一一");
        user.setName("abc");
        user.setPassword("123");
        UserDao userDao=new UserDao();
        userDao.add(user);
    }

测试UserDao类中的selectByName()模块
测试用例:
1.无用户名输入
2.用户名不存在数据库中
3.输入非法字符
4.输入正常用户名

@Test
    public void selectByName() {
        User user=new User();
        UserDao userDao=new UserDao();
        user=userDao.selectByName("abc");
        System.out.println(user);
    }

测试UserDao类中的selectByID()模块
测试用例:
1.不输入用户ID
2.输入不存在的ID
3.输入非int类型的基本类型
4.输入数组类型
5.输入int类型且存在的用户id

@Test
    public void selectByID() {
        User user=new User();
        UserDao userDao=new UserDao();
        user=userDao.selectByID(1);
        System.out.println(user);
    }

测试UserDao类中的updateLogout()模块
测试用例:
1.不输入用户ID
2.输入不存在的ID
3.输入非int类型的基本类型
4.输入数组类型
5.输入int类型且存在的用户id

@Test
    public void updateLogout() {
        User user=new User();
        UserDao userDao=new UserDao();
        userDao.updateLogout(1);
    }

测试MessageDao类

Junit创建单元测试快捷键:点击类名,ctrl+shift+T 将会在test文件夹下自动生成一个包存放创建的测试类
MessageDao类

public class MessageDao {
    //1.新增消息
    public void add(Message message){
        //1.获取连接
        Connection c=DBUtil.getConnection();
        PreparedStatement ps=null;
        //2.拼装sql
        String sql="insert into message values (null,?,?,?,?)";
        try {
            ps=c.prepareStatement(sql);
            ps.setInt(1,message.getUserId());
            ps.setInt(2,message.getChannelId());
            ps.setString(3,message.getContent());
            ps.setTimestamp(4,message.getSendTime());

            //3.执行SQL
            int ret=ps.executeUpdate();
            if(ret!=1){
                throw new ChatroomException("消息发送失败");
            }
            System.out.println("插入消息成功");
        } catch (SQLException e) {
            e.printStackTrace();
            throw new ChatroomException("消息发送失败");
        } finally {
            //4.关闭链接
            DBUtil.close(c,ps);
        }

    }
    //2.按时间段查询消息
    public List<Message> selectByTimeStamp(Timestamp from, Timestamp to){
        List<Message> messages=new ArrayList<>();
        //1.获取到链接
        Connection c=DBUtil.getConnection();

        //2.拼装SQL
        //MySQL中的datetime类型是可以直接比较大小
        String sql="select messageId, userId, channelId, content, sendTime from message where sendTime>=? and sendTime<=?";
        PreparedStatement ps=null;
        ResultSet rs=null;
        try {
            ps=c.prepareStatement(sql);
            ps.setTimestamp(1,from);
            ps.setTimestamp(2,to);

            //3.执行SQL
            rs=ps.executeQuery();
            while (rs.next()){
                Message message=new Message();
                message.setMessageId(rs.getInt("messageId"));
                message.setUserId(rs.getInt("userId"));
                message.setChannelId(rs.getInt("channelId"));
                message.setContent(rs.getString("content"));
                message.setSendTime(rs.getTimestamp("sendTime"));
                messages.add(message);
            }
            return messages;
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            DBUtil.close(c,ps,rs);
        }
        return null;
    }
}

测试MessageDao类中的add()消息发送模块
测试用例:
L=N(TC)=(2-1)*4+1=5
用户id,选择频道id,输入发送信息,发送时间

因素名称 用户id 选择频道id 输入发送信息 发送时间
1 Y N Y N
2 N Y N Y
3 Y N N Y
4 N Y Y Y
5 Y N Y N

特殊

因素名称 用户id 选择频道id 输入发送信息 发送时间
6 N N N N
7 Y Y Y Y
@Test
    public void add() {
        MessageDao messageDao=new MessageDao();
        Message message=new Message();
        message.setUserId(1);
        message.setChannelId(1);
        message.setContent("java学习频道");
        message.setSendTime(new Timestamp(System.currentTimeMillis()));
        messageDao.add(message);
    }

测试MessageDao类中的selectByTimeStamp()历史消息模块
测试用例:
1.不输入起始时间,不输入结束时间
2.不输入起始时间,输入结束时间
3.输入起始时间,不输入结束时间
4.输入起始时间,输入结束时间

@Test
    public void selectByTimeStamp() {
        MessageDao messageDao=new MessageDao();
        //获取指定时间段的消息
        //from 构造了:2020-07-28 12:20:25
        //to 构造了:2020-07-28 12:35:25
        //此处时间戳是一个很大的数字,已经超出了int的范围,因此加上L后缀,表示这是一个long的类型
        List<Message> messages=messageDao.selectByTimeStamp(
                new Timestamp(1595910025000L),new Timestamp(1595910925000L)
        );
        System.out.println(messages);
    }

测试ChannelDao类

Junit创建单元测试快捷键:点击类名,ctrl+shift+T 将会在test文件夹下自动生成一个包存放创建的测试类
ChannelDao类

public class ChannelDao {
    //1.新增频道
    public void add(Channel channel){
        //1.获取数据库连接
        Connection c=DBUtil.getConnection();
        PreparedStatement ps=null;
        try {
            String sql="insert into channel value (null,?)";
            //2.拼装SQL
            ps=c.prepareStatement(sql);
            ps.setString(1,channel.getChannelName());

            //3.执行SQL
            int rs=ps.executeUpdate();
            if(rs!=1){
                throw new ChatroomException("新增频道失败");
            }
            System.out.println("新增频道成功");
        } catch (SQLException e) {
            e.printStackTrace();
            throw new ChatroomException("新增频道失败");
        } finally {
            //4.断开连接
            DBUtil.close(c,ps);
        }
    }

    //2.删除频道
    public void delete(int channelId){
        //1.获取数据库连接
        Connection c=DBUtil.getConnection();
        PreparedStatement ps=null;
        try {
            String sql="delete from channel where channelId=?";
            //2.拼装SQL
            ps=c.prepareStatement(sql);
            ps.setInt(1,channelId);

            //3.执行SQL
            int rs=ps.executeUpdate();
            if(rs!=1){
                throw new ChatroomException("删除频道失败");
            }
            System.out.println("删除频道成功");
        } catch (SQLException e) {
            e.printStackTrace();
            throw new ChatroomException("删除频道失败");
        } finally {
            //4.断开连接
            DBUtil.close(c,ps);
        }
    }

    //3.查看频道列表
    public List<Channel> selectAll(){
        List<Channel> channels=new ArrayList<>();

        //1.获取数据库连接
        Connection c=DBUtil.getConnection();
        PreparedStatement ps=null;
        ResultSet rs=null;
        try {
            String sql="select channelId, channelName from channel";
            //2.拼装SQL
            ps=c.prepareStatement(sql);

            //3.执行SQL
            rs=ps.executeQuery();
            while (rs.next()){
                Channel channel=new Channel();
                channel.setChannelId(rs.getInt("channelId"));
                channel.setChannelName(rs.getString("channelName"));
                channels.add(channel);
            }
            if(rs==null){
                throw new ChatroomException("查询频道列表失败");
            }
            return channels;
        } catch (SQLException e) {
            e.printStackTrace();
            //throw new ChatroomException("查询频道列表失败");
        } finally {
            //4.断开连接
            DBUtil.close(c,ps,rs);
        }
        return null;
    }

    //4.关注频道,未实现

    //5.取消关注频道,未实现

}

测试ChannelDao类中的add() 增加频道模块
测试用例:
1.不输入频道名
2.输入非法频道名
3.输入合法频道名

@Test
    public void add() {
        ChannelDao channelDao=new ChannelDao();
        Channel channel=new Channel();
        channel.setChannelName("ASMR");
        channelDao.add(channel);
        //不设置channelID是因为此字段是自增字段,由Mysql自行增加,避免ID冲突
    }

测试ChannelDao类中的selectAll()查看所有频道模块
测试用例:
1.频道列表为空查询
2.频道列表不为空查询

@Test
    public void selectAll() {
        ChannelDao channelDao=new ChannelDao();
        System.out.println(channelDao.selectAll());
    }

测试ChannelDao类中的delete()删除频道模块
测试用例:
1.不输入id
2.输入不存在的id
3.输入数组
4.输入int类型已存在的id

@Test
    public void delete() {
        ChannelDao channelDao=new ChannelDao();
        channelDao.delete(1);
    }

自动化测试

from selenium import webdriver
import unittest,time
driver=webdriver.Chrome()
driver.get("http://127.0.0.1:8080/java13_chatroom/")
driver.implicitly_wait(10)
driver.maximize_window()
driver.find_element_by_xpath("//*[@id='app']/nav/div[1]/div[1]/div[2]/div[2]/div").click()
time.sleep(3)

driver.find_element_by_id("input-33").send_keys("tx")
driver.find_element_by_id("input-36").send_keys("1233")
driver.find_element_by_xpath("//*[@id='app']/div[3]/div/div/div[2]/div/div[3]/div[1]/button/span").click()
#登录

divs = driver.find_elements_by_class_name("v-list-item__icon")
time.sleep(2)
divs[1].click()
time.sleep(3)
#选择频道

driver.find_element_by_class_name("v-btn__content").click()

driver.find_element_by_id("input-23").send_keys("在吗?")
driver.find_element_by_xpath("//*[@id='app']/div/main/div/div[2]/footer/div/div/div[2]/button").click()
#发送消息

driver.find_element_by_xpath("//*[@id='app']/div/header/div/button[2]/span/i").click()
#退出频道

driver.find_element_by_class_name("v-btn__content").click()

driver.find_element_by_xpath("//*[@id='app']/nav/div[1]/div[2]/div[2]").click()
#退出登录

待补充!

你可能感兴趣的:(网上聊天室测试)