【软件测试】使用selenium工具对Web聊天室项目进行UI自动化测试
文章目录
- 用户注册功能
- 注册成功
- 注册失败
- 测试套件
- HTML测试报告
- 异常截图
- 用户登陆注册功能
- 登陆成功
- 账号不存在,登陆失败
- 密码错误,登陆失败
- 测试套件
- HTML测试报告
- 异常截图
- 本次自动化测试的源码地址
用户注册功能
在用户注册页面,用户输入用户名,密码,昵称,图像文件(可以不上传)即可完成注册,但是如果昵称或者用户名被注册过了,就会显示账号或昵称已经存在
使用数据驱动DDT
让测试数据来驱动测试用例代码执行,使用测试套件把注册成功和注册失败的测试用例组织到一起进行一个整体的测试,对注册失败的测试用例进行错误捕捉并保存异常截图
,最后通过HTMLTestRunner生成HTML测试报告
注册成功
注册成功的测试用例
[{"username": "12345","password": "12345","nickname": "孙悟空","head": "D:\\photo\\18.jpg"},{"username": "23456","password": "23456","nickname": "猪八戒","head": ""},{"username": "34567","password": "34567","nickname": "唐三藏","head": "D:\\photo\\18.jpg"},{"username": "45678","password": "45678","nickname": "沙和尚","head": "D:\\photo\\16.jpg"},{"username": "abcde","password": "abcde","nickname": "黑旋风","head": "D:\\photo\\18.jpg"},{"username": "bcdef","password": "bcdef","nickname": "豹子头","head": ""},{"username": "cdefg","password": "cdefg","nickname": "行者","head": "D:\\photo\\18.jpg"}
]
注册成功的自动化测试脚本
from selenium import webdriver
import time
import unittest
from ddt import ddt, unpack, data, file_data@ddt
class RegisterTestOk(unittest.TestCase):# 测试固件def setUp(self):# 获取谷歌浏览器驱动self.driver = webdriver.Chrome()# Web聊天室链接self.url = "http://82.157.7.147:8080/chatroom/"# 浏览器最大化self.driver.maximize_window()time.sleep(3)def tearDown(self):# 关闭浏览器,清除缓存self.driver.quit()# 测试用例@file_data('./registerOkData.json') def test_RegisterOk(self, username, password, nickname, head):driver = self.driverurl = self.urldriver.get(url)# 点击注册driver.find_element_by_link_text("注册").click()# 智能等待driver.implicitly_wait(3) # 输入注册信息driver.find_element_by_xpath('//*[@id="app"]/form/div[1]/input').send_keys(username)driver.find_element_by_xpath('//*[@id="app"]/form/div[2]/input').send_keys(password)driver.find_element_by_xpath('//*[@id="app"]/form/div[3]/input').send_keys(nickname)driver.find_element_by_xpath('//*[@id="app"]/form/div[4]/input').send_keys(head)driver.find_element_by_xpath('//*[@id="app"]/form/div[6]/input').click()time.sleep(3)# 注册成功,关闭登陆成功弹窗driver.switch_to.alert.accept()time.sleep(3)if __name__ == '__main__':unittest.main()
注册失败
注册失败的测试用例
[{"username": "12345","password": "12345","nickname": "孙孙孙","head": "D:\\photo\\18.jpg"},{"username": "22222","password": "23456","nickname": "猪八戒","head": "D:\\photo\\16.jpg"},{"username": "34567","password": "34567","nickname": "唐唐唐","head": "D:\\photo\\18.jpg"},{"username": "45678","password": "45678","nickname": "沙沙沙","head": ""},{"username": "ccccc","password": "abcde","nickname": "黑旋风","head": "D:\\photo\\18.jpg"},{"username": "bcdef","password": "bcdef","nickname": "豹子子","head": ""},{"username": "eeeee","password": "cdefg","nickname": "行者","head": "D:\\photo\\16.jpg"}
]
注册失败的自动化脚本
from selenium import webdriver
import time
import unittest
import os
from ddt import ddt, unpack, data, file_data@ddt
class RegisterTestFalse(unittest.TestCase):# 测试固件def setUp(self):self.driver = webdriver.Chrome()self.url = "http://82.157.7.147:8080/chatroom/"self.driver.maximize_window()time.sleep(3)def tearDown(self):self.driver.quit()# 保存异常截图def saveScreenAsPhoto(self, driver, file_name):if not os.path.exists("./image"):os.makedirs("./image")now = time.strftime("%Y%m%d-%H%M%S", time.localtime(time.time()))driver.get_screenshot_as_file("./image/"+now+"-"+file_name)time.sleep(2)# 测试用例@file_data('./registerFalseData.json')def test_RegisterFalse(self, username, password, nickname, head):driver = self.driverurl = self.urldriver.get(url)driver.find_element_by_link_text("注册").click()driver.implicitly_wait(3)driver.find_element_by_xpath('//*[@id="app"]/form/div[1]/input').send_keys(username)driver.find_element_by_xpath('//*[@id="app"]/form/div[2]/input').send_keys(password)driver.find_element_by_xpath('//*[@id="app"]/form/div[3]/input').send_keys(nickname)driver.find_element_by_xpath('//*[@id="app"]/form/div[4]/input').send_keys(head)driver.find_element_by_xpath('//*[@id="app"]/form/div[6]/input').click()time.sleep(3)errorMessage = driver.find_element_by_xpath('//*[@id="app"]/form/div[5]').text# 异常捕捉并保存错误截图try:self.assertFalse(errorMessage, msg="账号或密码已经存在")except:self.saveScreenAsPhoto(driver, 'false.png')time.sleep(3)if __name__ == '__main__':unittest.main()
测试套件
使用测试套件组织测试用例一起执行,并生成HTML测试报告
import HTMLTestRunner
import os
import sys
import time
import unittestfrom register_test import register_ok
from register_test import register_falsedef createSuite():suit1 = unittest.TestLoader().loadTestsFromTestCase(register_ok.RegisterTestOk)suit2 = unittest.TestLoader().loadTestsFromTestCase(register_false.RegisterTestFalse)suit = unittest.TestSuite([suit1, suit2])return suitif __name__ == '__main__':curpath = sys.path[0]if not os.path.exists(curpath + '/registerReport'):os.makedirs(curpath + '/registerReport')now = time.strftime("%Y-%m-%d-%H %M %S", time.localtime(time.time()))fileName = curpath + '/registerReport/' + now + 'registerReport.html'with open(fileName, 'wb') as fp:runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title=u"测试报告", description=u"用例执行情况", verbosity=2)suit = createSuite()runner.run(suit)
HTML测试报告
因为对异常进行捕捉,并保存错误截图,所以注册失败的测试用例也是测试成功的
异常截图
用户登陆注册功能
在用户登陆页面,用户输入用户名,密码即可完成登陆,但是如果输入的用户名无效就会提示账号不存在,如果用户名正确但是密码输入错误就会提示密码错误
使用数据驱动DDT
让测试数据来驱动测试用例代码执行,使用测试套件把登陆成功和登陆失败的测试用例组织到一起进行一个整体的测试,对登陆失败的测试用例进行错误捕捉并保存异常截图
,最后通过HTMLTestRunner生成HTML测试报告
登陆成功
登陆成功测试用例
[{"username": "abc","password": "123"},{"username": "12345","password": "12345"},{"username": "23456","password": "23456"},{"username": "34567","password": "34567"},{"username": "abcde","password": "abcde"}
]
登陆成功自动化测试脚本
from selenium import webdriver
import time
import unittest
from ddt import ddt, unpack, data, file_data@ddt
class LoginTestOk(unittest.TestCase):def setUp(self):# 获取谷歌浏览器驱动self.driver = webdriver.Chrome()# Web聊天室链接self.url = "http://82.157.7.147:8080/chatroom/"# 浏览器最大化self.driver.maximize_window()time.sleep(3)def tearDown(self):# 关闭浏览器,清除缓存self.driver.quit()@file_data('./loginOkData.json')def test_LoginOk(self, username, password):driver = self.driverurl = self.urldriver.get(url)time.sleep(3)driver.find_element_by_xpath('//*[@id="app"]/form/div[1]/input').send_keys(username)driver.find_element_by_xpath('//*[@id="app"]/form/div[2]/input').send_keys(password)driver.find_element_by_xpath('//*[@id="app"]/form/div[4]/input').click()time.sleep(3)driver.switch_to.alert.accept()time.sleep(3)if __name__ == '__main__':unittest.main()
账号不存在,登陆失败
账号不存在,登陆失败的测试用例
[{"username": "aaa","password": "123"},{"username": "bbbbb","password": "12345"},{"username": "65436","password": "23456"},{"username": "daa32","password": "34567"},{"username": "dd225","password": "abcde"}
]
账号不存在,登陆失败的自动化测试脚本
import os
import time
import unittestfrom ddt import ddt, file_data
from selenium import webdriver@ddt
class LoginTestFalseNone(unittest.TestCase):def setUp(self):# 获取谷歌浏览器驱动self.driver = webdriver.Chrome()# Web聊天室链接self.url = "http://82.157.7.147:8080/chatroom/"# 浏览器最大化self.driver.maximize_window()time.sleep(3)def tearDown(self):# 关闭浏览器,清除缓存self.driver.quit()# 保存异常截图def saveScreenAsPhoto(self, driver, file_name):if not os.path.exists("./image"):os.makedirs("./image")now = time.strftime("%Y%m%d-%H%M%S", time.localtime(time.time()))driver.get_screenshot_as_file("./image/" + now + "-" + file_name)time.sleep(2)@file_data('./loginFalseNone.json')def test_LoginOk(self, username, password):driver = self.driverurl = self.urldriver.get(url)time.sleep(3)# 输入登陆信息,点击登陆driver.find_element_by_xpath('//*[@id="app"]/form/div[1]/input').send_keys(username)driver.find_element_by_xpath('//*[@id="app"]/form/div[2]/input').send_keys(password)driver.find_element_by_xpath('//*[@id="app"]/form/div[4]/input').click()time.sleep(3)errorMessage = driver.find_element_by_xpath('//*[@id="app"]/form/div[3]').texttry:self.assertFalse(errorMessage, msg="账号不存在")except:self.saveScreenAsPhoto(driver, 'false-none.png')time.sleep(3)if __name__ == '__main__':unittest.main()
密码错误,登陆失败
密码错误,登陆失败的测试用例
[{"username": "abc","password": "12345"},{"username": "12345","password": "23456"},{"username": "23456","password": "34567"},{"username": "34567","password": "45678"},{"username": "abcde","password": "abcdef"}
]
密码错误,登陆失败的自动化测试脚本
import os
import time
import unittestfrom ddt import ddt, file_data
from selenium import webdriver@ddt
class LoginTestFalseError(unittest.TestCase):def setUp(self):# 获取谷歌浏览器驱动self.driver = webdriver.Chrome()# Web聊天室链接self.url = "http://82.157.7.147:8080/chatroom/"# 浏览器最大化self.driver.maximize_window()time.sleep(3)def tearDown(self):# 关闭浏览器,清除缓存self.driver.quit()# 保存异常时截图def saveScreenAsPhoto(self, driver, file_name):if not os.path.exists("./image"):os.makedirs("./image")now = time.strftime("%Y%m%d-%H%M%S", time.localtime(time.time()))driver.get_screenshot_as_file("./image/" + now + "-" + file_name)time.sleep(2)@file_data('./loginFalseError.json')def test_LoginOk(self, username, password):driver = self.driverurl = self.urldriver.get(url)time.sleep(3)# 输入登陆信息,点击登陆driver.find_element_by_xpath('//*[@id="app"]/form/div[1]/input').send_keys(username)driver.find_element_by_xpath('//*[@id="app"]/form/div[2]/input').send_keys(password)driver.find_element_by_xpath('//*[@id="app"]/form/div[4]/input').click()time.sleep(3)errorMessage = driver.find_element_by_xpath('//*[@id="app"]/form/div[3]').texttry:self.assertFalse(errorMessage, msg="密码错误")except:self.saveScreenAsPhoto(driver, 'false-error.png')time.sleep(3)if __name__ == '__main__':unittest.main()
测试套件
使用测试套件组织测试用例一起执行,并生成HTML测试报告
from login_test import login_false_none
from login_test import login_false_errordef createSuite():# 登陆成功的测试脚本suit1 = unittest.TestLoader().loadTestsFromTestCase(login_ok.LoginTestOk)# 账号不存在的测试脚本suit2 = unittest.TestLoader().loadTestsFromTestCase(login_false_none.LoginTestFalseNone)# 密码错误的测试脚本suit3 = unittest.TestLoader().loadTestsFromTestCase(login_false_error.LoginTestFalseError)suit = unittest.TestSuite([suit1, suit2, suit3])return suitif __name__ == '__main__':curpath = sys.path[0]if not os.path.exists(curpath + '/loginReport'):os.makedirs(curpath + '/loginReport')now = time.strftime("%Y-%m-%d-%H %M %S", time.localtime(time.time()))fileName = curpath + '/loginReport/' + now + 'loginReport.html'with open(fileName, 'wb') as fp:runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title=u"测试报告", description=u"用例执行情况", verbosity=2)suit = createSuite()runner.run(suit)
HTML测试报告
因为对异常进行捕捉,并保存错误截图,所以登陆失败的测试用例也是测试成功的
异常截图
账号不存在,捕捉保存的异常图片
密码错误,捕捉保存的异常图片
本次自动化测试的源码地址
Web聊天室自动化测试源码
【软件测试】使用selenium工具对Web聊天室项目进行UI自动化测试相关推荐
- web聊天室项目开发过程及重难点整理
目录 一.需求分析 二.业务背景 1.张三要发消息给李四 2.WebSocket实现消息推送流程 三.前后端接口和数据库系统设计 1.用户相关的接口 2.频道相关接口 3.数据库表的设计 四.功能交互 ...
- 使用nodejs搭建你自己的专属web聊天室
前言 前断时间在学习nodejs,自己闲来无事,在网上搜索了一些资料自己搭建了一个属于自己的web聊天室项目.现在把自己的开发过程和心得和大家分享,希望其中涉及到的一些知识对你有用. 项目开源地址:h ...
- 使用FastHttpApi构建多人Web聊天室
为什么80%的码农都做不了架构师?>>> 一般在dotnet core下构建使用web服务应用都使用asp.net core,但通过FastHttpApi组建也可以方便地构建w ...
- Spring和WebSocket整合并建立简单的Web聊天室
Spring和WebSocket整合并建立简单的Web聊天室 官方主页 Spring WebSocket 一.概述 WebSocket 是一种网络通信协议.RFC6455 定义了它的通信标准. Web ...
- 御神楽的学习记录之Springboot+netty实现Web聊天室
文章目录 前言 一.Netty简介 1.介绍 二.Web聊天室实现 1.Idea项目创建 2.java类编写 3.html测试 总结 参考 前言 WebSocket是一种在单个TCP连接上进行全双工通 ...
- 【项目设计】基于WebSocket的Web聊天室
文章目录 1. 项目简介 2. 数据库表的设计 3. 实体类以及工具类的设计 3.1 实体类model 3.1.1 lombok的使用 3.2 工具类util 3.2.1 DBUtil 3.2.2 W ...
- 基于阿里云用C/C++做了一个http协议与TCP协议的web聊天室的服务器——《干饭聊天室》
基于阿里云用C/C++做了一个http协议与TCP协议的web聊天室的服务器--<干饭聊天室> 在这里首先感谢前端小伙伴飞鸟 前端技术请看一款基于React.C++,使用TCP/HTTP协 ...
- Django项目--web聊天室
需求 做一个web聊天室,主要练习前端ajax与后台的交互: 一对一聊天和群组聊天 添加用户为好友 搜索并添加群组 管理员可以审批用户加群请求,群管理员可以有多个,群管理员可以删除,添加禁言群友 与聊 ...
- 基于.NET SingalR,LayIM2.0实现的web聊天室
LayIM官网 http://www.layui.com/doc/layim.html 博客教程:http://www.cnblogs.com/panzi/p/5767095.html 项目说明:基于 ...
最新文章
- 基于点云的3D深度学习主干网络进展综述
- mysql 半同步复制_Mysql半同步复制原理及问题排查
- vi编辑器简单应用(摘抄)
- 2019年陕西省普通高校招生考生成绩统计表(文史、艺文)
- 归并排序时间复杂度推导
- .NET Core Runtime vs .NET Framework Runtime
- 【开源框架】:解决方案级别的代码生成器 WebFirst
- 工业以太网交换机的安装流程详解
- C/C++ queue队列的理解以及使用
- 3d建模电脑配置要求_3D建模学习对于电脑配置要求高不高?
- (转)SSDTShadow Hook的实现,完整代码
- mysql limti_MYSQL分页 limint
- BigGAN(2019)
- CDISC SDTM AE domain学习笔记 - 2
- Google 电子表格函数列表
- python实现坐标求取_根据相机位姿求指定点的世界坐标及其python实现
- 球定位实景导航 iOS实用应用周排行
- 建立FTP服务器的免费软件
- vue实现抽奖大转盘
- 旁听硕士答辩——爱立信,WireShark,GGSN
热门文章
- Mil-53(Fe),cas764608-47-1
- 【云原生 | 41】Docker快速部署面向统计分析和绘图语言R
- SUB1GHz高集成度无线收发芯片-DP4301
- 肺结节CT影像特征提取(一)——肺结节CT图像特征概要
- sqlserver 目录名称无效解决办法
- 报错:Caused by: org.xml.sax.SAXParseException
- TMC2160-TA 大功率步进驱动IC外置MOS管
- 「应用架构」应用架构行为准则
- 国际海运详解:国际海运的发货方式有哪些?区别是什么?
- easyswoole事务mysql_easyswoole事务操作