论坛系统自动化功能测试报告
- 一、项目背景
- 二、测试内容
- (三)自动化测试总结
-
- 1.自动化测试覆盖模块
- 2.自动化测试用例数量
- [3. 自动化测试代码展示](#3. 自动化测试代码展示)
- 4.自动化测试部分截图
- [5. 自动化测试结果](#5. 自动化测试结果)
- [6. 测试评估](#6. 测试评估)
- [7. 遗留问题](#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中创建一个统一驱动对象对坛注册、论坛登陆、论坛首页展示、论坛创作、帖子修改、帖子查看与分类、帖子删除、论坛交流、论坛个人信息查看与修改、论坛账号退出等功能分别进行测试操作。
测试截图可在自动化测试过程中进行截图操作并保存,这有利于自动化测试结果的观察。因为该截图功能可能会被反复调用,故可以将其和创建驱动对象写到一起。
python
import datetime
import os
import sys
from selenium import webdriver
from selenium.webdriver.edge.options import Options
from selenium.webdriver.edge.service import Service
class 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()
python
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.driver
self.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").text
assert text=="用户名不能为空"
text = self.driver.find_element(By.CSS_SELECTOR, "#signUpForm > div > div:nth-child(3) > div").text
assert text=="昵称不能为空"
text = self.driver.find_element(By.CSS_SELECTOR, "#signUpForm > div > div:nth-child(4) > div > div").text
assert text=="密码不能为空"
text = self.driver.find_element(By.CSS_SELECTOR, "#signUpForm > div > div:nth-child(5) > div > div").text
assert 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").text
assert 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()#输入另一个正确的账号和密码
python
import time
from selenium.webdriver.common.by import By
from common.ForumTest_WebDriver import forumDriver
class Forum_Land:
driver = ""
url = ""
def __init__(self):
self.url = "http://127.0.0.1:58080/sign-in.html"
self.driver = forumDriver.driver
self.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").text
assert 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").text
assert 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").text
assert 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").text
assert 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").text
assert 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").text
assert 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").text
assert 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").text
assert 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").text
assert 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()#首页
python
import time
from selenium.webdriver.common.by import By
from common.ForumTest_WebDriver import forumDriver
class Forum_HomePage:
driver = ""
url = ""
def __init__(self):
self.url = "http://127.0.0.1:58080/sign-in.html"
self.driver = forumDriver.driver
self.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").text
assert 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").text
assert 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").text
assert 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").text
assert 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").text
assert 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").text
assert 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").text
assert 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").text
assert 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").text
assert 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").text
assert text=="灌水区"
forumDriver.GetImages()
homepage=Forum_HomePage()
# homepage.HomePage_Test()
# homepage.filter()
(3)单独对该模块进行自动化测试
6.编写论坛创作模块的测试用例代码
(1)创建一个论坛创作类(自定义名为 push_test)继承Forum_WebDriver类,得到驱动driver
(2)根据论坛创作模块测试用例创建不同的方法
FPush()#创作
python
import time
from selenium.webdriver import Keys
from selenium.webdriver.common.by import By
from common.ForumTest_WebDriver import forumDriver
class Forum_Push:
def __init__(self):
self.url = "http://127.0.0.1:58080/sign-in.html"
self.driver = forumDriver.driver
self.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_element
ele.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()#评论
python
import time
from selenium.webdriver import Keys
from selenium.webdriver.common.by import By
from common.ForumTest_WebDriver import forumDriver
class Forum_Comment:
driver = ""
url = ""
def __init__(self):
self.url = "http://127.0.0.1:58080/sign-in.html"
self.driver = forumDriver.driver
self.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()#查看、交流
python
import time
from selenium.webdriver import Keys
from selenium.webdriver.common.by import By
from common.ForumTest_WebDriver import forumDriver
class Forum_View:
driver = ""
url = ""
def __init__(self):
self.url = "http://127.0.0.1:58080/sign-in.html"
self.driver = forumDriver.driver
self.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").text
assert text=="个人介绍"
forumDriver.GetImages()
view=Forum_View()
# view.View()
(3)单独对该模块进行自动化测试
9.编写帖子删除模块的测试用例代码
(1)创建一个帖子删除类(自定义名为pop_test())继承Forum_WebDriver类,得到驱动driver
(2)根据帖子删除模块测试用例创建不同的方法
Pop()#删除
python
import time
from selenium.webdriver.common.by import By
from common.ForumTest_WebDriver import forumDriver
class Forum_Pop:
driver = ""
url = ""
def __init__(self):
self.url = "http://127.0.0.1:58080/sign-in.html"
self.driver = forumDriver.driver
self.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()#个人中心
python
import time
from selenium.webdriver import Keys
from selenium.webdriver.common.by import By
from common.ForumTest_WebDriver import forumDriver
class Forum_PersonalInformation:
driver = ""
url = ""
def __init__(self):
self.url = "http://127.0.0.1:58080/sign-in.html"
self.driver = forumDriver.driver
self.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").text
assert 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()#不正常退出
python
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 forumDriver
class Forum_Exit:
driver = ""
url = ""
def __init__(self):
self.url = "http://127.0.0.1:58080/sign-in.html"
self.driver = forumDriver.driver
self.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").text
assert text=='用户名不能为空'
text=self.driver.find_element(By.CSS_SELECTOR, "#signInForm > div.mb-2 > div > div").text
assert text=='密码不能为空'
time.sleep(0.5)
self.driver.quit()
exit=Forum_Exit()
# exit.Exit()
(3)单独对该模块进行自动化测试
12.整合代码,进行系统测试
将前面写的代码都放入main函数中运行。
python
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_test
if __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. 遗留问题
问题 | 预期结果 | 实际结果 | 遗留原因 |
---|---|---|---|
论坛注册用户名和账号 | 对其加以限制检测 | 仅做了不输入检测 | 测试时间紧张,留至下版本更新处理 |
论坛帖子的和查看次数评论数 | 实时显示 | 有较长延迟 | 测试时间紧张,留至下版本更新处理 |
论坛黑夜与白天模式 | 切换后长期保持 | 切换后某些操作会重回白天模式 | 测试时间紧张,留至下版本更新处理 |
部分扩展功能测试 | 抓紧实现 | 暂未实现 | 测试时间紧张,未能涉及全模块 |
总结
测试代码编写可能出现错误的原因:
隐式等待有时会改变代码执行顺序出现报错,可加入强制等待,确保页面加载完成,提高自动化的稳定性。