文章目录
- 目录
-
- [1. 项目背景](#1. 项目背景)
- [2. 项目简介](#2. 项目简介)
- [3. 测试工具](#3. 测试工具)
- [4. 测试用例](#4. 测试用例)
- [5. 功能测试](#5. 功能测试)
- [6. 性能测试](#6. 性能测试)
- [7. 弱网测试](#7. 弱网测试)
- [8. 自动化测试](#8. 自动化测试)
- [9. bug简述](#9. bug简述)
- [10. 测试结论](#10. 测试结论)
目录
- 项目背景
- 项目简介
- 测试工具
- 测试用例
- 功能测试
- 性能测试
- 弱网测试
- 自动化测试
- bug简述
- 测试结论
1. 项目背景
通过论坛系统,我们可以将自己的问题或者学习经验分享到上面,和他人讨论分享,从而共同进步。
2. 项目简介
论坛系统共分为以下几个页面:登录页面、注册页面、论坛首页、我的/他人文章详情页、帖子发布页、我的/他人帖子页面、个人中心页面。
登录页面:通过输入正确的账号和密码进行登录。
注册页面:按要求输入用户名、昵称、密码进行注册。
论坛首页:查看用户昵称、头像;查看首页发布的贴子并且可以跳转到帖子详情页;选择不同分类查看当前分类下的帖子;查看站内信,可以回复他人给自己发的私信;切换白天和夜间模式;搜索;可以点击发布按钮并跳转到帖子发布页面
我的文章详情页:查看作者/回复者头像昵称;点赞帖子;发布回复帖子
他人文章详情页:查看作者/回复者头像昵称;点赞帖子;发布回复帖子;给帖子作者发私信
帖子发布页:选择板块、输入标题和内容并点击发布按钮
我的帖子页面:可以查看头像、昵称、发帖数、邮箱、注册日期、发布的帖子并可以点击跳转到详情页、个人介绍
他人帖子页面:可以查看头像、昵称、发帖数、邮箱、注册日期、发布的帖子并可以点击跳转到详情页、个人介绍;可以给当前用户发私信
个人中心页面:可以修改头像、昵称、邮箱地址、电话号码、密码、个人简介
3. 测试工具
在进行性能测试时,我们会用到jmeter工具;在进行弱网测试时,我们会用到fiddler工具;在进行自动化测试时,我们会用到PyCharm以及selenium库来编写自动化脚本。
4. 测试用例

5. 功能测试
这里会展示部分功能测试的截图:
- 正常登录


- 异常登录


正常注册:

异常注册:



- 论坛首页登录状态


bug1:部分分类名称未显示

bug2:帖子数量显示不正确



bug3:在搜索框搜索后不会跳出搜索的内容
- 论坛首页未登录状态

- 我的帖子详情页面


- 他人帖子详情页面



- 正常发布帖子


bug4:帖子发布时间显示不正确
- 异常发布帖子


- 我的帖子页面

bug5:显示的发帖数和实际发帖数不一致
bug6:注册日期错误
- 他人帖子页面

- 个人中心页面


bug7:修改密码时和原来的密码相同也能修改成功




bug8:让密码取消掩码显示不成功
6. 性能测试








总结: 在较高的并发下,回复帖子接口、帖子详情页接口、论坛首页接口、点赞接口出现错误;且大部分接口响应时间较长。
7. 弱网测试




总结: 在弱网环境下,页面加载变慢,但不会错误展示;建议页面在加载缓慢时加上默认提示来使用户体验更加良好。
8. 自动化测试
python
# common/Utils.py
import datetime
import os.path
import sys
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
class Driver:
driver = ""
def __init__(self):
options = webdriver.ChromeOptions()
self.driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()),options=options)
self.driver.implicitly_wait(5)
def getScreenShot(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 = Driver()
python
# tests/ForumLogin.py
import time
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from common.Utils import ForumDriver
class ForumLogin:
driver = ""
url = ""
def __init__(self):
self.driver = ForumDriver.driver
self.url = "http://127.0.0.1:9580/sign-in.html"
self.driver.get(self.url)
def LoginSucTest(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("waves")
self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")
self.driver.find_element(By.CSS_SELECTOR,"#submit").click()
WebDriverWait(self.driver,3).until(EC.title_is("比特论坛"))
ForumDriver.getScreenShot()
def LoginFailTest(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("waves")
self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("1234")
self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
WebDriverWait(self.driver,3).until(EC.visibility_of_element_located((By.CSS_SELECTOR,"body > div.jq-toast-wrap.bottom-right > div")))
ForumDriver.getScreenShot()
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("wave")
self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")
self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
WebDriverWait(self.driver, 3).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "body > div.jq-toast-wrap.bottom-right > div")))
ForumDriver.getScreenShot()
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("wave")
self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("1234")
self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
WebDriverWait(self.driver, 3).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "body > div.jq-toast-wrap.bottom-right > div")))
ForumDriver.getScreenShot()
python
# tests/ForumRegister.py
import datetime
import time
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from common.Utils import ForumDriver
class ForumRegister:
driver = ""
url = ""
def __init__(self):
self.driver = ForumDriver.driver
self.url = "http://127.0.0.1:9580/sign-up.html"
self.driver.get(self.url)
def RegisterSucTest(self):
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(datetime.datetime.now().strftime("%Y%m%d%H%M%S"))
self.driver.find_element(By.CSS_SELECTOR, "#nickname").send_keys(datetime.datetime.now().strftime("%Y%m%d%H%M%S"))
self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")
self.driver.find_element(By.CSS_SELECTOR, "#passwordRepeat").send_keys("123456")
self.driver.find_element(By.CSS_SELECTOR,"#policy").click()
self.driver.find_element(By.CSS_SELECTOR,"#submit").click()
WebDriverWait(self.driver,3).until(EC.title_is("比特论坛 - 用户登录"))
ForumDriver.getScreenShot()
def RegisterFailTest(self):
# 输入被占用的用户名,正确的昵称、密码、确认密码,点击同意隐私政策,点击注册
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("waves")
self.driver.find_element(By.CSS_SELECTOR, "#nickname").send_keys("waves")
self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")
self.driver.find_element(By.CSS_SELECTOR, "#passwordRepeat").send_keys("123456")
self.driver.find_element(By.CSS_SELECTOR, "#policy").click()
self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
time.sleep(0.5)
ForumDriver.getScreenShot()
# 关闭警告
self.driver.find_element(By.CSS_SELECTOR,"body > div.jq-toast-wrap.bottom-right > div > span.close-jq-toast-single").click()
# 把勾选的同意隐私政策取消勾选
self.driver.find_element(By.CSS_SELECTOR, "#policy").click()
time.sleep(0.5)
# 输入未被占用的用户名,正确的昵称,密码和确认密码不相同,点击同意隐私政策,点击注册
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("waves123")
self.driver.find_element(By.CSS_SELECTOR, "#nickname").send_keys("waves123")
self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")
self.driver.find_element(By.CSS_SELECTOR, "#passwordRepeat").send_keys("1234")
self.driver.find_element(By.CSS_SELECTOR, "#policy").click()
self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
text1 = self.driver.find_element(By.CSS_SELECTOR,"#signUpForm > div > div:nth-child(5) > div > div").text
assert text1 == "请检查确认密码"
ForumDriver.getScreenShot()
# 把勾选的同意隐私政策取消勾选
self.driver.find_element(By.CSS_SELECTOR, "#policy").click()
time.sleep(0.5)
# 输入正确的昵称、密码,点击注册
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, "#nickname").send_keys("waves123")
self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")
self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
text2 = self.driver.find_element(By.CSS_SELECTOR, "#signUpForm > div > div:nth-child(2) > div").text
assert text2 == "用户名不能为空"
text3 = self.driver.find_element(By.CSS_SELECTOR, "#signUpForm > div > div:nth-child(5) > div > div").text
assert text3 == "请检查确认密码"
ForumDriver.getScreenShot()
python
# tests/ForumHomepage.py
import time
from selenium.webdriver.common.by import By
from common.Utils import ForumDriver
class ForumHomepage:
driver = ""
url = ""
def __init__(self):
self.driver = ForumDriver.driver
self.url = "http://127.0.0.1:9580/index.html"
self.driver.get(self.url)
def ForumHomepageByNotLogin(self):
title = self.driver.title
assert title == "比特论坛 - 用户登录"
ForumDriver.getScreenShot()
def ForumHomepageByLogin(self):
# 查看用户头像
self.driver.find_element(By.CSS_SELECTOR,"#index_nav_avatar")
# 查看用户昵称
# 把页面放大到全屏,不然没有显示出用户昵称就提取不了文本
self.driver.maximize_window()
nickname = self.driver.find_element(By.CSS_SELECTOR,"#index_nav_nickname").text
assert nickname == "waves"
# 查看首页发布的帖子
self.driver.find_element(By.CSS_SELECTOR,"#artical-items-body > div:nth-child(1)")
time.sleep(2)
ForumDriver.getScreenShot()
# 查看站内信,可以回复他人给自己发的私信
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()
self.driver.find_element(By.CSS_SELECTOR,"#index_div_message_list > div:nth-child(1) > div > div.col.text-truncate > a > span:nth-child(2)").click()
self.driver.find_element(By.CSS_SELECTOR,"#btn_index_message_reply").click()
self.driver.find_element(By.CSS_SELECTOR,"#index_message_reply_receive_content").send_keys("hello")
self.driver.find_element(By.CSS_SELECTOR,"#btn_index_send_message_reply").click()
self.driver.find_element(By.CSS_SELECTOR,"body > div.jq-toast-wrap.bottom-right > div")
ForumDriver.getScreenShot()
self.driver.find_element(By.CSS_SELECTOR,"#index_message_offcanvasEnd > div.offcanvas-header > button").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) > a.nav-link.px-0.hide-theme-dark > svg").click()
self.driver.find_element(By.CSS_SELECTOR,"#artical-items-body > div:nth-child(1)")
ForumDriver.getScreenShot()
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-light > svg").click()
self.driver.find_element(By.CSS_SELECTOR,"#artical-items-body > div:nth-child(1)")
ForumDriver.getScreenShot()
python
# tests/OthersForumDetail.py
import time
from selenium.webdriver.common.by import By
from common.Utils import ForumDriver
class OthersForumDetail:
driver = ""
url = ""
def __init__(self):
self.driver = ForumDriver.driver
self.url = "http://127.0.0.1:9580/index.html"
self.driver.get(self.url)
def OthersForumDetail(self):
# 选择不同分类查看当前分类下的帖子
self.driver.find_element(By.CSS_SELECTOR, "#topBoardList > li:nth-child(2) > a").click()
# 点击跳转到他人帖子详情页
self.driver.find_element(By.CSS_SELECTOR, "#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong").click()
# 点赞帖子
self.driver.find_element(By.CSS_SELECTOR, "#details_btn_like_count").click()
self.driver.find_element(By.CSS_SELECTOR,"body > div.jq-toast-wrap.bottom-right > div")
time.sleep(0.5)
ForumDriver.getScreenShot()
# 发布回复帖子
self.driver.find_element(By.CSS_SELECTOR,"#article_details_reply > div.editormd-toolbar > div > ul > li:nth-child(20) > a > i").click()
time.sleep(0.5)
self.driver.find_element(By.CSS_SELECTOR,"#details_btn_article_reply").click()
self.driver.find_element(By.CSS_SELECTOR,"body > div.jq-toast-wrap.bottom-right > div")
time.sleep(0.5)
ForumDriver.getScreenShot()
time.sleep(0.5)
# 给帖子作者发私信
self.driver.find_element(By.CSS_SELECTOR,"#btn_details_send_message").click()
self.driver.find_element(By.CSS_SELECTOR,"#index_message_receive_content").send_keys("hello")
self.driver.find_element(By.CSS_SELECTOR,"#btn_index_send_message").click()
self.driver.find_element(By.CSS_SELECTOR,"body > div.jq-toast-wrap.bottom-right > div")
time.sleep(0.5)
ForumDriver.getScreenShot()
# 查看作者/回复者头像昵称
self.driver.find_element(By.CSS_SELECTOR, "#details_reply_area > div:nth-child(1) > div.col-3.card > div > span")
self.driver.find_element(By.CSS_SELECTOR, "#details_reply_area > div:nth-child(1) > div.col-3.card > div > h3 > a")
self.driver.find_element(By.CSS_SELECTOR,"#article_details_author_avatar")
# 跳转到他人帖子页面
self.driver.find_element(By.CSS_SELECTOR, "#article_details_author_name").click()
# 查看头像
self.driver.find_element(By.CSS_SELECTOR,"#profile_avatar")
# 查看昵称
self.driver.find_element(By.CSS_SELECTOR, "#profile_nickname")
# 查看发帖数
self.driver.find_element(By.CSS_SELECTOR, "#bit-forum-content > div.page-header.d-print-none > div > div > div.col > div > div:nth-child(1)")
# 查看邮箱
self.driver.find_element(By.CSS_SELECTOR, "#bit-forum-content > div.page-header.d-print-none > div > div > div.col > div > div:nth-child(2)")
# 查看注册日期
self.driver.find_element(By.CSS_SELECTOR, "#bit-forum-content > div.page-header.d-print-none > div > div > div.col > div > div:nth-child(3)")
# 查看个人介绍
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 == "个人介绍"
# 给当前用户发私信
self.driver.find_element(By.CSS_SELECTOR, "#btn_profile_send_message").click()
self.driver.find_element(By.CSS_SELECTOR,"#index_message_receive_content").send_keys("hello")
self.driver.find_element(By.CSS_SELECTOR, "#btn_index_send_message").click()
self.driver.find_element(By.CSS_SELECTOR,"body > div.jq-toast-wrap.bottom-right > div")
time.sleep(1)
ForumDriver.getScreenShot()
# 查看发布的帖子并可以点击跳转到详情页
self.driver.find_element(By.CSS_SELECTOR,"#profile_article_body > li:nth-child(1) > div.card.timeline-event-card > div > div > div > div > div.text-truncate > a > strong").click()
self.driver.find_element(By.CSS_SELECTOR,"#bit-forum-content > div.page-header.d-print-none > div > div.row.g-2.align-items-center > div")
time.sleep(1)
ForumDriver.getScreenShot()
python
# tests/MyForum.py
import time
from selenium.webdriver.common.by import By
from common.Utils import ForumDriver
class MyForum:
driver = ""
url = ""
def __init__(self):
self.driver = ForumDriver.driver
self.url = "http://127.0.0.1:9580/index.html"
self.driver.get(self.url)
def MyForum(self):
# 进入我的帖子页面
self.driver.find_element(By.CSS_SELECTOR,"body > div.page > header.navbar.navbar-expand-md.navbar-light.d-print-none > div > div > div.nav-item.dropdown").click()
self.driver.find_element(By.CSS_SELECTOR,"#index_user_profile").click()
# 查看头像
self.driver.find_element(By.CSS_SELECTOR,"#profile_avatar")
# 查看昵称
self.driver.find_element(By.CSS_SELECTOR, "#profile_nickname")
# 查看发帖数
self.driver.find_element(By.CSS_SELECTOR, "#bit-forum-content > div.page-header.d-print-none > div > div > div.col > div > div:nth-child(1)")
# 查看邮箱
self.driver.find_element(By.CSS_SELECTOR, "#bit-forum-content > div.page-header.d-print-none > div > div > div.col > div > div:nth-child(2)")
# 查看注册日期
self.driver.find_element(By.CSS_SELECTOR, "#bit-forum-content > div.page-header.d-print-none > div > div > div.col > div > div:nth-child(3)")
# 查看个人介绍
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.getScreenShot()
# 查看发布的帖子并可以点击跳转到详情页
self.driver.find_element(By.CSS_SELECTOR, "#profile_article_body > li:nth-child(1) > div.card.timeline-event-card > div > div > div > div > div.text-truncate > a > strong").click()
# 点赞帖子
self.driver.find_element(By.CSS_SELECTOR, "#details_btn_like_count").click()
self.driver.find_element(By.CSS_SELECTOR,"body > div.jq-toast-wrap.bottom-right > div")
time.sleep(0.5)
ForumDriver.getScreenShot()
# 发布回复帖子
self.driver.find_element(By.CSS_SELECTOR, "#article_details_reply > div.editormd-toolbar > div > ul > li:nth-child(20) > a > i").click()
time.sleep(0.5)
self.driver.find_element(By.CSS_SELECTOR, "#details_btn_article_reply").click()
self.driver.find_element(By.CSS_SELECTOR,"body > div.jq-toast-wrap.bottom-right > div")
time.sleep(0.5)
ForumDriver.getScreenShot()
# 查看作者/回复者头像昵称
self.driver.find_element(By.CSS_SELECTOR, "#article_details_author_avatar")
self.driver.find_element(By.CSS_SELECTOR, "#article_details_author_name")
self.driver.find_element(By.CSS_SELECTOR, "#details_reply_area > div:nth-child(1) > div.col-3.card > div > span")
self.driver.find_element(By.CSS_SELECTOR, "#details_reply_area > div:nth-child(1) > div.col-3.card > div > h3 > a")
python
# tests/ForumEdit.py
import time
from selenium.webdriver.common.by import By
from common.Utils import ForumDriver
class ForumEdit:
driver = ""
url = ""
def __init__(self):
self.driver = ForumDriver.driver
self.url = "http://127.0.0.1:9580/index.html"
self.driver.get(self.url)
def ForumFailEdit(self):
# 点击发布按钮并跳转到帖子发布页面
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").click()
# 输入标题,点击发布按钮
self.driver.find_element(By.CSS_SELECTOR,"#article_post_title").clear()
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(39) > a > i").click()
self.driver.find_element(By.CSS_SELECTOR, "#article_post_submit").click()
self.driver.find_element(By.CSS_SELECTOR,"body > div.jq-toast-wrap.bottom-right > div")
time.sleep(0.5)
ForumDriver.getScreenShot()
# 输入内容,点击发布按钮
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(39) > a > i").click()
self.driver.find_element(By.CSS_SELECTOR,"#edit-article > div.editormd-toolbar > div > ul > li:nth-child(20) > a > i").click()
time.sleep(0.5)
self.driver.find_element(By.CSS_SELECTOR, "#article_post_submit").click()
self.driver.find_element(By.CSS_SELECTOR, "body > div.jq-toast-wrap.bottom-right > div")
time.sleep(0.5)
ForumDriver.getScreenShot()
# 输入标题和内容,不点击发布按钮
self.driver.find_element(By.CSS_SELECTOR, "#article_post_title").clear()
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(39) > a > i").click()
self.driver.find_element(By.CSS_SELECTOR,"#edit-article > div.editormd-toolbar > div > ul > li:nth-child(20) > a > i").click()
time.sleep(0.5)
text = self.driver.find_element(By.CSS_SELECTOR,"#bit-forum-content > div.page-header.d-print-none > div > div > div > h2").text
assert text == "发新贴"
ForumDriver.getScreenShot()
def ForumSucEdit(self):
# 点击发布按钮并跳转到帖子发布页面
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").click()
# 选择板块
self.driver.find_element(By.CSS_SELECTOR,"#article_post_borad > option:nth-child(2)").click()
# 输入标题
self.driver.find_element(By.CSS_SELECTOR, "#article_post_title").clear()
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(39) > a > i").click()
self.driver.find_element(By.CSS_SELECTOR,"#edit-article > div.editormd-toolbar > div > ul > li:nth-child(20) > a > i").click()
# 点击发布按钮
time.sleep(0.5)
self.driver.find_element(By.CSS_SELECTOR, "#article_post_submit").click()
self.driver.find_element(By.CSS_SELECTOR,"body > div.jq-toast-wrap.bottom-right > div")
title = self.driver.find_element(By.CSS_SELECTOR,"#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong").text
assert title == "自动化测试"
ForumDriver.getScreenShot()
python
# tests/ForumPersonalCenter.py
import datetime
import time
from selenium.webdriver.common.by import By
from common.Utils import ForumDriver
class ForumPersonalCenter:
driver = ""
url = ""
def __init__(self):
self.driver = ForumDriver.driver
self.url = "http://127.0.0.1:9580/index.html"
self.driver.get(self.url)
def FailModify(self):
# 跳转到个人中心
self.driver.find_element(By.CSS_SELECTOR,"body > div.page > header.navbar.navbar-expand-md.navbar-light.d-print-none > div > div > div.nav-item.dropdown > a").click()
self.driver.find_element(By.CSS_SELECTOR,"#index_user_settings").click()
# 和原来的一样
self.driver.find_element(By.CSS_SELECTOR,"#setting_submit_nickname").click()
self.driver.find_element(By.CSS_SELECTOR, "body > div.jq-toast-wrap.bottom-right > div:nth-child(1) > span.close-jq-toast-single").click()
self.driver.find_element(By.CSS_SELECTOR, "#setting_submit_email").click()
self.driver.find_element(By.CSS_SELECTOR, "body > div.jq-toast-wrap.bottom-right > div:nth-child(1) > span.close-jq-toast-single").click()
self.driver.find_element(By.CSS_SELECTOR, "#setting_submit_phoneNum").click()
self.driver.find_element(By.CSS_SELECTOR, "body > div.jq-toast-wrap.bottom-right > div")
self.driver.find_element(By.CSS_SELECTOR, "#settings_submit_remark").click()
self.driver.find_element(By.CSS_SELECTOR, "body > div.jq-toast-wrap.bottom-right > div")
time.sleep(0.5)
ForumDriver.getScreenShot()
# 原密码错误
self.driver.find_element(By.CSS_SELECTOR,"#settings_input_oldPassword").clear()
self.driver.find_element(By.CSS_SELECTOR, "#settings_input_oldPassword").send_keys("12345")
self.driver.find_element(By.CSS_SELECTOR, "#settings_input_newPassword").clear()
self.driver.find_element(By.CSS_SELECTOR, "#settings_input_newPassword").send_keys("1234")
self.driver.find_element(By.CSS_SELECTOR, "#settings_input_passwordRepeat").clear()
self.driver.find_element(By.CSS_SELECTOR, "#settings_input_passwordRepeat").send_keys("1234")
self.driver.find_element(By.CSS_SELECTOR, "#settings_submit_password").click()
self.driver.find_element(By.CSS_SELECTOR,"body > div.jq-toast-wrap.bottom-right > div")
time.sleep(1)
ForumDriver.getScreenShot()
# 新原密码和确认密码不同
self.driver.find_element(By.CSS_SELECTOR, "#settings_input_oldPassword").clear()
self.driver.find_element(By.CSS_SELECTOR, "#settings_input_oldPassword").send_keys("123456")
self.driver.find_element(By.CSS_SELECTOR, "#settings_input_newPassword").clear()
self.driver.find_element(By.CSS_SELECTOR, "#settings_input_newPassword").send_keys("1234")
self.driver.find_element(By.CSS_SELECTOR, "#settings_input_passwordRepeat").clear()
self.driver.find_element(By.CSS_SELECTOR, "#settings_input_passwordRepeat").send_keys("12345")
self.driver.find_element(By.CSS_SELECTOR, "#settings_submit_password").click()
self.driver.find_element(By.CSS_SELECTOR, "body > div.jq-toast-wrap.bottom-right > div")
time.sleep(1)
ForumDriver.getScreenShot()
# 只填写正确的原密码
self.driver.find_element(By.CSS_SELECTOR, "#settings_input_oldPassword").clear()
self.driver.find_element(By.CSS_SELECTOR, "#settings_input_oldPassword").send_keys("123456")
self.driver.find_element(By.CSS_SELECTOR, "#settings_input_newPassword").clear()
self.driver.find_element(By.CSS_SELECTOR, "#settings_input_passwordRepeat").clear()
self.driver.find_element(By.CSS_SELECTOR, "#settings_submit_password").click()
self.driver.find_element(By.CSS_SELECTOR, "body > div.jq-toast-wrap.bottom-right > div")
time.sleep(0.5)
ForumDriver.getScreenShot()
# 只填写正确的新原密码
self.driver.find_element(By.CSS_SELECTOR, "#settings_input_oldPassword").clear()
self.driver.find_element(By.CSS_SELECTOR, "#settings_input_newPassword").clear()
self.driver.find_element(By.CSS_SELECTOR, "#settings_input_newPassword").send_keys("1234")
self.driver.find_element(By.CSS_SELECTOR, "#settings_input_passwordRepeat").clear()
self.driver.find_element(By.CSS_SELECTOR, "#settings_submit_password").click()
self.driver.find_element(By.CSS_SELECTOR, "body > div.jq-toast-wrap.bottom-right > div")
time.sleep(1)
ForumDriver.getScreenShot()
# 只填写正确的确认密码
self.driver.find_element(By.CSS_SELECTOR, "#settings_input_oldPassword").clear()
self.driver.find_element(By.CSS_SELECTOR, "#settings_input_newPassword").clear()
self.driver.find_element(By.CSS_SELECTOR, "#settings_input_passwordRepeat").clear()
self.driver.find_element(By.CSS_SELECTOR, "#settings_input_passwordRepeat").send_keys("1234")
self.driver.find_element(By.CSS_SELECTOR, "#settings_submit_password").click()
self.driver.find_element(By.CSS_SELECTOR, "body > div.jq-toast-wrap.bottom-right > div")
time.sleep(0.5)
ForumDriver.getScreenShot()
def SucModify(self):
# 跳转到个人中心
self.driver.find_element(By.CSS_SELECTOR,"body > div.page > header.navbar.navbar-expand-md.navbar-light.d-print-none > div > div > div.nav-item.dropdown > a").click()
self.driver.find_element(By.CSS_SELECTOR, "#index_user_settings").click()
# 修改邮箱地址
self.driver.find_element(By.CSS_SELECTOR,"#setting_input_email").clear()
self.driver.find_element(By.CSS_SELECTOR, "#setting_input_email").send_keys(datetime.datetime.now().strftime("%Y%m%d%H%M%S"))
self.driver.find_element(By.CSS_SELECTOR, "#setting_submit_email").click()
self.driver.find_element(By.CSS_SELECTOR,"body > div.jq-toast-wrap.bottom-right > div")
time.sleep(1)
ForumDriver.getScreenShot()
# 修改电话号码
self.driver.find_element(By.CSS_SELECTOR, "#setting_input_phoneNum").clear()
self.driver.find_element(By.CSS_SELECTOR, "#setting_input_phoneNum").send_keys(datetime.datetime.now().strftime("%Y%m%d%H%M%S"))
self.driver.find_element(By.CSS_SELECTOR, "#setting_submit_phoneNum").click()
self.driver.find_element(By.CSS_SELECTOR, "body > div.jq-toast-wrap.bottom-right > div")
time.sleep(0.5)
ForumDriver.getScreenShot()
# 修改个人简介
self.driver.find_element(By.CSS_SELECTOR, "#settings_textarea_remark").clear()
self.driver.find_element(By.CSS_SELECTOR, "#settings_textarea_remark").send_keys(datetime.datetime.now().strftime("%Y%m%d%H%M%S"))
self.driver.find_element(By.CSS_SELECTOR, "#settings_submit_remark").click()
self.driver.find_element(By.CSS_SELECTOR, "body > div.jq-toast-wrap.bottom-right > div")
time.sleep(0.5)
ForumDriver.getScreenShot()
python
# tests/RunTest.py
from common.Utils import ForumDriver
from tests import ForumLogin, ForumRegister, ForumHomepage, OthersForumDetail, MyForum, ForumEdit, ForumPersonalCenter
if __name__ == "__main__":
ForumRegister.ForumRegister().RegisterFailTest()
ForumRegister.ForumRegister().RegisterSucTest()
ForumLogin.ForumLogin().LoginFailTest()
ForumHomepage.ForumHomepage().ForumHomepageByNotLogin()
ForumLogin.ForumLogin().LoginSucTest()
ForumHomepage.ForumHomepage().ForumHomepageByLogin()
OthersForumDetail.OthersForumDetail().OthersForumDetail()
MyForum.MyForum().MyForum()
ForumEdit.ForumEdit().ForumFailEdit()
ForumEdit.ForumEdit().ForumSucEdit()
ForumPersonalCenter.ForumPersonalCenter().FailModify()
ForumPersonalCenter.ForumPersonalCenter().SucModify()
ForumDriver.driver.quit()
9. bug简述
bug1:部分分类名称未显示

bug2:帖子数量显示不正确

bug3:在搜索框搜索后不会跳出搜索的内容

bug4:帖子发布时间显示不正确

bug5:显示的发帖数和实际发帖数不一致
bug6:注册日期错误

bug7:个人中心页面修改密码时和原来的密码相同也能修改成功
bug8:个人中心页面让密码取消掩码显示不成功
10. 测试结论
通过对论坛系统的测试,测试出论坛系统在功能方面还存在8个bug需要修改;性能方面在20个线程同时不断向系统各接口发生请求时,部分接口会出现异常;在弱网环境下,页面加载变慢,但不会错误展示,建议页面在加载缓慢时加上默认提示来使用户体验更加良好;界面较为美观;布局清晰,用户易上手;可以兼容不同浏览器和不同版本;在输入密码时有掩码行为,可以很好的保护用户隐私。