【软件测试】使用selenium工具对Web聊天室项目进行UI自动化测试

简介: 在用户注册页面,用户输入用户名,密码,昵称,图像文件(可以不上传)即可完成注册,但是如果昵称或者用户名被注册过了,就会显示账号或昵称已经存在

用户注册功能

在用户注册页面,用户输入用户名,密码,昵称,图像文件(可以不上传)即可完成注册,但是如果昵称或者用户名被注册过了,就会显示账号或昵称已经存在


使用数据驱动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@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.driver
        url = self.url
        driver.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() import ddt, unpack, data, file_data


注册失败

注册失败的测试用例

[
  {
    "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.driver
        url = self.url
        driver.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 unittest
from register_test import register_ok
from register_test import register_false
def createSuite():
    suit1 = unittest.TestLoader().loadTestsFromTestCase(register_ok.RegisterTestOk)
    suit2 = unittest.TestLoader().loadTestsFromTestCase(register_false.RegisterTestFalse)
    suit = unittest.TestSuite([suit1, suit2])
    return suit
if __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测试报告

因为对异常进行捕捉,并保存错误截图,所以注册失败的测试用例也是测试成功的

微信图片_20221030180729.png

异常截图

微信图片_20221030180747.png


用户登陆注册功能

在用户登陆页面,用户输入用户名,密码即可完成登陆,但是如果输入的用户名无效就会提示账号不存在,如果用户名正确但是密码输入错误就会提示密码错误


使用数据驱动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.driver
        url = self.url
        driver.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 unittest
from 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.driver
        url = self.url
        driver.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]').text
        try:
            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 unittest
from 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.driver
        url = self.url
        driver.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]').text
        try:
            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_error
def 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 suit
if __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测试报告

因为对异常进行捕捉,并保存错误截图,所以登陆失败的测试用例也是测试成功的

微信图片_20221030181057.png

异常截图

账号不存在,捕捉保存的异常图片

微信图片_20221030180747.png


密码错误,捕捉保存的异常图片

微信图片_20221030181102.png

本次自动化测试的源码地址



相关文章
|
3月前
|
人工智能 搜索推荐 数据管理
探索软件测试中的自动化测试框架选择与优化策略
本文深入探讨了在现代软件开发流程中,如何根据项目特性、团队技能和长期维护需求,精准选择合适的自动化测试框架。
171 11
|
1月前
|
人工智能 JavaScript 关系型数据库
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
98 14
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
|
1月前
|
数据采集 Web App开发 API
FastAPI与Selenium:打造高效的Web数据抓取服务 —— 采集Pixabay中的图片及相关信息
本文介绍了如何使用FastAPI和Selenium搭建RESTful接口,访问免版权图片网站Pixabay并采集图片及其描述信息。通过配置代理IP、User-Agent和Cookie,提高爬虫的稳定性和防封禁能力。环境依赖包括FastAPI、Uvicorn和Selenium等库。代码示例展示了完整的实现过程,涵盖代理设置、浏览器模拟及数据提取,并提供了详细的中文注释。适用于需要高效、稳定的Web数据抓取服务的开发者。
105 15
FastAPI与Selenium:打造高效的Web数据抓取服务 —— 采集Pixabay中的图片及相关信息
|
3月前
|
Web App开发 数据采集 JavaScript
CDP与Selenium相结合——玩转网页端自动化数据采集/爬取程序
本文介绍了Selenium、Chrome DevTools及Chrome DevTools Protocol (CDP) 的基本功能与应用。Selenium是一款开源自动化测试工具,适用于网页端应用程序测试和数据采集,具备跨平台特性。Chrome DevTools内置浏览器中,提供调试、分析Web应用程序的功能,包括元素、控制台、源代码和网络选项卡等。CDP是一套用于与Chromium内核浏览器通信的API,支持自动化测试和性能分析。文中还展示了Selenium与CDP结合使用的示例,如捕获网络请求数据和打印网页内容,并推荐了相关书籍和资源以供深入学习。
492 39
CDP与Selenium相结合——玩转网页端自动化数据采集/爬取程序
|
17天前
|
前端开发 数据安全/隐私保护 开发者
FirstUI:Deepseek能帮我们做很多事情,而这款开源框架专为开发者设计的开源UI框架,让你的项目加速起飞
嗨,大家好,我是小华同学。今天为大家介绍一个轻量级、响应式的前端UI框架——FirstUI。它提供丰富的组件库,包括按钮、输入框、下拉菜单等,帮助开发者快速构建美观、功能丰富的用户界面。FirstUI的核心理念是“简单、快速、高效”,适合各种Web应用开发,如企业网站、电商平台和个人博客。其体积小、加载快,支持响应式设计,并且易于定制。FirstUI拥有活跃的社区支持,开发者可以轻松找到帮助并分享经验。欢迎关注我们,获取更多优质开源项目和高效工作学习方法。
|
3月前
|
Web App开发 IDE JavaScript
Selenium IDE:Web自动化测试的得力助手
Selenium IDE:Web自动化测试的利器。作为开源工具,Selenium IDE支持录制与回放用户操作,适用于Chrome、Firefox等多浏览器,简化了测试流程,提升了效率,降低了自动化测试的门槛。它还支持导出多种编程语言的脚本,便于测试集成与复用。
167 31
Selenium IDE:Web自动化测试的得力助手
|
3月前
|
数据采集 人工智能 自然语言处理
Midscene.js:AI 驱动的 UI 自动化测试框架,支持自然语言交互,生成可视化报告
Midscene.js 是一款基于 AI 技术的 UI 自动化测试框架,通过自然语言交互简化测试流程,支持动作执行、数据查询和页面断言,提供可视化报告,适用于多种应用场景。
815 1
Midscene.js:AI 驱动的 UI 自动化测试框架,支持自然语言交互,生成可视化报告
|
3月前
|
Web App开发 IDE 测试技术
Selenium:强大的 Web 自动化测试工具
Selenium 是一款强大的 Web 自动化测试工具,包括 Selenium IDE、WebDriver 和 Grid 三大组件,支持多种编程语言和跨平台操作。它能有效提高测试效率,解决跨浏览器兼容性问题,进行性能测试和数据驱动测试,尽管存在学习曲线较陡、不稳定等缺点,但其优势明显,是自动化测试领域的首选工具。
297 17
Selenium:强大的 Web 自动化测试工具
|
3月前
|
机器学习/深度学习 人工智能 jenkins
探索软件测试中的自动化与持续集成
【10月更文挑战第21天】 在软件开发的生命周期中,软件测试扮演着至关重要的角色。随着技术的进步和开发模式的转变,自动化测试和持续集成已经成为提高软件质量和效率的关键手段。本文将深入探讨自动化测试和持续集成的概念、实施策略以及它们如何相互配合以优化软件开发流程。我们将通过分析实际案例,展示这些技术如何在实际项目中发挥作用,以及面临的挑战和解决方案。此外,文章还将讨论未来趋势,包括人工智能在测试领域的应用前景。
108 17
|
3月前
|
Java 测试技术 API
探索软件测试中的自动化测试框架
本文深入探讨了自动化测试在软件开发中的重要性,并详细介绍了几种流行的自动化测试框架。通过比较它们的优缺点和适用场景,旨在为读者提供选择合适自动化测试工具的参考依据。

热门文章

最新文章