当前位置: 首页 > news >正文

【论坛系统自动化功能测试报告】

论坛系统自动化功能测试报告

  • 一、项目背景
  • 二、测试内容
    • (一)测试用例
    • (二)测试账号
    • (三)使用Selenium进行Web自动化测试
      • 1.环境搭建
      • 2.创建浏览器驱动对象和截图功能
      • 3.编写论坛注册模块的测试用例代码
      • 4.编写论坛登陆模块的测试用例代码
      • 5.编写论坛首页模块的测试用例代码
      • 6.编写论坛创作模块的测试用例代码
      • 7.编写论坛评论模块的测试用例代码
      • 8.编写论坛交流与论坛查看模块的测试用例代码
      • 9.编写帖子删除模块的测试用例代码
      • 10.编写个人中心模块的测试用例代码
      • 11.编写论坛账号退出模块的测试用例代码
      • 12.整合代码,进行系统测试
  • (三)自动化测试总结
    • 1.自动化测试覆盖模块
    • 2.自动化测试用例数量
    • 3. 自动化测试代码展示
    • 4.自动化测试部分截图
    • 5. 自动化测试结果
    • 6. 测试评估
    • 7. 遗留问题
  • 总结


一、项目背景

本次论坛系统自动化测试所用论坛系统需要在测试前进行部署,由论坛注册页、论坛登陆页、论坛首页、论坛创作页、个人中心页等所组成。成功注册并登录论坛即可查看自己已发布的帖子,也可以进行发布帖子操作,通过使用Selenium定位web元素、对获取到的元素进行操作等,对论坛系统进行测试,测试的核心内容包括论坛注册、论坛登陆、论坛首页展示、论坛创作、帖子修改、帖子查看与分类、帖子删除、论坛交流、论坛个人信息查看与修改、论坛账号退出等功能。同时该论坛系统还可以实现记录帖子发布日期、时间、查看次数、评论数、点赞数等信息。


二、测试内容

注:测试的内容都是个人完成的,所以就不写需求文档和测试安排了。

(一)测试用例

设计测试用例方法一般从以下几个方面设计:

功能测试、界面测试、性能测试、易用性测试、安全性测试、兼容性测试等六个方面进行设计,但是个人博客系统是一个web网站,主要是针对核心功能、界面测试、安全性测试、兼容性测试进行测试,编写的测试用例如下:

在这里插入图片描述
其中安全性测试和界面测试需要人工测试,就不过多涉及了,
本报告主要对功能模块进行自动化测试。

(二)测试账号

账号用户名密码
账号1zhangsan123456
账号2qweqwe

(三)使用Selenium进行Web自动化测试

1.环境搭建

安装与浏览器名称和版本对应的webdrivermanager。
本次测试使用的驱动版本如下:

驱动版本
Edge浏览器138.0.3351.121 (正式版本) (64 位)
selenium4.0.0
webdriver-manager4.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. 遗留问题

问题预期结果实际结果遗留原因
论坛注册用户名和账号对其加以限制检测仅做了不输入检测测试时间紧张,留至下版本更新处理
论坛帖子的和查看次数评论数实时显示有较长延迟测试时间紧张,留至下版本更新处理
论坛黑夜与白天模式切换后长期保持切换后某些操作会重回白天模式测试时间紧张,留至下版本更新处理
部分扩展功能测试抓紧实现暂未实现测试时间紧张,未能涉及全模块

总结

测试代码编写可能出现错误的原因:
隐式等待有时会改变代码执行顺序出现报错,可加入强制等待,确保页面加载完成,提高自动化的稳定性。

http://www.lryc.cn/news/612996.html

相关文章:

  • 动手学深度学习(pytorch版):第一节——引言
  • 具身智能机器人 - Reachy Mini
  • MyCAT实战环节
  • 考研复习-计算机组成原理-第三章-存储系统
  • 微服务平台需求-部署一体化文档V1.0
  • cv2.threshold cv2.morphologyEx
  • Ubuntu 25.04 安装 pyenv 并配置多个 python 版本
  • Java并发与数据库锁机制:悲观锁、乐观锁、隐式锁与显式锁
  • 构建一个简洁优雅的 PHP 参数验证器 —— php-schema-validator
  • 金仓KingbaseES逻辑架构,与Oracle/MySQL对比
  • Python实现点云随机一致性(RANSAC)配准——粗配准
  • (Python)Python爬虫入门教程:从零开始学习网页抓取(爬虫教学)(Python教学)
  • 利用vue.js2X写前端搜索页面,express写后端API接口展现搜索数据
  • python数据结构与算法(基础)
  • DrissionPage自动化:高效Web操作新选择
  • 怎么在本地引入字体
  • 深入解析嵌套事务:原理与应用
  • 基于langchain的两个实际应用:[MCP多服务器聊天系统]和[解析PDF文档的RAG问答]
  • HTTP 协议升级(HTTP Upgrade)机制
  • 自动驾驶控制算法——滑模控制(SMC)原理与建模
  • TCP 如何保证可靠性
  • FluentUI-main的详解
  • 多账号管理方案:解析一款免Root的App分身工具
  • B-树与B+树
  • 动力电池点焊机:效率质量双提升,驱动新能源制造升级
  • Dify 从入门到精通(第 20/100 篇):Dify 的自动化测试与 CI/CD
  • Oracle exp imp expdp impdp 命令详解
  • PCB制造中压接孔、插接孔、沉头孔、台阶孔的区别及生产流程
  • 《C语言》函数练习题--1
  • 基于大数据的美食视频播放数据可视化系统 Python+Django+Vue.js