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

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简述、测试结论等。

测试类型内容

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


http://www.kler.cn/a/415138.html

相关文章:

  • 【阅读记录-章节4】Build a Large Language Model (From Scratch)
  • Laravel8.5+微信小程序实现京东商城秒杀方案
  • 屏幕分辨率|尺寸|颜色深度指纹修改
  • 常用元器件使用方法18:单节锂电池充电管理芯片XT4052的使用方法
  • PHP 去掉特殊不可见字符 “\u200e“
  • ts解决vite unplugin-auto-import/vite
  • MEASURING INTANGIBLE CAPITAL WITH MARKET PRICES论文阅读
  • MySQL面试攻略:从基础到高级,全面解析
  • 【微服务】Nacos配置管理
  • docker-mysql
  • 分布式光伏与储能协调控制策略的应用分析
  • 简单线性DP
  • 通过docker overlay2 目录名查找容器名和容器ID
  • 架构第十一章:zabbix
  • Vue 3 KeepAlive 教程
  • Unity3d C# 实现一个基于UGUI的自适应尺寸图片查看器(含源码)
  • 【CSS】设置文本超出N行省略
  • 第六篇:其他窗口部件 QLineEdit
  • 更快更省更划算:了解亚马逊云科技自研芯片
  • Vue表单绑定入
  • 【GPT】为什么要力量训练?
  • 使用easyexcel导出复杂模板,同时使用bean,map,list填充
  • MT管理器v2.14.5-MT管理器-能强大的Android文件管理工具,主要用于管理和编辑手机中的文件-MT管理器vip版本下载-登录即可有vip
  • 02.ES6(2)
  • docker-elasticsearch-kibana-logstash
  • Vue Promise的使用,界面使用异步线程循环执行方法(模拟线程)