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

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


一、项目背景

本次论坛系统自动化测试所用论坛系统需要在测试前进行部署,由论坛注册页、论坛登陆页、论坛首页、论坛创作页、个人中心页等所组成。成功注册并登录论坛即可查看自己已发布的帖子,也可以进行发布帖子操作,通过使用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. 遗留问题

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

总结

测试代码编写可能出现错误的原因:

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

相关推荐
jingfeng51423 分钟前
浅谈对linux进程池的理解
linux·运维·服务器
西阳未落43 分钟前
Linux(17)——Linux进程信号(下)
linux·运维·服务器
中等生1 小时前
Python的隐形枷锁:GIL如何"绑架"了你的多线程梦想
后端·python
电商数据girl1 小时前
关于私域电商网站,接入电商API数据接口示例
运维·开发语言·网络·python·json·php
数据库知识分享者小北1 小时前
阿里云DMS Data Copilot——高效智能的数据助手,助力企业实现数据驱动的未来
运维·阿里云·oracle·copilot
__Smile°2 小时前
基于 kubeadm 搭建 k8s 集群
linux·运维·docker·云原生·容器·kubernetes
Ly2020Wj2 小时前
pytorch入门3:使用pytorch进行多输出手写数据集模型预测
人工智能·pytorch·python
跨境卫士-小汪2 小时前
亚马逊采购风控突围:构建深度隐匿的环境安全体系
运维·服务器·安全·跨境电商·亚马逊
Bruce_Liuxiaowei2 小时前
NAS技术在县级融媒体中心的架构设计与安全运维浅析
运维·网络·安全·媒体