web博客系统的自动化测试

目录

  • 前言
  • 测试用例
  • 编写自动化脚本
    • 测试准备
    • 博客登录页相关测试用例
      • 登陆成功
      • 登录失败
    • 博客首页相关测试用例
      • 登陆成功
      • 登录失败
    • 博客详情页相关测试用例
      • 登录成功
      • 登录失败
    • 博客编辑页相关测试用例
      • 登陆成功
      • 登录失败
  • 编写测试文档
    • 测试类型内容

前言

本次测试是运用个人写的一个博客系统进行自动化测试。博客包含登录页,博客首页,博客详情页,博客编辑页。那么我们就进行以上页面进行自动化测试。这里用Edge浏览器进行测试

测试用例

我们设计测试用例的时候,一般都是用思维导图/脑图来进行列表,尽量思维多一些散发,用最少得测试用例覆盖的相对全面。
在这里插入图片描述

编写自动化脚本

我们可以根据上述的测试用例进行自动化脚本的编写,我们需要用到pycharm软件,并且要根据页面进行分类,来保证代码的清晰性和可读性。

测试准备

我们对web页面进行测试的时候,需要创建浏览器对象,然后请求url对页面进行访问,所以我们需要一个特殊的类就是until.py来做一些准备工作。

import datetime
import os.path

from selenium import webdriver
#因为我用的是Edge浏览器,所以要用edge的service
from selenium.webdriver.edge.service import Service


class Diver:
    diver=""
    def __init__(self):
        options=webdriver.EdgeOptions()
        self.diver=webdriver.Edge(service=Service(verbose = True))
    def getScreamShot(self):
        #屏幕截图
        dirname=datetime.datetime.now().strftime("%Y-%m-%d")
        if not os.path.exists("../images/"+dirname):
            os.mkdir("../images/"+dirname)
        #有路径
        filename=datetime.datetime.now().strftime("%Y-%m-%d-%H:%M:%S")
        self.driver.save_screenshot("../images/"+dirname+"/"+filename)

BlogDriver=Diver()

Edge其他的web使用方法请查阅:https://learn.microsoft.com/zh-cn/microsoft-edge/webdriver-chromium/?tabs=python

博客登录页相关测试用例

登录页的测试我们是根据登录成功和登录失败的区分的。

登陆成功

测试登录成功的流程:我们需要①先获取页面的元素(用户名框,密码框,登录按钮);②获取元素输入成功登录的密码和用户名,因为我们③登陆成功后首页会有用户名显示,我们可以用这来判断是否登录成功。④退出页面


from selenium.webdriver.common.by import By
from common.until import  BlogDriver

class BlogLogin:
    driver=""
    url=""
    def __init__(self):
        self.driver=BlogDriver.diver
        self.url="http://8.137.19.140:9090/blog_login.html"
        self.driver.get(self.url)
        self.driver.implicitly_wait(1)
    def LoginSucTest(self):
        #捕获页面元素,输入正确的用户名密码 zhangsan 123456
        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()
        #登录成功后,能找到用户昵称,说明登录成功
        autul=self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.left > div > h3")
        if  autul==None:
            print("登录不一致,失败")
            return
        self.driver.quit()

login=BlogLogin().LoginSucTest()

登录失败

登录失败就很多种情况了,比如说用户名不对,密码对,用户名对,密码不对,密码和用户名都不用,我们可以用其中一种测试就可以。并且通过手动输入,我们会发现他会出现弹窗!所以我们要处理弹窗
在这里插入图片描述
所以我们在登录页如果出现弹窗,那么证明登录失败了,我们只需要解决弹窗就可以了。

from time import sleep

from selenium.webdriver.common.by import By
from common.until import  BlogDriver

class BlogLogin:
    driver=""
    url=""
    def __init__(self):
        self.driver=BlogDriver.diver
        self.url="http://8.137.19.140:9090/blog_login.html"
        self.driver.get(self.url)
        self.driver.implicitly_wait(1)
    def LoginSucTest(self):
        #捕获页面元素,输入正确的用户名密码 zhangsan 123456
        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()
        #登录成功后,能找到用户昵称,说明登录成功
        autul=self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.left > div > h3")
        if  autul==None:
            print("登录不一致,失败")
            return
        self.driver.quit()


    def LoginFailTest(self):
        #捕获页面元素,输入正确的用户名,错误的密码 zhangsan 1234567
        self.driver.find_element(By.CSS_SELECTOR,"#username").send_keys("zhangsan")
        self.driver.find_element(By.CSS_SELECTOR,"#password").send_keys("1234567")#密码不对
        self.driver.find_element(By.CSS_SELECTOR,"#submit").click()

        #存在弹窗证明登录失败,处理弹窗
        sleep(2)#这里必须休眠,是因为处理速度太快了,会造成他找不到
        alert=self.driver.switch_to.alert
        alert.accept()
        self.driver.quit()
login=BlogLogin().LoginFailTest()

博客首页相关测试用例

对博客首页的测试,我们要分为登录成功后的测试和登录失败的测试。

登陆成功

我们要测试登录成功情况下的,所以我们就需要让用户先登录成功,这个时候我们可以用这个形式。

#runTest.py
from time import sleep
from common.until import BlogDriver
from test import Bloglogin
from test import BlogList

if __name__=="__main__":
    Bloglogin.BlogLogin().LoginSucTest()
    sleep(2)
    #登录成功之后,测试列表
    BlogList.BlogList().ListTestByLogin()
    sleep(2)
    #统一退出
    BlogDriver.diver.quit()

我们测试用例中需要测试他是否存在,所以直接检查是否存在即可,如果不存在会报错!

#博客首页测试
from selenium.webdriver.common.by import By

from common.until import BlogDriver


class BlogList:
    driver=""
    url=""
    def __init__(self):
        self.driver=BlogDriver.diver
        self.url="http://8.137.19.140:9090/blog_list.html"
        self.driver.get(self.url)
    def ListTestByLogin(self):
        #测试首页博客列表中的标题存在
        self.driver.find_element(By.CSS_SELECTOR, "body > div.container > div.right > div:nth-child(1) > div.title")
        #测试首页博客列表中的内容存在
        self.driver.find_element(By.CSS_SELECTOR, "body > div.container > div.right > div:nth-child(1) > div.desc")
        #测试首页博客列表中的查看存在
        self.driver.find_element(By.CSS_SELECTOR, "body > div.container > div.right > div:nth-child(1) > a")
        #测试首页的用户名是否存在
        self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.left > div > h3")

bloglist=BlogList().ListTestByLogin()

登录失败

因为登录失败的情况下,我们会出现弹窗,如果是弹窗的话,不解决弹窗是没有办法锁定任何元素的,那么我么你直接访问博客列表详情页会怎么样呢?
当我手动测试的时候,他会直接返回登录页。
经过我们测试,发现登录失败,在访问此页面,就会报错没有找到这些元素,也就是说登录失败,是没有办法访问博客列表页的
在这里插入图片描述

from time import sleep
from common.until import BlogDriver
from test import Bloglogin
from test import BlogList

if __name__=="__main__":
    Bloglogin.BlogLogin().LoginFailTest()
    sleep(2)
    #登录失败之后,测试列表
    BlogList.BlogList().ListTestByLogin()
    sleep(2)
    #统一退出
    BlogDriver.diver.quit()

博客详情页相关测试用例

对博客详情页的测试,我们要分为登录成功后的测试和登录失败的测试。

登录成功

当我们登录成功的时候,进入列表页,点击查看全文后,就可以查看博客的详细内容,包括标题、时间、内容、最好查看一下用户名。
在这里插入图片描述

from selenium.webdriver.common.by import By

from common.until import BlogDriver


class BlogDetail:
    driver = ""
    url = ""
    def __init__(self):
        self.driver = BlogDriver.diver
        self.url = "http://8.137.19.140:9090/blog_detail.html?blogId=7681"
        self.driver.get(self.url)
    #登录状态下的博客详情页
    def BlogDetaulTest(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, "#detail > p")
        #用户名
        self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.left > div > h3")

登录失败

登录失败,会发现我们找不到元素,也就是无法进入博客详细页。
在这里插入图片描述

from time import sleep
from common.until import BlogDriver
from test import Bloglogin
from test import BlogList
from test import BlogDetail

if __name__=="__main__":
    Bloglogin.BlogLogin().LoginFailTest()
    sleep(2)
    #失败,列表点击后,查看内容
    BlogDetail.BlogDetail().BlogDetaulTest()
    sleep(2)
    #统一退出
    BlogDriver.diver.quit()

博客编辑页相关测试用例

对博客编辑页的测试,我们要分为登录成功后的测试和登录失败的测试。

登陆成功

如果登录成功,我们可以通过点击写博客,进行博客的编辑。我们需要写标题,然后内容,然后点击发布。
但是根据以下代码编写后发现,我们无法对MD外部插件进行空时,这个时候我们可以对md上述符号进行控制,编辑一部分内容。

在这里插入图片描述
在这里插入图片描述

from selenium.webdriver.common.by import By

from common.until import BlogDriver


class BlogEdit:
    driver = ""
    url = ""

    def __init__(self):
        self.driver = BlogDriver.diver
        self.url = "http://8.137.19.140:9090/blog_edit.html"
        self.driver.get(self.url)
    #正确发布博客
    def EditSucTest(self):
        #进入列表页,点击写博客
        self.driver.find_element(By.CSS_SELECTOR, "body > div.nav > a:nth-child(5)").click()
        #成功发布博客:标题写入,内容存在
        self.driver.find_element(By.CSS_SELECTOR, "#title").send_keys("自动化测试")
        self.driver.find_element(By.CSS_SELECTOR, "#editor > div.CodeMirror.cm-s-default.CodeMirror-wrap > div.CodeMirror-scroll").send_keys("博客内容测试博客内容测试博客内容测试博客内容测试")
        #点击发布文章
        self.driver.find_element(By.CSS_SELECTOR, "#submit").click()

登录失败

因为登录页面右上角,直接有点写博客按钮,所以我们可以直接访问网页,模拟没有登录的时候是否可以返回呢?
结果就是直接返回了登录页面。

from time import sleep
from common.until import BlogDriver
from test import Bloglogin
from test import BlogList
from test import BlogDetail
from test import BlogEdit

if __name__=="__main__":
    #点击写博客,然后编辑
    BlogEdit.BlogEdit().EditSucTest()
    sleep(5)
    #统一退出
    BlogDriver.diver.quit()

编写测试文档

测试文档包括以下几部分:项目背景、项目简介、测试计划、测试工具、设计的测试类型(功能测试、性能测试、自动化测试)、测试类型测内容、项目测试的bug简述、测试结论等。

测试类型内容

这里主要写你的测试类型中的内容,比如测试用例和测试的脚本。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/924417.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MATLAB矩阵元素的修改及删除

利用等号赋值来进行修改 A ( m , n ) c A(m,n)c A(m,n)c将将矩阵第 m m m行第 n n n列的元素改为 c c c,如果 m m m或 n n n超出原来的行或列,则会自动补充行或列,目标元素改为要求的,其余为 0 0 0 A ( m ) c A(m)c A(m)c将索引…

告别 Kafka,拥抱 Databend:构建高效低成本的用户行为分析体系

用户行为数据埋点指标是数据仓库中不可或缺的重要数据源之一,同时也是企业最宝贵的资产之一。通常情况下,用户行为数据分析包含两大数据源:用户行为分析日志和上游关系型数据库(如 MySQL)。基于这些数据,企…

WEB攻防-通用漏洞文件上传中间件解析漏洞编辑器安全

中间件文件解析-IIS&Apache&Nginx Web应用编辑器-Ueditor文件上传安全 实例CMS&平台-中间件解析&编辑器引用 Vulhub是一个基于docker和docker-compose的漏洞环境集合,进入对应目录并执行一条语句即可启动一个全新的漏洞环境,让漏洞复现…

【算法day1】数组:双指针算法

题目引用 这里以 1、LeetCode704.二分查找 2、LeetCode27.移除元素 3、LeetCode977.有序数组的平方 这三道题举例来说明数组中双指针的妙用。 1、二分查找 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜…

快速理解微服务中Sentinel怎么实现限流

Sentinel是通过动态管理限流规则,根据定义的规则对请求进行限流控制。 一.实现步骤 1.定义资源:在Sentinel中,资源可以是URL、方法等,用于标识需要进行限流的请求;(在Sentinel中,需要我们去告诉Sentinel哪些…

controller中的参数注解@Param @RequestParam和@RequestBody的不同

现在controller中有个方法:(LoginUserRequest是一个用户类对象) PostMapping("/test/phone")public Result validPhone(LoginUserRequest loginUserRequest) {return Result.success(loginUserRequest);}现在讨论Param("login…

OpenCV截取指定图片区域

import cv2 img cv2.imread(F:/2024/Python/demo1/test1/man.jpg) cv2.imshow(Image, img) # 显示图片 #cv2.waitKey(0) # 等待按键x, y, w, h 500, 100, 200, 200 # 示例坐标 roi img[y:yh, x:xw] # 截取指定区域 cv2.imshow(ROI, roi) cv2.waitKey(0) cv…

【经典】星空主题的注册界面HTML,CSS,JS

目录 界面展示 完整代码 说明&#xff1a; 这是一个简单的星空主题的注册界面&#xff0c;使用了 HTML 和 CSS 来实现一个背景为星空效果的注册页面。 界面展示 完整代码 <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8&…

后端:事务

文章目录 1. 事务2. Spring 单独配置DataSource3. 利用JdbcTemplate操作数据库4. 利用JdbcTemplate查询数据5. Spring 声明式事务6. 事务的隔离级别6.1 脏读6.2 不可重复读6.3 幻读6.4 不可重复读和幻读的区别6.5 三种方案的比较 7. 事务的传播特性8. 设置事务 只读(readOnly)9…

vue element-ui的el-image 和 el-table冲突层级冲突问题问题preview-teleported

问题: 解决代码:preview-teleported <el-image style"width: 50px; height: 50px" :src"props.row.url" :zoom-rate"1.2" :max-scale"7":min-scale"0.2" :preview-src-list"[props.row.url]" :initial-index&…

vue3 开发利器——unplugin-auto-import

这玩意儿是干啥的&#xff1f; 还记得 Vue 3 的组合式 API 语法吗&#xff1f;如果有印象&#xff0c;那你肯定对以下代码有着刻入 DNA 般的熟悉&#xff1a; 刚开始写觉得没什么&#xff0c;但是后来渐渐发现&#xff0c;这玩意儿几乎每个页面都有啊&#xff01; 每次都要写…

FreeSWITCH 简单图形化界面34 - 网络环境安全的情况下,进行任意SIP注册

FreeSWITCH 简单图形化界面34 -网络环境安全的情况下&#xff0c;进行任意SIP注册 测试环境1、前言2、参数3、实践一下 测试环境 http://myfs.f3322.net:8020/ 用户名&#xff1a;admin&#xff0c;密码&#xff1a;admin FreeSWITCH界面安装参考&#xff1a;https://blog.cs…

基于Matlab深度学习的CT影像识别系统研究与实现

通过使用AlexNet、GoogLeNet和VGGNet等预训练模型&#xff0c;并结合迁移学习技术&#xff0c;对CT影像进行特征提取和分类。系统在公开数据集上进行了训练和测试&#xff0c;结果表明&#xff0c;该方法能够有效区分COVID-19和非COVID-19的CT影像&#xff0c;具有较高的准确率…

如何使用postman做接口测试?

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 常用的接口测试工具主要有以下几种&#xff1a; Postman: 简单方便的接口调试工具&#xff0c;便于分享和协作。具有接口调试&#xff0c;接口集管理&#…

数据分析的尽头是web APP?

数据分析的尽头是web APP&#xff1f; 在做了一些数据分析的项目&#xff0c;也制作了一些数据分析相关的web APP之后&#xff0c;总结自己的一些想法和大家分享。 1.web APP是呈现数据分析结果的另外一种形式。 数据分析常见的结果是数据分析报告&#xff0c;可以是PPT或者…

学习笔记037——Java中【Synchronized锁】

文章目录 1、修饰方法1.1、静态方法&#xff0c;锁定的是类1.2、非静态方法&#xff0c;锁定的是方法的调用者&#xff08;对象&#xff09; 2、修饰代码块&#xff0c;锁定的是传入的对象2.1、没有锁之前&#xff1a;2.2、有锁后&#xff1a; 实现线程同步&#xff0c;让多个线…

开源加密库mbedtls及其Windows编译库

目录 1 项目简介 2 功能特性 3 性能优势 4 平台兼容性 5 应用场景 6 特点 7 Windows编译 8 编译静态库及其测试示例下载 1 项目简介 Mbed TLS是一个由ARM Maintained的开源项目&#xff0c;它提供了一个轻量级的加密库&#xff0c;适用于嵌入式系统和物联网设备。这个项…

QTableWidget使用代理绘制分行显示

在这里插入代码片# 创建主窗口类&#xff1a; 使用 QTableWidget 作为核心控件。 设置表头及行列信息。 自定义代理&#xff1a; 继承 QStyledItemDelegate&#xff0c;实现代理模式。 重写 paint 和 sizeHint 方法&#xff0c;支持多行文本绘制。 设置行高以适应多行显示。 …

Python学习35天

# 定义父类 class Computer: CPUNone MemoryNone diskNone def __init__(self,CPU,Memory,disk): self.disk disk self.Memory Memory self.CPU CPU def get_details(self): return f"CPU:{self.CPU}\tdisk:{self.disk}\t…

企业OA管理系统:Spring Boot技术深度解析

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…