0


【软件测试】使用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 import ddt, unpack, data, file_data

@ddtclassRegisterTestOk(unittest.TestCase):# 测试固件defsetUp(self):# 获取谷歌浏览器驱动
        self.driver = webdriver.Chrome()# Web聊天室链接
        self.url ="http://82.157.7.147:8080/chatroom/"# 浏览器最大化
        self.driver.maximize_window()
        time.sleep(3)deftearDown(self):# 关闭浏览器,清除缓存
        self.driver.quit()# 测试用例@file_data('./registerOkData.json')deftest_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()

注册失败

注册失败的测试用例

[
  {
    "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

@ddtclassRegisterTestFalse(unittest.TestCase):# 测试固件defsetUp(self):
        self.driver = webdriver.Chrome()
        self.url ="http://82.157.7.147:8080/chatroom/"
        self.driver.maximize_window()
        time.sleep(3)deftearDown(self):
        self.driver.quit()# 保存异常截图defsaveScreenAsPhoto(self, driver, file_name):ifnot 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')deftest_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

defcreateSuite():
    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]ifnot 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'withopen(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

@ddtclassLoginTestOk(unittest.TestCase):defsetUp(self):# 获取谷歌浏览器驱动
        self.driver = webdriver.Chrome()# Web聊天室链接
        self.url ="http://82.157.7.147:8080/chatroom/"# 浏览器最大化
        self.driver.maximize_window()
        time.sleep(3)deftearDown(self):# 关闭浏览器,清除缓存
        self.driver.quit()@file_data('./loginOkData.json')deftest_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

@ddtclassLoginTestFalseNone(unittest.TestCase):defsetUp(self):# 获取谷歌浏览器驱动
        self.driver = webdriver.Chrome()# Web聊天室链接
        self.url ="http://82.157.7.147:8080/chatroom/"# 浏览器最大化
        self.driver.maximize_window()
        time.sleep(3)deftearDown(self):# 关闭浏览器,清除缓存
        self.driver.quit()# 保存异常截图defsaveScreenAsPhoto(self, driver, file_name):ifnot 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')deftest_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

@ddtclassLoginTestFalseError(unittest.TestCase):defsetUp(self):# 获取谷歌浏览器驱动
        self.driver = webdriver.Chrome()# Web聊天室链接
        self.url ="http://82.157.7.147:8080/chatroom/"# 浏览器最大化
        self.driver.maximize_window()
        time.sleep(3)deftearDown(self):# 关闭浏览器,清除缓存
        self.driver.quit()# 保存异常时截图defsaveScreenAsPhoto(self, driver, file_name):ifnot 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')deftest_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

defcreateSuite():# 登陆成功的测试脚本
    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]ifnot 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'withopen(fileName,'wb')as fp:
        runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title=u"测试报告", description=u"用例执行情况", verbosity=2)
        suit = createSuite()
        runner.run(suit)

HTML测试报告

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

测试报告

异常截图

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

账号不存在

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

密码错误

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

Web聊天室自动化测试源码


本文转载自: https://blog.csdn.net/qq_58710208/article/details/127483369
版权归原作者 X_H学Java 所有, 如有侵权,请联系我们删除。

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

还没有评论