自动化测试实战篇

文章目录

  • 目录
    • [1. 自动化实施步骤](#1. 自动化实施步骤)
      • [1.1 编写web测试用例](#1.1 编写web测试用例)
      • [1.2 自动化测试脚本开发](#1.2 自动化测试脚本开发)
      • [1.3 测试报告](#1.3 测试报告)

目录

  • 自动化实施步骤

1. 自动化实施步骤

1.1 编写web测试用例

注: 因为这里仅作为演示,所以设计的用例并不是非常完整

1.2 自动化测试脚本开发

python 复制代码
# 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):
        #创建屏幕截图
        #图片文件名称:./2025-04-02-184635.png
        dirname = datetime.datetime.now().strftime("%Y-%m-%d")
        #判断dirname文件夹是否已经存在,若不存在则创建文件夹
        # ../images/2025-04-02
        if not os.path.exists("../images/"+dirname):
            os.mkdir("../images/"+dirname)
        #2025-04-02-184635.png
        #图片路径:../images/2025-04-02/调用方法-2025-04-02-184635.png
        #图片路径:../images/2025-04-02/LoginSucTest-2025-04-02-184635.png
        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()

博客登录测试:

python 复制代码
# 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("zhangsan")
        self.driver.find_element(By.CSS_SELECTOR,"#password").send_keys("123456")
        self.driver.find_element(By.CSS_SELECTOR,"#submit").click()
        #能够找到博客首页用户的昵称,说明登录成功,否则登录失败
        self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.left > div > h3")
        #添加屏幕截图
        BlogDriver.getScreenShot()
        #返回到登录页面
        self.driver.back()

    #异常登录的测试用例
    def LoginFailTest(self):
        #若连续多次的send_keys则会出现关键词拼接,而不是替换。若要替换需要先clear一下
        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("1234")
        self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
        #检查是否登录失败
        #检查弹窗是否出现
        wait = WebDriverWait(self.driver,3)
        wait.until(EC.alert_is_present())
        self.driver.switch_to.alert.accept()

login = BlogLogin()
login.LoginSucTest()
login.LoginFailTest()

博客首页测试:

python 复制代码
# tests/BlogList.py

from selenium.webdriver.common.by import By

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.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")
        #添加屏幕截图
        BlogDriver.getScreenShot()

    #测试首页(未登录情况下)

这里如果我们和前面一样直接调用测试首页(登录情况下)的方法,会有这样的问题:我们并没有成功登录就直接去测试标题、内容等是否存在。

因此,我们需要有一个文件去运行所有的测试用例(之前登录测试里调用的测试代码也都放到这个文件中来执行):

python 复制代码
# tests/RunTest.py

from tests import BlogLogin
from tests import BlogList
from common.Utils import BlogDriver

if __name__ == "__main__":
    BlogLogin.BlogLogin().LoginFailTest()
    BlogLogin.BlogLogin().LoginSucTest()
    #登录成功之后就可以调用博客首页测试首页的用例(登录状态)
    BlogList.BlogList().ListTestByLogin()

    #执行浏览器的退出
    BlogDriver.driver.quit()

注: 之前登录测试里的退出浏览器代码要删除,一定要在所有测试用例都执行完成后再退出浏览器!


博客详情页测试:

python 复制代码
# tests/BlogDetail.py

from selenium.webdriver.common.by import By

from common.Utils import BlogDriver
#测试博客详情页
class BlogDetail:
    url = ""
    driver = ""
    def __init__(self):
        self.url = "http://8.137.19.140:9090/blog_detail.html?blogId=42315"
        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,"#detail > p")
        #屏幕截图
        BlogDriver.getScreenShot()

博客编辑页测试:

python 复制代码
# tests/BlogEdit.py

from selenium.webdriver.common.by import By

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.find_element(By.CSS_SELECTOR,"#title").send_keys("自动化测试创建")
        #找到编辑区域,输入关键词(编辑区域不可操作)
        #通过点击菜单栏到达编辑区域不为空的目的
        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()
        #点击完成之后出现页面的跳转,页面跳转需要加载时间,可能会出现代码执行的速度比页面渲染的速度要快,导致元素查找不到,因此可以添加等待
        #添加隐式等待和显示等待都可以,任选择一个
        #隐式等待:创建浏览器对象之后就可以加上,因为隐式等待的作用域在driver整个生命周期
        #显示等待:可以作用在当前代码中
        actual=self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div:nth-child(9) > div.title").text
        assert actual == "自动化测试创建"
        #屏幕截图
        BlogDriver.getScreenShot()
python 复制代码
# tests/RunTest.py

from tests import BlogLogin
from tests import BlogList
from tests import BlogDetail
from tests import BlogEdit
from common.Utils import BlogDriver

if __name__ == "__main__":
    BlogLogin.BlogLogin().LoginFailTest()
    BlogLogin.BlogLogin().LoginSucTest()
    #登录成功之后就可以调用博客首页测试首页的用例(登录状态)
    BlogList.BlogList().ListTestByLogin()
    #测试登录状态下的博客详情页
    BlogDetail.BlogDetail().DetailTestByLogin()
    #博客编辑页面
    BlogEdit.BlogEdit().EditSucTestByLogin()
    #执行浏览器的退出
    BlogDriver.driver.quit()

1.3 测试报告



相关推荐
拖累斯1 小时前
Jenkins + Python 全自动跑通「禅道任务/BUG 导出 → 月度开发考核表」
python·jenkins·bug
寂寞的船2 小时前
【Unity Bug挑战】第10期 SerializeReference 内存泄漏之谜
unity·c#·游戏引擎·bug
unity工具人19 小时前
unity 照片墙插件(Pop-up Photo Wall)在触摸屏和红外框设备上的触发Bug
bug
ClouGence20 小时前
不搭 Selenium 或 Playwright,怎么测试公司的内网业务?
selenium·测试
狂师1 天前
Agent 测评指标怎么选、怎么算?
人工智能·agent·测试
测试界的小码农2 天前
【让 AI 生成的测试用例变成 pytest API 自动化脚本】
人工智能·测试用例·pytest
狂师2 天前
AI 测试 Skill 大全,我日常在用的 27个,夯爆了!
人工智能·测试·全栈
狂师3 天前
我开发了一款免费开源的测试开发刷题学习网站
面试·开源·测试
灼行4 天前
Autosar SecOC 需求场景BUG(需求不一致性)【草稿】
bug
ClouGence4 天前
2026 年 AI 自动化测试工具盘点,哪些真正值得用?
测试