博客系统功能测试

主要测试内容

功能测试、界面测试、性能测试、易用性测试、安全测试、兼容性测试、弱网测试、安装卸载测试、压力测试...

测试方法及目的

利用selenium和python编写测试脚本,对博客系统进行的相关功能进行测试,找出该网址的潜在问题

测试思路讲解:本测试项目的规模比较小,仅需要对四个主要页面进行功能测试即可,因此本文直接从页面入手开始编写自动化测试脚本--即一个页面对应一个测试方法,不需要细分出多个功能进行单独测试。另外需要声明,本文使用的测试框架不够成熟,代码冗余繁多,仍有很多有待改进的地方,请各位看官老爷多多指教指教()

博客系统测试案例

功能测试


其他测试

注意:本文仅针对该网页进行功能测试,其他测试(如界面测试、性能测试等)暂不列入测试范围

测试板块 ---- 四大页面

登录页面

登录页面展示

前提条件--用户处于登录状态下,且当前打开的是博客详情页的链接。主要测试功能--1.检查页面元素,检查文章标题、发布时间、内容等是否正确展示。2.点击编辑按钮,看是否正常跳转至对应文章的编辑页,若为成功跳转检查按键是否异常,用户的网络是否通畅,并返回对应异常信息等。

博客列表页

博客列表页内容展示

前提条件 -- 用户已登陆账号,且已跳转至博客列表页面。主要测试功能--1.检查页面元素,检查用户头像、昵称、文章数、外部链接等信息是否展示错误等。

2.功能测试,点击外部链接,测试是否跳转至对应网站;点击查看全文看是否跳转至对应文章的详情页。

博客详情页

博客详情页展示
前提条件--用户处于登录状态下,且当前打开的是博客详情页的链接。主要测试功能--1.检查页面元素,检查文章标题、发布时间、内容等是否正确展示。2.点击编辑按钮,看是否正常跳转至对应文章的编辑页,若为成功跳转检查按键是否异常,用户的网络是否通畅,并返回对应异常信息等。

编辑页面

编辑页面展示

前提条件,检查用户通过何种方式打开编辑页面,若用户通过右上角写博客方式进入,则标记为发布新博客,若用户通过详情页点击编辑进入编辑页面则标记为修改博客内容。主要测试功能--元素检查,若用户以新发布博客方式进入本页则仅需检查文本框以及图上的相关功能是否能够正常使用即可,若用户以修改内容的方式进入本页则除了上述功能外仍需查看文章标题及内容是否和打开的文章一致。

自动化代码示例

python 复制代码
# 创建驱动对象 Utils
from selenium import webdriver

# 在这个文件中配置好通用的信息
class Driver:
    driver = ""
    # 构造函数
    def __init__(self):
        self.driver = webdriver.Chrome()
        # driver = webdriver.Chrome()
        # if driver is None:
        #     raise RuntimeError("无法启动 Chrome WebDriver!")

blogdriver = Driver()
python 复制代码
# BlogLogin 测试登录功能
from common.Utils import blogdriver
from selenium.webdriver.common.by import By
import time

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 ElementsCheckUp(self):
        text = self.driver.find_element(By.CSS_SELECTOR,'body > div.container-login > div > h3').text
        print(text)
        text = self.driver.find_element(By.CSS_SELECTOR, 'body > div.container-login > div > div:nth-child(2) > span').text
        print(text)
        text = self.driver.find_element(By.CSS_SELECTOR, 'body > div.container-login > div > div:nth-child(3) > span').text
        print(text)
        text = self.driver.find_element(By.CSS_SELECTOR, '#submit').text
        print(text)

    #成功登录测试
    def LoginSuccess(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(5)

        # 检查是否登录成功 -- by用户名
        self.driver.find_element(By.CSS_SELECTOR,'body > div.container > div.left > div > h3')

        # 注销账号恢复初始状态
        self.driver.find_element(By.CSS_SELECTOR,'body > div.nav > a:nth-child(6)').click()

    # 异常登录测试 -- 账号和密码为空
    def LoginFail001(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(3)
        alert = self.driver.switch_to.alert
        assert alert.text == "账号或密码不能为空"

        # 关闭弹窗
        self.driver.switch_to.alert.accept()

    # 异常登录测试 -- 正确账号和错误密码
    def LoginFail002(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('123')

        self.driver.find_element(By.CSS_SELECTOR,'#submit').click()

        # 检查是否登录失败
        time.sleep(3)
        alert = self.driver.switch_to.alert
        assert alert.text == "密码错误"

        # 关闭弹窗
        self.driver.switch_to.alert.accept()

    # 异常登录测试 -- 错误账号和正确密码
    def LoginFail003(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('zhanglisi')
        self.driver.find_element(By.CSS_SELECTOR,'#password').send_keys('123456')

        self.driver.find_element(By.CSS_SELECTOR,'#submit').click()

        # 检查是否登录失败
        time.sleep(3)
        alert = self.driver.switch_to.alert
        assert alert.text == "用户不存在"

        # 关闭弹窗
        self.driver.switch_to.alert.accept()

        # 异常登录测试 -- 错误账号和错误密码
    def LoginFail004(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('zhangsanlisi')
        self.driver.find_element(By.CSS_SELECTOR, '#password').send_keys('123')

        self.driver.find_element(By.CSS_SELECTOR, '#submit').click()

        # 检查是否登录失败
        time.sleep(3)
        alert = self.driver.switch_to.alert
        assert alert.text == "用户不存在"

        # 关闭弹窗
        self.driver.switch_to.alert.accept()
python 复制代码
# BlogList 测试博客列表页
from common.Utils import blogdriver
from selenium.webdriver.common.by import By
import time

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 UnLoginTest(self):
        # self.driver.get('http://8.137.19.140:9090/blog_login.html')
        time.sleep(5)
        elmtext:str = self.driver.find_element(By.CSS_SELECTOR, 'div.container-login  h3').text
        print(elmtext)
        assert elmtext == "登陆"

    def ElementCheckUpByLogin(self):
        time.sleep(3)
        # 清空文本框内容
        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(10)

        # 检查是否登录成功 -- by用户名
        print(self.driver.find_element(By.CSS_SELECTOR, 'div.left h3').text)

        # 获取外部链接
        print(self.driver.find_element(By.CSS_SELECTOR, 'div.left a').text)

        # 获取文章总数
        print(self.driver.find_element(By.CSS_SELECTOR, 'div.left div:nth-child(5) > span:nth-child(1)').text)

        # 获取文章分类
        print(self.driver.find_element(By.CSS_SELECTOR, 'div.left div:nth-child(5) > span:nth-child(2)').text)

        # 获取列表页信息 -- 第一篇文章标题
        print(self.driver.find_element(By.CSS_SELECTOR, 'div.right > div:nth-child(1) > div.title').text)

        # 第一篇文章发布的时间
        print(self.driver.find_element(By.CSS_SELECTOR, 'div.right > div:nth-child(1) > div.date').text)

        # 第一篇文章内容
        print(self.driver.find_element(By.CSS_SELECTOR, 'div.right > div:nth-child(1) > div.desc').text)

        # 查看原文信息
        print(self.driver.find_element(By.CSS_SELECTOR, 'div.right > div:nth-child(1) > a').text)


    def SeeMoreByLogin(self):
        # 检查用户是否在登录状态下
        time.sleep(2)
        print(self.driver.find_element(By.CSS_SELECTOR, 'div.left h3').text)
        # 点击查看全文
        self.driver.find_element(By.CSS_SELECTOR, 'div.right > div:nth-child(1) > a').click()
        time.sleep(2)

        # 检查是否跳转至详情页
        # print(self.driver.find_element(By.CSS_SELECTOR, 'div.right div.operating > button:nth-child(1)').text)
        # print(self.driver.find_element(By.CSS_SELECTOR, 'div.right div.operating > button:nth-child(2)').text)

        # 返回列表页,继续完成后续测试
        self.driver.back()


    def UpElementByLogin(self):
        # 点击主页

        self.driver.find_element(By.CSS_SELECTOR, 'div.nav > a:nth-child(4)').click()
        # 检查是否跳转至主页 -- 通过昵称和博客列表第一篇的标题
        time.sleep(2)
        print(self.driver.find_element(By.CSS_SELECTOR, 'div.left h3').text)
        print(self.driver.find_element(By.CSS_SELECTOR, 'div.right > div:nth-child(1) > div.title').text)

        time.sleep(2)
        # 点击写博客
        self.driver.find_element(By.CSS_SELECTOR, 'div.nav > a:nth-child(5)').click()
        # 检查是否跳转成功 -- 通过发布博客
        print(self.driver.find_element(By.CSS_SELECTOR, '#submit').get_attribute('value'))
        self.driver.back()

        time.sleep(2)
        self.driver.find_element(By.CSS_SELECTOR,'body > div.nav > a:nth-child(6)').click()

        # 检查是否注销成功
        print(self.driver.find_element(By.CSS_SELECTOR, 'div.container-login h3').text)
python 复制代码
# BlogDetail 测试博客详情页
from common.Utils import blogdriver
from selenium.webdriver.common.by import By
import time

class BlogDetail:
    url = ''
    driver = ''

    def __init__(self):
        self.url = "http://8.137.19.140:9090/blog_detail.html?blogId=91386"
        self.driver = blogdriver.driver
        self.driver.get(self.url)

    def UnLoginTest(self):
        # 未登录状态下打开博客详情页 -- 跳转至登录页面 --> 检测是否跳转至登录页
        time.sleep(3)
        print(self.driver.find_element(By.CSS_SELECTOR, 'div.container-login > div > h3').text)

    def ElementCheckUpByLogin(self):
        # 未登录 -- 跳转至登录界面
        time.sleep(3)
        # 清空文本框内容
        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(5)

        # 检查是否登录成功 -- by用户名
        print(self.driver.find_element(By.CSS_SELECTOR, 'body > div.container > div.left > div > h3').text)
        # 打开详情页
        self.driver.find_element(By.CSS_SELECTOR, 'div.right > div:nth-child(1) > a').click()
        time.sleep(2)
        # 检查是否跳转成功
        print(self.driver.find_element(By.CSS_SELECTOR, 'div.right div.operating > button:nth-child(1)').text)
        print(self.driver.find_element(By.CSS_SELECTOR, 'div.right div.operating > button:nth-child(2)').text)

        # 检查文章标题-时间-内容
        print(self.driver.find_element(By.CSS_SELECTOR, 'div.right > div > div.title').text)
        print(self.driver.find_element(By.CSS_SELECTOR, 'div.right > div > div.date').text)
        print(self.driver.find_element(By.CSS_SELECTOR, '#h2-u5728u8FD9u91CCu5199u4E0Bu4E00u7BC7u535Au5BA2').text)


    def FunctionTestByLogin(self):
        time.sleep(3)

        # 检查编辑按钮是否正常
        self.driver.find_element(By.CSS_SELECTOR, 'div.right div.operating > button:nth-child(1)').click()
        time.sleep(2)
        # 检查是否跳转成功
        print(self.driver.find_element(By.CSS_SELECTOR, '#submit').text)


        # 返回博客详情页面界面
        self.driver.back()

        time.sleep(3)
        # self.driver.find_element(By.CSS_SELECTOR, 'div.right > div > div.operating > button:nth-child(2)').click()
python 复制代码
from common.Utils import blogdriver
from selenium.webdriver.common.by import By
import time

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 EditTestFromUrl(self):
        time.sleep(5)
        UpText = self.driver.find_element(By.CSS_SELECTOR, '#submit').get_attribute('value')
        if UpText == '发布文章':
            print("当前正在编辑文章,进入方式为使用URL")
            self.driver.find_element(By.CSS_SELECTOR, '#title').send_keys("哈哈哈")

            self.driver.find_element(By.CSS_SELECTOR,
                                     '#submit').click()
        self.driver.quit()

项目Bug

bug描述:文章总数与实际总数不一致

bug2描述:

用户未登录状态下仍能编辑博客,且点击发布博客后内容丢失,未能正常跳转至登录页登录后发布博客

相关推荐
立秋678930 分钟前
用 Python 模拟下雨效果
开发语言·python·pygame
xiaohanbao0933 分钟前
day40 python图像数据与显存
python·深度学习·学习·算法·机器学习·图像
似是燕归来36 分钟前
STM32 HAL库函数学习 GPIO篇
stm32·单片机·学习
点云SLAM1 小时前
PyTorch中 torch.utils.data.DataLoader 的详细解析和读取点云数据示例
人工智能·pytorch·python·算法·计算机视觉·dataloader·3d深度学习
KENYCHEN奉孝1 小时前
Weather app using Django - Python
后端·python·django
安迪小宝1 小时前
11高可用与容错
python·celery
丁值心1 小时前
5.29打卡
开发语言·人工智能·python·机器学习·支持向量机
HakunamatataWang1 小时前
python 包管理工具uv
python·uv
我有一个魔盒1 小时前
python uv包管理器使用
开发语言·python·uv
TTBIGDATA2 小时前
Step9—Ambari Web UI 初始化安装 (Ambari3.0.0)
大数据·hadoop·python·ambari·bigtop·ttbigdata·janettr