温州网站推广模板,科技大崛起,网站建设添加汉语,单位加强网站建设博客系统UI自动化测试报告一、项目背景二、测试内容(一)测试用例(二)测试账号(三#xff09;使用Selenium进行Web自动化测试1.环境搭建2.创建浏览器驱动3.编写博客登陆模块的测试用例代码4.编写博客主页展示模块的测试用例代码5.编写博客创作模块的测试用例代码6.编写博客查看…
博客系统UI自动化测试报告一、项目背景二、测试内容(一)测试用例(二)测试账号(三使用Selenium进行Web自动化测试1.环境搭建2.创建浏览器驱动3.编写博客登陆模块的测试用例代码4.编写博客主页展示模块的测试用例代码5.编写博客创作模块的测试用例代码6.编写博客查看模块的测试用例代码7.编写博客删除模块的测试用例代码8.编写博客退出模块的测试用例代码9.编写测试截图功能10.整合代码进行系统测试(三)自动化测试总结1.自动化测试覆盖模块2.自动化测试用例数量3. 自动化测试代码展示4.自动化测试部分截图5. 自动化测试结果6. 测试评估7. 遗留问题总结一、项目背景
本次博客系统UI自动化测试所用博客系统是基于SSM框架实现的个人博客系统由博客登陆页、博客主页页、博客创作页、博客详情页所组成。成功登录博客即可查看自己已发布的博客也可以进行发布博客操作通过使用Selenium定位web元素、对获取到的元素进行操作等对个人博客系统进行测试测试的核心内容包括博客登录、博客主页展示、博客创作、博客修改、博客查看、博客删除、博客退出等。同时该博客系统还可以实现记录博客发布日期、时间等信息。
二、测试内容
注测试的内容都是个人完成的所以就不写需求文档和测试安排了。
(一)测试用例
设计测试用例方法一般从以下几个方面设计
功能测试、界面测试、性能测试、易用性测试、安全性测试、兼容性测试等六个方面进行设计但是个人博客系统是一个web网站主要是针对核心功能、界面测试、安全性测试、兼容性测试进行测试编写的测试用例如下 其中安全性测试和界面测试需要人工测试就不过多涉及了 本报告主要对功能模块进行自动化测试。
(二)测试账号
账号用户名密码账号1zhangsan123456账号2lisi123456
(三使用Selenium进行Web自动化测试
1.环境搭建
安装与浏览器名称和版本对应的webdrivermanager。 本次测试使用的驱动版本如下
驱动版本Edge浏览器138.0.3351.121 (正式版本) (64 位)selenium4.0.0webdriver-manager4.0.22.创建浏览器驱动
创建一个驱动类自定义名为Edge_Driver通过在Edge_Driver中创建一个统一驱动对象对博客登录、博客主页展示、博客创作、博客修改、博客查看、博客删除、博客退出等功能分别进行测试操作。
from selenium import webdriver
from selenium.webdriver.edge.service import Service
from selenium.webdriver.edge.options import Optionsclass Edge_Driver:driverdef __init__(self):# EdgeDriver 路径edge_driver_path rC:\Program Files (x86)\Microsoft\Edge\WebDriver\edgedriver_win64\msedgedriver.exeserviceService(edge_driver_path)options Options()options.add_argument(--remote-allow-origins*)self.driverwebdriver.Edge(serviceservice,optionsoptions)self.driver.implicitly_wait(2)注根据所要测试的功能可创建不同的测试类
3.编写博客登陆模块的测试用例代码
(1)创建一个博客登陆测试类自定义名为BlogLand继承Edge_Driver类得到驱动driver
(2)根据博客登陆模块测试用例创建不同的方法 land.LandFailTest1()#输入错误的账号和错误的密码land.LandFailTest2()#输入错误的账号和正确的密码land.LandFailTest3()#输入正确的账号和错误的密码land.LandFailTest4()#输入非常规账号和密码land.LandFailTest5()#仅输入账号land.LandFailTest6()#仅输入密码land.LandFailTest7()#不做输入land.LandTest()#输入正确的账号和密码 import time
from selenium.webdriver.common.by import By
from selenium.webdriver.support.expected_conditions import alert_is_present
from common.webdriver import BlogDriver
class BlogLand:urldriverdef __init__(self):self.url http://8.137.19.140:9090/blog_login.htmlself.driver BlogDriver.driver#登陆成功def LandTest1(self):self.driver.get(self.url)self.driver.find_element(By.CSS_SELECTOR,#username).clear()self.driver.find_element(By.CSS_SELECTOR,#password).clear()self.driver.find_element(By.CSS_SELECTOR,#username).send_keys(zhangsan)self.driver.find_element(By.CSS_SELECTOR,#password).send_keys(123456)self.driver.find_element(By.CSS_SELECTOR,#submit).click()BlogDriver.GetImage()textself.driver.find_element(By.CSS_SELECTOR,body div.container div.left div h3).textassert textzhangsanself.driver.find_element(By.CSS_SELECTOR,body div.nav a:nth-child(6)).click()def LandTest2(self):self.driver.get(self.url)self.driver.find_element(By.CSS_SELECTOR, #username).clear()self.driver.find_element(By.CSS_SELECTOR, #password).clear()self.driver.find_element(By.CSS_SELECTOR, #username).send_keys(lisi)self.driver.find_element(By.CSS_SELECTOR, #password).send_keys(123456)self.driver.find_element(By.CSS_SELECTOR, #submit).click()BlogDriver.GetImage()text self.driver.find_element(By.CSS_SELECTOR, body div.container div.left div h3).textassert text lisiself.driver.find_element(By.CSS_SELECTOR,body div.nav a:nth-child(6)).click()#输入错误的账号和错误的密码def LandFailTest1(self):self.driver.get(self.url)self.driver.find_element(By.CSS_SELECTOR,#username).clear()self.driver.find_element(By.CSS_SELECTOR,#password).clear()self.driver.find_element(By.CSS_SELECTOR,#username).send_keys(zhannsan)self.driver.find_element(By.CSS_SELECTOR,#password).send_keys(123457)self.driver.find_element(By.CSS_SELECTOR,#submit).click()time.sleep(1)alert self.driver.switch_to.alerttextalert.textassert text用户不存在alert.accept()BlogDriver.GetImage()#输入错误的账号和正确的密码def LandFailTest2(self):self.driver.get(self.url)self.driver.find_element(By.CSS_SELECTOR, #username).clear()self.driver.find_element(By.CSS_SELECTOR, #password).clear()self.driver.find_element(By.CSS_SELECTOR, #username).send_keys(zhanasan)self.driver.find_element(By.CSS_SELECTOR, #password).send_keys(123456)self.driver.find_element(By.CSS_SELECTOR, #submit).click()time.sleep(1)alert self.driver.switch_to.alerttextalert.textassert text用户不存在alert.accept()BlogDriver.GetImage()#输入正确的账号和错误的密码def LandFailTest3(self):self.driver.find_element(By.CSS_SELECTOR, #username).clear()self.driver.find_element(By.CSS_SELECTOR, #password).clear()self.driver.find_element(By.CSS_SELECTOR, #username).send_keys(zhangsan)self.driver.find_element(By.CSS_SELECTOR, #password).send_keys(122456)self.driver.find_element(By.CSS_SELECTOR, #submit).click()time.sleep(1)alert self.driver.switch_to.alerttextalert.textassert text密码错误alert.accept()BlogDriver.GetImage()#输入非常规账号和密码def LandFailTest4(self):self.driver.find_element(By.CSS_SELECTOR, #username).clear()self.driver.find_element(By.CSS_SELECTOR, #password).clear()self.driver.find_element(By.CSS_SELECTOR, #username).send_keys($:zda85545?~)self.driver.find_element(By.CSS_SELECTOR, #password).send_keys($:zda85545?~)self.driver.find_element(By.CSS_SELECTOR, #submit).click()time.sleep(1)alert self.driver.switch_to.alerttextalert.textassert text用户不存在alert.accept()BlogDriver.GetImage()#仅输入账号def LandFailTest5(self):self.driver.find_element(By.CSS_SELECTOR, #username).clear()self.driver.find_element(By.CSS_SELECTOR, #password).clear()self.driver.find_element(By.CSS_SELECTOR, #username).send_keys(zhangsan)self.driver.find_element(By.CSS_SELECTOR, #submit).click()time.sleep(1)alert self.driver.switch_to.alerttextalert.textassert text账号或密码不能为空alert.accept()BlogDriver.GetImage()#仅输入密码def LandFailTest6(self):self.driver.find_element(By.CSS_SELECTOR, #username).clear()self.driver.find_element(By.CSS_SELECTOR, #password).clear()self.driver.find_element(By.CSS_SELECTOR, #password).send_keys(123456)self.driver.implicitly_wait(2)self.driver.find_element(By.CSS_SELECTOR, #submit).click()time.sleep(1)alert self.driver.switch_to.alerttextalert.textassert text账号或密码不能为空alert.accept()BlogDriver.GetImage()#不做输入def LandFailTest7(self):self.driver.find_element(By.CSS_SELECTOR, #username).clear()self.driver.find_element(By.CSS_SELECTOR, #password).clear()self.driver.implicitly_wait(2)self.driver.find_element(By.CSS_SELECTOR, #submit).click()time.sleep(1)alert self.driver.switch_to.alerttextalert.textassert text账号或密码不能为空alert.accept()BlogDriver.GetImage()land BlogLand()(3)单独对该模块进行自动化测试
4.编写博客主页展示模块的测试用例代码
(1)创建一个博客主页展示类自定义名为BlogShow继承Edge_Driver类得到驱动driver
(2)根据博客主页展示模块测试用例创建不同的方法 LandShow()#登陆状态下主页展示LandFailShow()#未登录状态主页展示import time
from selenium.webdriver.common.by import By
from common.webdriver import BlogDriverclass BlogShow:url driverdef __init__(self):self.url http://8.137.19.140:9090/blog_login.htmlself.driverBlogDriver.driverself.driver.get(self.url)#登陆状态下主页展示def LandShow(self):self.driver.find_element(By.CSS_SELECTOR,#username).send_keys(zhangsan)self.driver.find_element(By.CSS_SELECTOR,#password).send_keys(123456)self.driver.find_element(By.CSS_SELECTOR,#submit).click()BlogDriver.GetImage()textself.driver.find_element(By.CSS_SELECTOR,body div.container div.left div h3).textassert textzhangsantextself.driver.find_element(By.CSS_SELECTOR,body div.nav span).textassert text 我的博客系统textself.driver.find_element(By.CSS_SELECTOR,body div.nav a:nth-child(6)).textassert text 注销textself.driver.find_element(By.CSS_SELECTOR,body div.container div.left div div:nth-child(4) span:nth-child(1)).textassert text 文章textself.driver.find_element(By.CSS_SELECTOR,body div.container div.left div div:nth-child(4) span:nth-child(2)).textassert text 分类#未登录状态主页展示def LandFailShow(self):self.driver.find_element(By.CSS_SELECTOR,body div.nav a:nth-child(6)).click()BlogDriver.GetImage()self.driver.find_element(By.CSS_SELECTOR,body div.nav a:nth-child(4)).click()time.sleep(1)self.driver.find_element(By.CSS_SELECTOR,body div.nav a:nth-child(5)).click()time.sleep(1)BlogDriver.GetImage()# textself.driver.find_element(By.CSS_SELECTOR,#submit).text# print(text)# assert text 发布文章self.driver.find_element(By.CSS_SELECTOR,#submit).click()time.sleep(1)self.driver.find_element(By.CSS_SELECTOR, #submit).click()time.sleep(1)alert self.driver.switch_to.alerttextalert.textassert text账号或密码不能为空alert.accept()BlogDriver.GetImage()Show BlogShow()
(3)单独对该模块进行自动化测试
5.编写博客创作模块的测试用例代码
(1)创建一个博客创作展示类自定义名为BlogPush继承Edge_Driver类得到驱动driver
(2)根据博客创作模块测试用例创建不同的方法 BPush()#博客创作Modify()#博客修改from common.webdriver import BlogDriver
import timefrom selenium.webdriver.common.by import Byclass BlogPush:driverurldef __init__(self):self.driverBlogDriver.driverself.urlhttp://8.137.19.140:9090/blog_login.html# 博客创作def BPush(self):self.driver.get(self.url)self.driver.find_element(By.CSS_SELECTOR,#username).send_keys(zhangsan)self.driver.find_element(By.CSS_SELECTOR,#password).send_keys(123456)self.driver.find_element(By.CSS_SELECTOR,#submit).click()time.sleep(1)self.driver.find_element(By.CSS_SELECTOR,body div.nav a:nth-child(5)).click()time.sleep(1)BlogDriver.GetImage()self.driver.find_element(By.CSS_SELECTOR,#submit).click()time.sleep(1)alertself.driver.switch_to.alertalert.accept()self.driver.find_element(By.CSS_SELECTOR,#title).send_keys(博客系统UI自动化测试)BlogDriver.GetImage()self.driver.find_element(By.CSS_SELECTOR,#submit).click()time.sleep(1)BlogDriver.GetImage()self.driver.find_element(By.CSS_SELECTOR,body div.nav a:nth-child(6)).click()# 博客修改def Modify(self):self.driver.find_element(By.CSS_SELECTOR,#username).send_keys(zhangsan)self.driver.find_element(By.CSS_SELECTOR,#password).send_keys(123456)self.driver.find_element(By.CSS_SELECTOR,#submit).click()self.driver.find_element(By.CSS_SELECTOR,body div.container div.right div a).click()time.sleep(1)BlogDriver.GetImage()self.driver.find_element(By.CSS_SELECTOR,body div.container div.right div div.operating button:nth-child(1)).click()BlogDriver.GetImage()self.driver.find_element(By.CSS_SELECTOR, #title).send_keys(123)BlogDriver.GetImage()self.driver.find_element(By.CSS_SELECTOR,#submit).click()time.sleep(1)BlogDriver.GetImage()self.driver.find_element(By.CSS_SELECTOR,body div.nav a:nth-child(6)).click()pushBlogPush()(3)单独对该模块进行自动化测试
6.编写博客查看模块的测试用例代码
(1)创建一个博客查看展示类自定义名为BlogFind继承Edge_Driver类得到驱动driver
(2)根据博客查看模块测试用例创建不同的方法
#博客查看
LandFind():from common.webdriver import BlogDriver
import timefrom selenium.webdriver.common.by import Byclass BlogFind:urldriverdef __init__(self):self.url http://8.137.19.140:9090/blog_login.htmlself.driverBlogDriver.driver#博客查看def LandFind(self):self.driver.get(self.url)self.driver.find_element(By.CSS_SELECTOR,#username).send_keys(zhangsan)self.driver.find_element(By.CSS_SELECTOR,#password).send_keys(123456)self.driver.find_element(By.CSS_SELECTOR,#submit).click()self.driver.find_element(By.CSS_SELECTOR, body div.container div.right div:nth-child(1) a).click()textself.driver.find_element(By.CSS_SELECTOR, body div.container div.right div div.title).textBlogDriver.GetImage()assert text博客系统UI自动化测试123textself.driver.find_element(By.CSS_SELECTOR, #h2-u5728u8FD9u91CCu5199u4E0Bu4E00u7BC7u535Au5BA2).textassert text在这里写下一篇博客self.driver.find_element(By.CSS_SELECTOR, body div.nav a:nth-child(6)).click()findBlogFind()(3)单独对该模块进行自动化测试
7.编写博客删除模块的测试用例代码
(1)创建一个博客删除类自定义名为BlogPop继承Edge_Driver类得到驱动driver
(2)根据博客删除博客删除模块测试用例创建不同的方法
BPop()#博客删除import timefrom selenium.webdriver.common.by import Byfrom common.webdriver import BlogDriverclass BlogPop:driverurldef __init__(self):self.driverBlogDriver.driverself.urlhttp://8.137.19.140:9090/blog_login.htmldef BPop(self):self.driver.get(self.url)self.driver.find_element(By.CSS_SELECTOR,#username).send_keys(zhangsan)self.driver.find_element(By.CSS_SELECTOR,#password).send_keys(123456)self.driver.find_element(By.CSS_SELECTOR,#submit).click()time.sleep(1)BlogDriver.GetImage()self.driver.find_element(By.CSS_SELECTOR,body div.container div.right div a).click()time.sleep(1)BlogDriver.GetImage()self.driver.find_element(By.CSS_SELECTOR,body div.container div.right div div.operating button:nth-child(2)).click()time.sleep(1)alert self.driver.switch_to.alerttextalert.textassert text确定删除?alert.dismiss()self.driver.find_element(By.CSS_SELECTOR,body div.container div.right div div.operating button:nth-child(2)).click()time.sleep(1)alert self.driver.switch_to.alerttextalert.textassert text确定删除?alert.accept()BlogDriver.GetImage()popBlogPop()(3)单独对该模块进行自动化测试
8.编写博客退出模块的测试用例代码
(1)创建一个博客退出类自定义名为BlogExit继承Edge_Driver类得到驱动driver
(2)根据博客退出模块测试用例创建不同的方法 注博客正常退出在前几个模块不断被使用故这里只编写了不正常退出。
BExit()#博客不正常退出import timefrom selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.edge.options import Options
from selenium.webdriver.edge.service import Servicefrom common.webdriver import BlogDriverclass BlogExit:driverurldef __init__(self):self.urlhttp://8.137.19.140:9090/blog_login.htmlself.driverBlogDriver.driverdef BExit(self):self.driver.get(self.url)self.driver.find_element(By.CSS_SELECTOR,#username).send_keys(zhangsan)self.driver.find_element(By.CSS_SELECTOR,#password).send_keys(123456)self.driver.find_element(By.CSS_SELECTOR,#submit).click()self.driver.quit()edge_driver_path rC:\Program Files (x86)\Microsoft\Edge\WebDriver\edgedriver_win64\msedgedriver.exeserviceService(edge_driver_path)options Options()options.add_argument(--remote-allow-origins*)self.driverwebdriver.Edge(serviceservice,optionsoptions)self.driver.get(self.url)self.driver.find_element(By.CSS_SELECTOR, #submit).click()time.sleep(1)alert self.driver.switch_to.alerttextalert.textassert text账号或密码不能为空alert.accept()self.driver.find_element(By.CSS_SELECTOR,#username).send_keys(zhangsan)self.driver.find_element(By.CSS_SELECTOR,#password).send_keys(123456)self.driver.find_element(By.CSS_SELECTOR,#submit).click()time.sleep(1)self.driver.find_element(By.CSS_SELECTOR, body div.nav a:nth-child(6)).click()time.sleep(1)self.driver.quit()exitBlogExit()(3)单独对该模块进行自动化测试
9.编写测试截图功能
测试截图可在自动化测试过程中进行截图操作并保存这有利于自动化测试结果的观察。 因为该截图功能可能会被反复调用故可以将其和创建驱动对象写到一起。
import datetime
import os
import sys
from selenium import webdriver
from selenium.webdriver.edge.service import Service
from selenium.webdriver.edge.options import Optionsclass Edge_Driver:driverdef __init__(self):# EdgeDriver 路径edge_driver_path rC:\Program Files (x86)\Microsoft\Edge\WebDriver\edgedriver_win64\msedgedriver.exeserviceService(edge_driver_path)options Options()options.add_argument(--remote-allow-origins*)self.driverwebdriver.Edge(serviceservice,optionsoptions)self.driver.implicitly_wait(2)def GetImage(self):dirname datetime.datetime.now().strftime(%Y-%m-%d)if not os.path.exists(../images/ dirname):os.mkdir(../images/ dirname)filename sys._getframe().f_back.f_code.co_name - datetime.datetime.now().strftime(%Y-%m-%d-%H%M%S) .pngself.driver.save_screenshot(../images/ dirname / filename)BlogDriverEdge_Driver()
10.整合代码进行系统测试
将前面写的代码都放入main函数中运行。
from auto_Chrome_bolgtest import EdgeBlogLand
from auto_Chrome_bolgtest import EdgeBlogShow
from auto_Chrome_bolgtest import EdgeBlogFind
from auto_Chrome_bolgtest import EdgeBlogPush
from auto_Chrome_bolgtest import EdgeBlogPop
from auto_Chrome_bolgtest import EdgeBlogExitif __name____main__:#博客登陆EdgeBlogLand.land.LandFailTest1()#输入错误的账号和错误的密码EdgeBlogLand.land.LandFailTest2()#输入错误的账号和正确的密码EdgeBlogLand.land.LandFailTest3()#输入正确的账号和错误的密码EdgeBlogLand.land.LandFailTest4()#输入非常规账号和密码EdgeBlogLand.land.LandFailTest5()#仅输入账号EdgeBlogLand.land.LandFailTest6()#仅输入密码EdgeBlogLand.land.LandFailTest7()#不做输入EdgeBlogLand.land.LandTest1()#输入正确的账号和密码EdgeBlogLand.land.LandTest2() # 输入正确的账号和密码#博客主页展示EdgeBlogShow.Show.LandShow()EdgeBlogShow.Show.LandFailShow()#博客创作EdgeBlogPush.push.BPush()EdgeBlogPush.push.Modify()#博客查看EdgeBlogFind.find.LandFind()#博客删除EdgeBlogPop.pop.BPop()#博客退出EdgeBlogExit.exit.BExit()(三)自动化测试总结
1.自动化测试覆盖模块
博客登录、博客主页展示、博客创作、博客修改、博客查看、博客删除、博客退出2.自动化测试用例数量 自动化测试用例数量33个3. 自动化测试代码展示
博客UI自动化测试代码链接 https://gitee.com/pluck-his-hair/primary-project/tree/master/auto_test
4.自动化测试部分截图 5. 自动化测试结果 项目功能用例99.999999%通过6. 测试评估
核心功能测试通过项目达到上线基本要求7. 遗留问题
问题预期结果实际结果遗留原因博客主页展示页面中文章数量跟随博客数量的变动而进行改变始终为2测试时间紧张留至下版本更新处理博客主页GitHub 地址能显示且能跳转不能显示但能跳转测试时间紧张留至下版本更新处理部分扩展功能测试抓紧实现暂未实现测试时间紧张未能涉及全模块总结
测试代码编写可能出现错误的原因 隐式等待有时会改变代码执行顺序出现报错可加入强制等待确保页面加载完成提高自动化的稳定性。