【论坛系统自动化功能测试报告】
论坛系统自动化功能测试报告
- 一、项目背景
- 二、测试内容
- (一)测试用例
- (二)测试账号
- (三)使用Selenium进行Web自动化测试
- 1.环境搭建
- 2.创建浏览器驱动对象和截图功能
- 3.编写论坛注册模块的测试用例代码
- 4.编写论坛登陆模块的测试用例代码
- 5.编写论坛首页模块的测试用例代码
- 6.编写论坛创作模块的测试用例代码
- 7.编写论坛评论模块的测试用例代码
- 8.编写论坛交流与论坛查看模块的测试用例代码
- 9.编写帖子删除模块的测试用例代码
- 10.编写个人中心模块的测试用例代码
- 11.编写论坛账号退出模块的测试用例代码
- 12.整合代码,进行系统测试
- (三)自动化测试总结
- 1.自动化测试覆盖模块
- 2.自动化测试用例数量
- 3. 自动化测试代码展示
- 4.自动化测试部分截图
- 5. 自动化测试结果
- 6. 测试评估
- 7. 遗留问题
- 总结
一、项目背景
本次论坛系统自动化测试所用论坛系统需要在测试前进行部署,由论坛注册页、论坛登陆页、论坛首页、论坛创作页、个人中心页等所组成。成功注册并登录论坛即可查看自己已发布的帖子,也可以进行发布帖子操作,通过使用Selenium定位web元素、对获取到的元素进行操作等,对论坛系统进行测试,测试的核心内容包括论坛注册、论坛登陆、论坛首页展示、论坛创作、帖子修改、帖子查看与分类、帖子删除、论坛交流、论坛个人信息查看与修改、论坛账号退出等功能。同时该论坛系统还可以实现记录帖子发布日期、时间、查看次数、评论数、点赞数等信息。
二、测试内容
注:测试的内容都是个人完成的,所以就不写需求文档和测试安排了。
(一)测试用例
设计测试用例方法一般从以下几个方面设计:
功能测试、界面测试、性能测试、易用性测试、安全性测试、兼容性测试等六个方面进行设计,但是个人博客系统是一个web网站,主要是针对核心功能、界面测试、安全性测试、兼容性测试进行测试,编写的测试用例如下:
其中安全性测试和界面测试需要人工测试,就不过多涉及了,
本报告主要对功能模块进行自动化测试。
(二)测试账号
账号 | 用户名 | 密码 |
---|---|---|
账号1 | zhangsan | 123456 |
账号2 | qwe | qwe |
(三)使用Selenium进行Web自动化测试
1.环境搭建
安装与浏览器名称和版本对应的webdrivermanager。
本次测试使用的驱动版本如下:
驱动 | 版本 |
---|---|
Edge浏览器 | 138.0.3351.121 (正式版本) (64 位) |
selenium | 4.0.0 |
webdriver-manager | 4.0.2 |
2.创建浏览器驱动对象和截图功能
创建一个驱动类(自定义名为Forum_WebDriver),通过在forumDriver中创建一个统一驱动对象对坛注册、论坛登陆、论坛首页展示、论坛创作、帖子修改、帖子查看与分类、帖子删除、论坛交流、论坛个人信息查看与修改、论坛账号退出等功能分别进行测试操作。
测试截图可在自动化测试过程中进行截图操作并保存,这有利于自动化测试结果的观察。因为该截图功能可能会被反复调用,故可以将其和创建驱动对象写到一起。
import datetime
import os
import sys
from selenium import webdriver
from selenium.webdriver.edge.options import Options
from selenium.webdriver.edge.service import Serviceclass Forum_WebDriver:driver=""def __init__(self):route=r"C:\Program Files (x86)\Microsoft\Edge\WebDriver\edgedriver_win64\msedgedriver.exe"service=Service(route)options = Options()options.add_argument("--remote-allow-origins=*")self.driver=webdriver.Edge(service=service,options=options)self.driver.implicitly_wait(2)def GetImages(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") + ".png"self.driver.save_screenshot("../images/" + dirname + "/" + filename)forumDriver=Forum_WebDriver()
注:根据所要测试的功能可创建不同的测试类
3.编写论坛注册模块的测试用例代码
(1)创建一个论坛注册类(自定义名为Forum_Register)继承Forum_WebDriver类,得到驱动driver
(2)根据论坛注册模块测试用例创建不同的方法
#论坛注册Register_test()
import time
from selenium.webdriver.common.by import By
from common.ForumTest_WebDriver import forumDriver#用户名:qwe
#密码:qwe#用户名:zhangsan
#密码:123456
#论坛注册
class Forum_Register:driver=""url=""def __init__(self):self.url="http://127.0.0.1:58080/sign-in.html"self.driver=forumDriver.driverself.driver.get(self.url)#点击注册def Register_test(self):self.driver.find_element(By.CSS_SELECTOR,"body > div > div > div > div:nth-child(1) > div > div.text-center.text-muted.mt-3 > a").click()time.sleep(0.5)#四大皆空的时候注册forumDriver.GetImages()self.driver.find_element(By.CSS_SELECTOR,"#username").clear()self.driver.find_element(By.CSS_SELECTOR,"#nickname").clear()self.driver.find_element(By.CSS_SELECTOR,"#password").clear()self.driver.find_element(By.CSS_SELECTOR,"#passwordRepeat").clear()self.driver.find_element(By.CSS_SELECTOR,"#submit").click()text = self.driver.find_element(By.CSS_SELECTOR,"#signUpForm > div > div:nth-child(2) > div").textassert text=="用户名不能为空"text = self.driver.find_element(By.CSS_SELECTOR, "#signUpForm > div > div:nth-child(3) > div").textassert text=="昵称不能为空"text = self.driver.find_element(By.CSS_SELECTOR, "#signUpForm > div > div:nth-child(4) > div > div").textassert text=="密码不能为空"text = self.driver.find_element(By.CSS_SELECTOR, "#signUpForm > div > div:nth-child(5) > div > div").textassert text=="请检查确认密码"forumDriver.GetImages()#返回登录界面self.driver.find_element(By.CSS_SELECTOR,"body > div > div > div.text-center.text-muted.mt-3 > a").click()time.sleep(0.5)forumDriver.GetImages()#返回注册界面self.driver.find_element(By.CSS_SELECTOR,"body > div > div > div > div:nth-child(1) > div > div.text-center.text-muted.mt-3 > a").click()#正常注册self.driver.find_element(By.CSS_SELECTOR,"#username").clear()self.driver.find_element(By.CSS_SELECTOR,"#nickname").clear()self.driver.find_element(By.CSS_SELECTOR,"#password").clear()self.driver.find_element(By.CSS_SELECTOR,"#passwordRepeat").clear()self.driver.find_element(By.CSS_SELECTOR,"#username").send_keys("qwe")self.driver.find_element(By.CSS_SELECTOR,"#nickname").send_keys("qwe")self.driver.find_element(By.CSS_SELECTOR,"#password").send_keys("qw")self.driver.find_element(By.CSS_SELECTOR,"#passwordRepeat").send_keys("qwe")self.driver.find_element(By.CSS_SELECTOR,"#submit").click()#不勾协议text = self.driver.find_element(By.CSS_SELECTOR, "#signUpForm > div > div:nth-child(5) > div > div").textassert text=="请检查确认密码"forumDriver.GetImages()self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("e")self.driver.find_element(By.CSS_SELECTOR,"#submit").click()#勾协议self.driver.find_element(By.CSS_SELECTOR,"#policy").click()self.driver.find_element(By.CSS_SELECTOR,"#submit").click()time.sleep(0.5)forumDriver.GetImages()register=Forum_Register()
#register.Register_test()
(3)单独对该模块进行自动化测试
4.编写论坛登陆模块的测试用例代码
(1)创建一个论坛登陆类(自定义名为Forum_Land)继承Forum_WebDriver类,得到驱动driver
(2)根据论坛登陆模块测试用例创建不同的方法
LandFailTest1()#输入错误的账号和错误的密码LandFailTest2()#输入错误的账号和正确的密码LandFailTest3()#输入正确的账号和错误的密码LandFailTest4()#输入非常规账号和密码LandFailTest5()#仅输入账号LandFailTest6()#仅输入密码LandFailTest7()#不做输入LandTest1()#输入正确的账号和密码LandTest2()#输入另一个正确的账号和密码
import time
from selenium.webdriver.common.by import By
from common.ForumTest_WebDriver import forumDriverclass Forum_Land:driver = ""url = ""def __init__(self):self.url = "http://127.0.0.1:58080/sign-in.html"self.driver = forumDriver.driverself.driver.get(self.url)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()time.sleep(0.5)forumDriver.GetImages()text = self.driver.find_element(By.CSS_SELECTOR, "#article_list_board_title").textassert text == '首页'self.driver.find_element(By.CSS_SELECTOR, "#index_nav_avatar").click()self.driver.find_element(By.CSS_SELECTOR, "#index_user_logout").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("qwe")self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("qwe")self.driver.find_element(By.CSS_SELECTOR, "#submit").click()forumDriver.GetImages()text = self.driver.find_element(By.CSS_SELECTOR, "#article_list_board_title").textassert text == '首页'self.driver.find_element(By.CSS_SELECTOR, "#index_nav_avatar").click()self.driver.find_element(By.CSS_SELECTOR, "#index_user_logout").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(0.5)text=self.driver.find_element(By.CSS_SELECTOR, "body > div.page.page-center > div > div > div:nth-child(1) > div > div.card.card-md > div > h2").textassert text=='用户登录'forumDriver.GetImages()#输入错误的账号和正确的密码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(0.5)text=self.driver.find_element(By.CSS_SELECTOR, "body > div.page.page-center > div > div > div:nth-child(1) > div > div.card.card-md > div > h2").textassert text=='用户登录'forumDriver.GetImages()#输入正确的账号和错误的密码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(0.5)text=self.driver.find_element(By.CSS_SELECTOR, "body > div.page.page-center > div > div > div:nth-child(1) > div > div.card.card-md > div > h2").textassert text=='用户登录'forumDriver.GetImages()#输入非常规账号和密码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(0.5)text=self.driver.find_element(By.CSS_SELECTOR, "body > div.page.page-center > div > div > div:nth-child(1) > div > div.card.card-md > div > h2").textassert text=='用户登录'forumDriver.GetImages()#仅输入账号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(0.5)text=self.driver.find_element(By.CSS_SELECTOR, "body > div.page.page-center > div > div > div:nth-child(1) > div > div.card.card-md > div > h2").textassert text=='用户登录'forumDriver.GetImages()#仅输入密码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(0.5)text=self.driver.find_element(By.CSS_SELECTOR, "body > div.page.page-center > div > div > div:nth-child(1) > div > div.card.card-md > div > h2").textassert text=='用户登录'forumDriver.GetImages()#不做输入def LandFailTest7(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, "#submit").click()time.sleep(0.5)text=self.driver.find_element(By.CSS_SELECTOR, "body > div.page.page-center > div > div > div:nth-child(1) > div > div.card.card-md > div > h2").textassert text=='用户登录'forumDriver.GetImages()land=Forum_Land()
# land.LandFailTest1()#输入错误的账号和错误的密码
# land.LandFailTest2()#输入错误的账号和正确的密码
# land.LandFailTest3()#输入正确的账号和错误的密码
# land.LandFailTest4()#输入非常规账号和密码
# land.LandFailTest5()#仅输入账号
# land.LandFailTest6()#仅输入密码
# land.LandFailTest7()#不做输入
# land.LandTest1()#输入正确的账号和密码
# land.LandTest2()#输入另一个正确的账号和密码
(3)单独对该模块进行自动化测试
5.编写论坛首页模块的测试用例代码
(1)创建一个论坛首页类(自定义名为homepage_test)继承Forum_WebDriver类,得到驱动driver
(2)根据论坛首页模块测试用例创建不同的方法
filter()#分类HomePage_Test()#首页
import time
from selenium.webdriver.common.by import By
from common.ForumTest_WebDriver import forumDriverclass Forum_HomePage:driver = ""url = ""def __init__(self):self.url = "http://127.0.0.1:58080/sign-in.html"self.driver = forumDriver.driverself.driver.get(self.url)def HomePage_Test(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("123456")self.driver.find_element(By.CSS_SELECTOR, "#submit").click()time.sleep(0.5)forumDriver.GetImages()self.driver.find_element(By.CSS_SELECTOR, "body > div.page > header.navbar.navbar-expand-md.navbar-light.d-print-none > div > div > div:nth-child(2) > a.nav-link.px-0.hide-theme-dark > svg").click()self.driver.find_element(By.CSS_SELECTOR, "body > div.page > header.navbar.navbar-expand-md.navbar-light.d-print-none > div > div > div:nth-child(2) > div > a > svg").click()text=self.driver.find_element(By.CSS_SELECTOR, "#offcanvasEndLabel").textassert text=="所有站内信"forumDriver.GetImages()text = self.driver.find_element(By.CSS_SELECTOR, "#index_message_offcanvasEnd > div.offcanvas-header > button").click()time.sleep(0.5)#self.driver.find_element(By.CSS_SELECTOR, "body > div.page > header.navbar.navbar-expand-md.navbar-light.d-print-none > div > div > div:nth-child(2) > a.nav-link.px-0.hide-theme-dark > svg").click()def filter(self):self.driver.find_element(By.CSS_SELECTOR, "#topBoardList > li:nth-child(2) > a > span.nav-link-title").click()text=self.driver.find_element(By.CSS_SELECTOR, "#article_list_board_title").textassert text=="Java"forumDriver.GetImages()self.driver.find_element(By.CSS_SELECTOR, "#topBoardList > li:nth-child(3) > a > span.nav-link-title").click()text=self.driver.find_element(By.CSS_SELECTOR, "#article_list_board_title").textassert text=="C++"forumDriver.GetImages()self.driver.find_element(By.CSS_SELECTOR, "#topBoardList > li:nth-child(4) > a > span.nav-link-title").click()text=self.driver.find_element(By.CSS_SELECTOR, "#article_list_board_title").textassert text=="前端技术"forumDriver.GetImages()self.driver.find_element(By.CSS_SELECTOR, "#topBoardList > li:nth-child(5) > a > span.nav-link-title").click()text=self.driver.find_element(By.CSS_SELECTOR, "#article_list_board_title").textassert text=="MySQL"forumDriver.GetImages()self.driver.find_element(By.CSS_SELECTOR, "#topBoardList > li:nth-child(6) > a > span.nav-link-title").click()text=self.driver.find_element(By.CSS_SELECTOR, "#article_list_board_title").textassert text=="面试宝典"forumDriver.GetImages()self.driver.find_element(By.CSS_SELECTOR, "#topBoardList > li:nth-child(7) > a > span.nav-link-title").click()text=self.driver.find_element(By.CSS_SELECTOR, "#article_list_board_title").textassert text=="经验分享"forumDriver.GetImages()self.driver.find_element(By.CSS_SELECTOR, "#topBoardList > li:nth-child(8) > a > span.nav-link-title").click()text=self.driver.find_element(By.CSS_SELECTOR, "#article_list_board_title").textassert text=="招聘信息"forumDriver.GetImages()self.driver.find_element(By.CSS_SELECTOR, "#topBoardList > li:nth-child(9) > a > span.nav-link-title").click()text=self.driver.find_element(By.CSS_SELECTOR, "#article_list_board_title").textassert text=="福利待遇"forumDriver.GetImages()self.driver.find_element(By.CSS_SELECTOR, "#topBoardList > li:nth-child(10) > a > span.nav-link-title").click()text=self.driver.find_element(By.CSS_SELECTOR, "#article_list_board_title").textassert text=="灌水区"forumDriver.GetImages()homepage=Forum_HomePage()
# homepage.HomePage_Test()
# homepage.filter()
(3)单独对该模块进行自动化测试
6.编写论坛创作模块的测试用例代码
(1)创建一个论坛创作类(自定义名为 push_test)继承Forum_WebDriver类,得到驱动driver
(2)根据论坛创作模块测试用例创建不同的方法
FPush()#创作
import timefrom selenium.webdriver import Keys
from selenium.webdriver.common.by import By
from common.ForumTest_WebDriver import forumDriverclass Forum_Push:def __init__(self):self.url = "http://127.0.0.1:58080/sign-in.html"self.driver = forumDriver.driverself.driver.maximize_window()self.driver.get(self.url)def FPush(self):self.driver.get(self.url)time.sleep(0.5)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()time.sleep(0.5)self.driver.find_element(By.CSS_SELECTOR, "#bit-forum-content > div.page-header.d-print-none > div > div > div.col-auto.ms-auto.d-print-none > div > a.btn.btn-primary.d-none.d-sm-inline-block.article_post > svg").click()forumDriver.GetImages()self.driver.find_element(By.CSS_SELECTOR, "#article_post_title").send_keys("论坛系统自动化测试")self.driver.find_element(By.CSS_SELECTOR,"#article_post_submit > svg").click()forumDriver.GetImages()self.driver.find_element(By.CSS_SELECTOR, "#article_post_title").clear()self.driver.find_element(By.CSS_SELECTOR, "#edit-article > div.editormd-toolbar > div > ul > li:nth-child(12) > a > i").click()self.driver.find_element(By.CSS_SELECTOR, "#edit-article > div.editormd-toolbar > div > ul > li:nth-child(13) > a > i").click()time.sleep(0.5)forumDriver.GetImages()self.driver.find_element(By.CSS_SELECTOR,"#article_post_submit > svg").click()self.driver.find_element(By.CSS_SELECTOR, "#article_post_title").send_keys("论坛系统自动化测试")self.driver.find_element(By.CSS_SELECTOR, "#edit-article > div.editormd-toolbar > div > ul > li:nth-child(12) > a > i").click()self.driver.find_element(By.CSS_SELECTOR, "#edit-article > div.editormd-toolbar > div > ul > li:nth-child(13) > a > i").click()time.sleep(0.5)forumDriver.GetImages()self.driver.find_element(By.CSS_SELECTOR,"#article_post_submit > svg").click()time.sleep(0.5)self.driver.find_element(By.CSS_SELECTOR,"#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong").click()time.sleep(0.5)# self.driver.find_element(By.CSS_SELECTOR,"#details_artile_edit > svg").click()self.driver.find_element(By.XPATH,'//*[@id="details_artile_edit"]/span').click()time.sleep(0.5)self.driver.find_element(By.CSS_SELECTOR, "#edit_article_title").send_keys("123")title_label=self.driver.find_element(By.CSS_SELECTOR, "#edit_article_title")# tab键跳转到输入内容的位置title_label.send_keys(Keys.TAB)ele = self.driver.switch_to.active_elementele.send_keys("论坛系统UI自动化测试")time.sleep(0.5)forumDriver.GetImages()self.driver.find_element(By.CSS_SELECTOR,"#edit_article_submit > span").click()push=Forum_Push()
# push.FPush()
(3)单独对该模块进行自动化测试
7.编写论坛评论模块的测试用例代码
(1)创建一个论坛评论类(自定义名为comment_test)继承Forum_WebDriver类,得到驱动driver
(2)根据论坛评论模块测试用例创建不同的方法
Comment()#评论
import time
from selenium.webdriver import Keys
from selenium.webdriver.common.by import By
from common.ForumTest_WebDriver import forumDriverclass Forum_Comment:driver = ""url = ""def __init__(self):self.url = "http://127.0.0.1:58080/sign-in.html"self.driver = forumDriver.driverself.driver.get(self.url)def Comment(self):self.driver.get(self.url)time.sleep(0.5)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("qwe")self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("qwe")self.driver.find_element(By.CSS_SELECTOR, "#submit").click()time.sleep(0.5)self.driver.find_element(By.CSS_SELECTOR, "#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong").click()time.sleep(0.5)forumDriver.GetImages()self.driver.find_element(By.CSS_SELECTOR, "#article_details_reply > div.editormd-toolbar > div > ul > li:nth-child(12) > a > i").click()self.driver.find_element(By.CSS_SELECTOR, "#article_details_reply > div.editormd-toolbar > div > ul > li:nth-child(13) > a > i").click()time.sleep(0.5)forumDriver.GetImages()self.driver.find_element(By.CSS_SELECTOR, "#details_btn_article_reply > span").click()self.driver.find_element(By.CSS_SELECTOR, "#index_nav_avatar").click()self.driver.find_element(By.CSS_SELECTOR, "#index_user_logout").click()comment=Forum_Comment()
# comment.Comment()
(3)单独对该模块进行自动化测试
8.编写论坛交流与论坛查看模块的测试用例代码
(1)创建一个论坛交流与论坛查看类(自定义名为view_test)继承Forum_WebDriver类,得到驱动driver
(2)根据论坛交流与论坛查看模块测试用例创建不同的方法
View()#查看、交流
import timefrom selenium.webdriver import Keys
from selenium.webdriver.common.by import By
from common.ForumTest_WebDriver import forumDriverclass Forum_View:driver = ""url = ""def __init__(self):self.url = "http://127.0.0.1:58080/sign-in.html"self.driver = forumDriver.driverself.driver.get(self.url)def View(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("123456")self.driver.find_element(By.CSS_SELECTOR, "#submit").click()time.sleep(0.5)self.driver.find_element(By.CSS_SELECTOR, "#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong").click()time.sleep(0.5)forumDriver.GetImages()self.driver.find_element(By.CSS_SELECTOR, "#details_reply_area > div:nth-child(1) > div.col-3.card > div > div > a").click()time.sleep(0.5)self.driver.find_element(By.CSS_SELECTOR, "#index_message_receive_cancel").click()time.sleep(0.5)self.driver.find_element(By.CSS_SELECTOR, "#details_reply_area > div:nth-child(1) > div.col-3.card > div > div > a").click()self.driver.find_element(By.CSS_SELECTOR, "#index_message_receive_content").send_keys("xxxxxxx")forumDriver.GetImages()self.driver.find_element(By.CSS_SELECTOR, "#btn_index_send_message").click()self.driver.find_element(By.CSS_SELECTOR, "#details_reply_area > div:nth-child(1) > div.col-3.card > div > h3 > a").click()text=self.driver.find_element(By.CSS_SELECTOR,"#bit-forum-content > div.page-body > div > div > div.col-lg-4 > div > div > div > div > h2").textassert text=="个人介绍"forumDriver.GetImages()view=Forum_View()
# view.View()
(3)单独对该模块进行自动化测试
9.编写帖子删除模块的测试用例代码
(1)创建一个帖子删除类(自定义名为pop_test())继承Forum_WebDriver类,得到驱动driver
(2)根据帖子删除模块测试用例创建不同的方法
Pop()#删除
import time
from selenium.webdriver.common.by import By
from common.ForumTest_WebDriver import forumDriverclass Forum_Pop:driver = ""url = ""def __init__(self):self.url = "http://127.0.0.1:58080/sign-in.html"self.driver = forumDriver.driverself.driver.get(self.url)def Pop(self):self.driver.get(self.url)time.sleep(0.5)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()time.sleep(0.5)forumDriver.GetImages()self.driver.find_element(By.CSS_SELECTOR, "#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong").click()time.sleep(0.5)self.driver.find_element(By.CSS_SELECTOR, "#bit-forum-content > div.page-body > div > div > div:nth-child(1) > div.col-9.card.card-lg > div.card-footer.bg-transparent.mt-auto.justify-content-end > div > div:nth-child(3) > div > a").click()self.driver.find_element(By.CSS_SELECTOR, "#details_delete_modal > div > div > div.modal-footer > div > div > div:nth-child(1) > a").click()self.driver.find_element(By.CSS_SELECTOR, "#bit-forum-content > div.page-body > div > div > div:nth-child(1) > div.col-9.card.card-lg > div.card-footer.bg-transparent.mt-auto.justify-content-end > div > div:nth-child(3) > div > a").click()self.driver.find_element(By.CSS_SELECTOR, "#details_artile_delete").click()forumDriver.GetImages()pop=Forum_Pop()
# pop.Pop()
(3)单独对该模块进行自动化测试
10.编写个人中心模块的测试用例代码
(1)创建一个个人中心类(自定义名为personal_information_test)继承Forum_WebDriver类,得到驱动driver
(2)根据个人中心模块测试用例创建不同的方法
PersonalInformation()#个人中心
import timefrom selenium.webdriver import Keys
from selenium.webdriver.common.by import By
from common.ForumTest_WebDriver import forumDriverclass Forum_PersonalInformation:driver = ""url = ""def __init__(self):self.url = "http://127.0.0.1:58080/sign-in.html"self.driver = forumDriver.driverself.driver.get(self.url)def PersonalInformation(self):self.driver.get(self.url)time.sleep(0.5)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()time.sleep(0.5)self.driver.find_element(By.CSS_SELECTOR, "#index_nav_avatar").click()self.driver.find_element(By.CSS_SELECTOR, "#index_user_settings").click()time.sleep(0.5)forumDriver.GetImages()#昵称修改self.driver.find_element(By.CSS_SELECTOR, "#setting_input_nickname").clear()self.driver.find_element(By.CSS_SELECTOR, "#setting_input_nickname").send_keys("123")self.driver.find_element(By.CSS_SELECTOR, "#setting_submit_nickname").click()time.sleep(0.5)forumDriver.GetImages()#邮箱地址修改self.driver.find_element(By.CSS_SELECTOR, "#setting_input_email").clear()self.driver.find_element(By.CSS_SELECTOR, "#setting_input_email").send_keys("123456@123456")self.driver.find_element(By.CSS_SELECTOR, "#setting_submit_email").click()time.sleep(0.5)forumDriver.GetImages()#电话号码修改self.driver.find_element(By.CSS_SELECTOR, "#setting_input_phoneNum").clear()self.driver.find_element(By.CSS_SELECTOR, "#setting_input_phoneNum").send_keys("12345678910")self.driver.find_element(By.CSS_SELECTOR, "#setting_submit_phoneNum").click()time.sleep(0.5)forumDriver.GetImages()#个人介绍修改self.driver.find_element(By.CSS_SELECTOR, "#settings_textarea_remark").clear()self.driver.find_element(By.CSS_SELECTOR, "#settings_textarea_remark").send_keys("I’m zhangsan")self.driver.find_element(By.CSS_SELECTOR, "#settings_submit_remark").click()time.sleep(0.5)forumDriver.GetImages()#密码修改self.driver.find_element(By.CSS_SELECTOR, "#settings_input_oldPassword").send_keys("123456")self.driver.find_element(By.CSS_SELECTOR, "#settings_input_newPassword").send_keys("123")self.driver.find_element(By.CSS_SELECTOR, "#settings_input_passwordRepeat").send_keys("123")self.driver.find_element(By.CSS_SELECTOR, "#settings_submit_password").click()time.sleep(0.5)forumDriver.GetImages()#重新登陆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("123")self.driver.find_element(By.CSS_SELECTOR, "#submit").click()time.sleep(0.5)forumDriver.GetImages()#个人介绍查看self.driver.find_element(By.CSS_SELECTOR, "#index_nav_avatar").click()self.driver.find_element(By.CSS_SELECTOR, "#index_user_profile").click()time.sleep(0.5)text=self.driver.find_element(By.CSS_SELECTOR,"#profile_remark").textassert text=="I’m zhangsan"time.sleep(0.5)forumDriver.GetImages()#密码改回来self.driver.find_element(By.CSS_SELECTOR, "#index_nav_avatar").click()self.driver.find_element(By.CSS_SELECTOR, "#index_user_settings").click()self.driver.find_element(By.CSS_SELECTOR, "#settings_input_oldPassword").send_keys("123")self.driver.find_element(By.CSS_SELECTOR, "#settings_input_newPassword").send_keys("123456")self.driver.find_element(By.CSS_SELECTOR, "#settings_input_passwordRepeat").send_keys("123456")time.sleep(0.5)forumDriver.GetImages()self.driver.find_element(By.CSS_SELECTOR, "#settings_submit_password").click()personal_information=Forum_PersonalInformation()
# personal_information.PersonalInformation()
(3)单独对该模块进行自动化测试
11.编写论坛账号退出模块的测试用例代码
(1)创建一个论坛账号退出类(自定义名为exit_test)继承Forum_WebDriver类,得到驱动driver
(2)根据论坛账号退出模块测试用例创建不同的方法
Exit()#不正常退出
import time
from selenium import webdriver
from selenium.webdriver import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.edge.options import Options
from selenium.webdriver.edge.service import Service
from common.ForumTest_WebDriver import forumDriverclass Forum_Exit:driver = ""url = ""def __init__(self):self.url = "http://127.0.0.1:58080/sign-in.html"self.driver = forumDriver.driverself.driver.get(self.url)#不正常退出def Exit(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("123456")self.driver.find_element(By.CSS_SELECTOR, "#submit").click()time.sleep(0.5)forumDriver.GetImages()self.driver.quit()route=r"C:\Program Files (x86)\Microsoft\Edge\WebDriver\edgedriver_win64\msedgedriver.exe"service=Service(route)options = Options()options.add_argument("--remote-allow-origins=*")self.driver=webdriver.Edge(service=service,options=options)self.driver.get(self.url)self.driver.find_element(By.CSS_SELECTOR, "#submit").click()time.sleep(0.5)text=self.driver.find_element(By.CSS_SELECTOR, "#signInForm > div.mb-3 > div").textassert text=='用户名不能为空'text=self.driver.find_element(By.CSS_SELECTOR, "#signInForm > div.mb-2 > div > div").textassert text=='密码不能为空'time.sleep(0.5)self.driver.quit()exit=Forum_Exit()
# exit.Exit()
(3)单独对该模块进行自动化测试
12.整合代码,进行系统测试
将前面写的代码都放入main函数中运行。
from Forum_Function import register_test
from Forum_Function import comment_test
from Forum_Function import exit_test
from Forum_Function import homepage_test
from Forum_Function import Land_test
from Forum_Function import personal_information_test
from Forum_Function import pop_test
from Forum_Function import push_test
from Forum_Function import view_testif __name__=="__main__":#论坛注册#register_test.register.Register_test()#论坛登陆Land_test.land.LandFailTest1()Land_test.land.LandFailTest2()Land_test.land.LandFailTest3()Land_test.land.LandFailTest4()Land_test.land.LandFailTest5()Land_test.land.LandFailTest6()Land_test.land.LandFailTest7()Land_test.land.LandTest1()Land_test.land.LandTest2()#论坛首页homepage_test.homepage.HomePage_Test()#论坛创作push_test.push.FPush()#论坛交流、论坛查看comment_test.comment.Comment()view_test.view.View()#帖子删除pop_test.pop.Pop()#个人中心personal_information_test.personal_information.PersonalInformation()#论坛账号退出exit_test.exit.Exit()
(三)自动化测试总结
1.自动化测试覆盖模块
本次测试覆盖了论坛注册、论坛登陆、论坛首页展示、论坛创作、帖子修改、帖子查看与分类、帖子删除、论坛交流、论坛个人信息查看与修改、论坛账号退出等大部分功能。
2.自动化测试用例数量
自动化测试用例数量:57个
3. 自动化测试代码展示
论坛系统自动化测试代码链接:
https://gitee.com/pluck-his-hair/primary-project/tree/master/Forumsystem_Test
4.自动化测试部分截图
5. 自动化测试结果
项目功能用例99.9999%通过
6. 测试评估
核心功能测试通过,项目达到上线基本要求
7. 遗留问题
问题 | 预期结果 | 实际结果 | 遗留原因 |
---|---|---|---|
论坛注册用户名和账号 | 对其加以限制检测 | 仅做了不输入检测 | 测试时间紧张,留至下版本更新处理 |
论坛帖子的和查看次数评论数 | 实时显示 | 有较长延迟 | 测试时间紧张,留至下版本更新处理 |
论坛黑夜与白天模式 | 切换后长期保持 | 切换后某些操作会重回白天模式 | 测试时间紧张,留至下版本更新处理 |
部分扩展功能测试 | 抓紧实现 | 暂未实现 | 测试时间紧张,未能涉及全模块 |
总结
测试代码编写可能出现错误的原因:
隐式等待有时会改变代码执行顺序出现报错,可加入强制等待,确保页面加载完成,提高自动化的稳定性。