博客系统全面测试报告详解

文章目录

  • 目录
  • 1. 项目背景
  • 2. 项目简介
  • 3. 测试工具
  • 4. 测试用例
  • 5. 功能测试
  • 6. 性能测试
  • 7. 弱网测试
  • 8. 自动化测试
  • 9. bug简述
  • 10. 测试结论
  • 目录

  • 项目背景
  • 项目简介
  • 测试工具
  • 测试用例
  • 功能测试
  • 性能测试
  • 弱网测试
  • 自动化测试
  • bug简述
  • 测试结论
  • 1. 项目背景

    为了将平时自己写的笔记、知识点进行记录和保存,从而编写了一个个人博客系统,这样就可以将个人笔记保存在网上,便于随时进行查看和复习。

    2. 项目简介

    博客系统共分为四个页面:博客登录页、博客列表页、博客详情页、博客编辑页。

    在博客登录页,可以通过输入正确的账号和密码进行登录。

    在博客列表页,我们可以查看用户信息和发布的博客。

    在博客详情页,我们可以查看博客标题、博客发布时间、博客内容、编辑按钮、删除按钮。

    在博客编辑页,我们可以通过填写标题和内容并点击发布按钮来发布博客。

    3. 测试工具

    在进行性能测试时,我们会用到jmeter工具;在进行弱网测试时,我们会用到fiddler工具;在进行自动化测试时,我们会用到PyCharm以及selenium库来编写自动化脚本。

    4. 测试用例

    测试用例

    5. 功能测试

    错误密码

    错误账号

    博客列表页

    博客详情页

    博客编辑页

    6. 性能测试

    性能测试

    性能测试报告(1)

    性能测试报告(2)

    性能测试报告(3)

    性能测试报告(4)

    性能测试报告(5)

    7. 弱网测试

    弱网测试

    在弱网情况下,博客列表页加载会变慢,先加载出用户信息,再加载出博客列表,但页面并不会出现错误。

    弱网下的博客列表页(1)

    弱网下的博客列表页(2)

    8. 自动化测试

    自动化测试

    # 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(2)
        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)
    
    BlogDriver = Driver()
    
    # tests/BlogLogin.py
    
    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 BlogDriver
    
    
    class BlogLogin:
        url = ""
        driver = ""
        def __init__(self):
            self.url = "http://8.137.19.140:9090/blog_login.html"
            self.driver = BlogDriver.driver
            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("lisi")
            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("博客列表页"))
            BlogDriver.getScreenShot()
            self.driver.back()
    
        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("lisi")
            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.alert_is_present())
            self.driver.switch_to.alert.accept()
            BlogDriver.getScreenShot()
    
            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("li")
            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.alert_is_present())
            self.driver.switch_to.alert.accept()
            BlogDriver.getScreenShot()
    
            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("li")
            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.alert_is_present())
            self.driver.switch_to.alert.accept()
            BlogDriver.getScreenShot()
    
    # tests/BlogList.py
    
    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 BlogDriver
    
    
    class BlogList:
        url = ""
        driver = ""
        def __init__(self):
            self.url = "http://8.137.19.140:9090/blog_list.html"
            self.driver = BlogDriver.driver
            self.driver.get(self.url)
    
        def ListTestByLogin(self):
            # 检查头像是否存在
            self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.left > div > img")
            # 检查昵称是否存在
            self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.left > div > h3")
            # 检查文章数量是否存在
            self.driver.find_element(By.CSS_SELECTOR, "body > div.container > div.left > div > div:nth-child(5) > span:nth-child(1)")
            # 检查分类数量是否存在
            self.driver.find_element(By.CSS_SELECTOR, "body > div.container > div.left > div > div:nth-child(5) > span:nth-child(2)")
            # 检查博客标题是否存在
            self.driver.find_element(By.CSS_SELECTOR, "body > div.container > div.right > div > div.title")
            # 检查博客发布时间是否存在
            self.driver.find_element(By.CSS_SELECTOR, "body > div.container > div.right > div > div.date")
            # 检查博客内容是否存在
            self.driver.find_element(By.CSS_SELECTOR, "body > div.container > div.right > div > div.desc")
            # 检查查看全文按钮是否存在
            self.driver.find_element(By.CSS_SELECTOR, "body > div.container > div.right > div > a")
    
            BlogDriver.getScreenShot()
    
        def ListTestByNotLogin(self):
            WebDriverWait(self.driver,3).until(EC.title_is("博客登陆页"))
            BlogDriver.getScreenShot()
    
    # tests/BlogDetail.py
    
    from common.Utils import BlogDriver
    
    
    class BlogDetail:
        url = ""
        driver = ""
        def __init__(self):
            self.url = "http://8.137.19.140:9090/blog_detail.html?blogId=46533"
            self.driver = BlogDriver.driver
            self.driver.get(self.url)
    
        def DetailTestByLogin(self):
            # 检查博客标题是否存在
            self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div > div.title")
            # 检查博客发表时间是否存在
            self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div > div.date")
            # 检查博客内容是否存在
            self.driver.find_element(By.CSS_SELECTOR,"#h2-u5728u8FD9u91CCu5199u4E0Bu4E00u7BC7u535Au5BA2")
            # 检查博客编辑按钮是否存在
            self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div > div.operating > button:nth-child(1)")
            # 检查博客删除按钮是否存在
            self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div > div.operating > button:nth-child(2)")
    
            BlogDriver.getScreenShot()
    
        def DetailTestByNotLogin(self):
            WebDriverWait(self.driver,3).until(EC.title_is("博客登陆页"))
            BlogDriver.getScreenShot()
    
    # tests/BlogEdit.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 BlogDriver
    
    
    class BlogEdit:
        url = ""
        driver = ""
        def __init__(self):
            self.url = "http://8.137.19.140:9090/blog_edit.html"
            self.driver = BlogDriver.driver
            self.driver.get(self.url)
    
        def EditSucTestByLogin(self):
            self.driver.get("http://8.137.19.140:9090/blog_list.html")
            # 计算博客数量
            elementsbegin = self.driver.find_elements(By.CSS_SELECTOR,"body > div.container > div.right > div")
            countbegin = len(elementsbegin)
    
            # 返回博客编辑页
            self.driver.back()
    
            # 清空标题
            self.driver.find_element(By.CSS_SELECTOR,"#title").clear()
            # 填写标题
            self.driver.find_element(By.CSS_SELECTOR,"#title").send_keys("自动化测试"+datetime.datetime.now().strftime("%Y-%m-%d-%H%M%S"))
            # 清空内容
            self.driver.find_element(By.CSS_SELECTOR,"#editor > div.editormd-toolbar > div > ul > li:nth-child(39) > a > i").click()
            # 填写内容
            self.driver.find_element(By.CSS_SELECTOR,"#editor > div.editormd-toolbar > div > ul > li:nth-child(20) > a > i").click()
            # 点击发布按钮
            self.driver.find_element(By.CSS_SELECTOR,"#submit").click()
    
            # 计算博客数量
            elementsend = self.driver.find_elements(By.CSS_SELECTOR, "body > div.container > div.right > div")
            countend = len(elementsend)
    
            assert countbegin == countend - 1
            BlogDriver.getScreenShot()
    
            # 返回博客编辑页
            self.driver.back()
    
        def EditFailTestByLogin(self):
            # 不写标题
            # 清空标题
            self.driver.find_element(By.CSS_SELECTOR, "#title").clear()
            # 清空内容
            self.driver.find_element(By.CSS_SELECTOR,"#editor > div.editormd-toolbar > div > ul > li:nth-child(39) > a > i").click()
            # 填写内容
            self.driver.find_element(By.CSS_SELECTOR,"#editor > div.editormd-toolbar > div > ul > li:nth-child(20) > a > i").click()
            # 点击发布按钮
            self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
            # 出现弹窗,点击确定关闭弹窗
            WebDriverWait(self.driver,3).until(EC.alert_is_present())
            self.driver.switch_to.alert.accept()
            # 屏幕截图
            BlogDriver.getScreenShot()
    
            # 不写内容
            # 清空内容
            self.driver.find_element(By.CSS_SELECTOR,"#editor > div.editormd-toolbar > div > ul > li:nth-child(39) > a > i").click()
            # 清空标题
            self.driver.find_element(By.CSS_SELECTOR, "#title").clear()
            # 填写标题
            self.driver.find_element(By.CSS_SELECTOR, "#title").send_keys("自动化测试" + datetime.datetime.now().strftime("%Y-%m-%d-%H%M%S"))
            # 点击发布按钮
            time.sleep(0.5)
            self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
            # 出现弹窗,点击确定关闭弹窗
            WebDriverWait(self.driver, 3).until(EC.alert_is_present())
            self.driver.switch_to.alert.accept()
            # 屏幕截图
            BlogDriver.getScreenShot()
    
            # 不点击发布按钮
            # 清空标题
            self.driver.find_element(By.CSS_SELECTOR, "#title").clear()
            # 填写标题
            self.driver.find_element(By.CSS_SELECTOR, "#title").send_keys("自动化测试" + datetime.datetime.now().strftime("%Y-%m-%d-%H%M%S"))
            # 清空内容
            self.driver.find_element(By.CSS_SELECTOR,"#editor > div.editormd-toolbar > div > ul > li:nth-child(39) > a > i").click()
            # 填写内容
            self.driver.find_element(By.CSS_SELECTOR,"#editor > div.editormd-toolbar > div > ul > li:nth-child(20) > a > i").click()
            # 检查是否还在当前页面
            title = self.driver.title
            assert title == "博客编辑页"
            # 屏幕截图
            BlogDriver.getScreenShot()
    
        def EditTestByNotLogin(self):
            # 清空标题
            self.driver.find_element(By.CSS_SELECTOR, "#title").clear()
            # 填写标题
            self.driver.find_element(By.CSS_SELECTOR, "#title").send_keys("自动化测试" + datetime.datetime.now().strftime("%Y-%m-%d-%H%M%S"))
            # 清空内容
            self.driver.find_element(By.CSS_SELECTOR,"#editor > div.editormd-toolbar > div > ul > li:nth-child(39) > a > i").click()
            # 填写内容
            self.driver.find_element(By.CSS_SELECTOR,"#editor > div.editormd-toolbar > div > ul > li:nth-child(20) > a > i").click()
            # 点击发布按钮
            self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
            # 检查是否返回博客登陆页
            WebDriverWait(self.driver,3).until(EC.title_is("博客登陆页"))
    
    # tests/RunTest.py
    
    from common.Utils import BlogDriver
    from tests import BlogLogin, BlogList, BlogDetail, BlogEdit
    
    if __name__ == "__main__":
        # 未登录状态
        BlogLogin.BlogLogin().LoginFailTest()
        BlogList.BlogList().ListTestByNotLogin()
        BlogDetail.BlogDetail().DetailTestByNotLogin()
        BlogEdit.BlogEdit().EditTestByNotLogin()
        # 登录状态
        BlogLogin.BlogLogin().LoginSucTest()
        BlogList.BlogList().ListTestByLogin()
        BlogDetail.BlogDetail().DetailTestByLogin()
        BlogEdit.BlogEdit().EditFailTestByLogin()
        BlogEdit.BlogEdit().EditSucTestByLogin()
        BlogDriver.driver.quit()
    

    9. bug简述

    在功能测试时发现博客列表页的文章数量显示是一个固定值,不会随着博客数量的变化而变化。

    bug

    10. 测试结论

    通过对博客系统进行测试,可以得出博客系统功能方面存在一个bug;在性能方面也可以达到标准,在并发较多时不会出现异常,可靠性较好,响应时间在正常范围内,吞吐量可以达标;在弱网状态下,页面也不会发生错误;界面美观;用户使用简单易上手;可以兼容不同浏览器;在输入密码时有掩码行为,可以很好的保护用户隐私。

    作者:waves浪游

    物联沃分享整理
    物联沃-IOTWORD物联网 » 博客系统全面测试报告详解

    发表回复