Boost搜索引擎测试报告

原项目:【Boost搜索引擎】构建Boost站内搜索引擎实践-CSDN博客

项目源码: boost: boost搜索引擎项目的开发学习!

一、报告概要

测试报告的主要目的是验证搜索引擎的功能完整性和性能。通过对每个核心功能的综合测试,确保系统能够在真实环境中稳定运行,并满足用户的预期需求。

测试环境

软件:Google Chrome

开发工具:pycharm

测试工具:自动化测试工具Selenium

操作系统:Windows 11家庭中文版

浏览器版本:Google Chrome版本 144.0.7559.97(正式版本) (64 位)

二、项目功能

基于 Boost 文档的站内搜索引擎,用户可以根据浏览器访问该搜索引擎,当用户通过页面的

搜索框输入查询关键字后,就能快速的快速的查询出相关的Boost在线文档

三、测试用例

四、自动化测试

1. 创建一个公共类(安装驱动,保存截图)

①用户名、密码和预期的博客列表URL。

②打开博客登录页面并输入账号密码。

③点击提交按钮,验证是否成功跳转到博客列表页。

④ 检查页面上是否显示了正确的用户名。

注意:Chrome 要和 ChromeDriver的版本一致

python 复制代码
#Utils.py
import datetime
import os
import sys

#创建一个浏览器对象
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service
from selenium import webdriver

class Driver:
    driver = ""
    def __init__(self):
        options = webdriver.ChromeOptions()
        self.driver = webdriver.Chrome(service = Service(ChromeDriverManager().install(),options=options))

    def getScreeShot(self):
        #创建屏幕截图
        #图片文件名称:2026-1-29-1834.png
        #图片路径:../images/2026-1-29-1834.png
        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)

SearchDriver = Driver()

首页、搜索、搜索结果等测试

python 复制代码
#List.py
#首页测试
import time
from common.Utils import SearchDriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.alert import Alert

class ListTest:
    url = ""
    driver = ""
    # 新增:定义实例变量,保存不同阶段的URL和窗口句柄
    initial_url = ""  # 初始页面URL
    search_result_url = ""  # 搜索结果页面URL
    original_window_handle = ""  # 原始窗口句柄(初始窗口)

    def __init__(self):
        self.url = "http://8.130.176.45:8081/"
        self.driver = SearchDriver.driver
        self.driver.get(self.url)
        # 新增:获取初始页面URL和原始窗口句柄
        self.initial_url = self.driver.current_url
        self.original_window_handle = self.driver.current_window_handle  # 获取当前窗口唯一标识
        print(f"✅ 初始页面URL:{self.initial_url}")
        print(f"✅ 原始窗口句柄:{self.original_window_handle}\n")

    #测试首页
    def ListTest(self):
        time.sleep(3)
        #测试首页图片是否存在
        self.driver.find_element(By.CSS_SELECTOR,"body > div > div.header > img")
        #测试标题是否存在
        self.driver.find_element(By.CSS_SELECTOR,"body > div > div.header > h1")
        #测试输入框是否存在
        self.driver.find_element(By.CSS_SELECTOR,"body > div > div.search > input[type=text]")
        #测试搜索按钮是否存在
        self.driver.find_element(By.CSS_SELECTOR,"body > div > div.search > button")
        time.sleep(3)

        #截图
        SearchDriver.getScreeShot()

    #搜索测试
    def SearchTest(self):
        self.driver.find_element(By.CSS_SELECTOR, "body > div > div.search > input[type=text]").clear()
        self.driver.find_element(By.CSS_SELECTOR,"body > div > div.search > input[type=text]").send_keys("split")
        time.sleep(3)
        self.driver.find_element(By.CSS_SELECTOR,"body > div > div.search > button").click()
        time.sleep(3)
        # 截图
        SearchDriver.getScreeShot()

        # 1. 记录搜索结果页面的URL和当前所有窗口(此时只有原始窗口)
        self.search_result_url = self.driver.current_url
        all_windows_before_click = self.driver.window_handles  # 获取所有窗口句柄列表
        print(f"🔍 点击搜索结果前(搜索结果页面)URL:{self.search_result_url}")
        print(f"🔍 点击搜索结果前窗口数量:{len(all_windows_before_click)}")

        #查看搜索的结构是否可以正常打开
        self.driver.find_element(By.CSS_SELECTOR, "body > div > div.result > div:nth-child(1) > a").click()
        time.sleep(3)  # 等待新窗口完全打开(可根据网络调整时长)

        # 2. 获取点击后所有窗口句柄,找到新打开的窗口
        all_windows_after_click = self.driver.window_handles
        print(f"📍 点击搜索结果后窗口数量:{len(all_windows_after_click)}")

        # 判断是否新开了窗口
        if len(all_windows_after_click) > len(all_windows_before_click):
            # 遍历找到新增的窗口句柄(即新窗口)
            for window_handle in all_windows_after_click:
                if window_handle not in all_windows_before_click:
                    new_window_handle = window_handle
                    break
            print(f"📍 新窗口句柄:{new_window_handle}")

            # 3. 切换Selenium驱动焦点到新窗口
            self.driver.switch_to.window(new_window_handle)
            time.sleep(3)  # 等待新窗口页面加载完成

            # 4. 获取新窗口的URL,进行跳转判断
            new_window_url = self.driver.current_url
            print(f"📍 新窗口页面URL:{new_window_url}")

            # 核心跳转判断逻辑
            print("\n===== 跳转判断结果 =====")
            if new_window_url != self.search_result_url:
                print("✅ 检测到:新开窗口完成跳转!")
                if self.initial_url not in new_window_url:
                    print("✅ 补充:新窗口跳转到了初始站点以外的外部页面!")
                else:
                    print("ℹ️  补充:新窗口仍在当前站点内跳转(未离开初始域名)。")
            else:
                print("❌ 检测到:新窗口未发生跳转,URL与搜索结果页面一致。")

            # 5. 截图新窗口
            SearchDriver.getScreeShot()

            # 6. 切换回原始窗口
            self.driver.switch_to.window(self.original_window_handle)
            print(f"\n✅ 已切换回原始窗口,继续执行后续测试...")
        else:
            print("\n❌ 检测到:未新开任何窗口,也未发生跳转。")
            # 截图
            SearchDriver.getScreeShot()

        time.sleep(3)
        #输入为空
        self.driver.find_element(By.CSS_SELECTOR, "body > div > div.search > input[type=text]").clear()
        self.driver.find_element(By.CSS_SELECTOR, "body > div > div.search > button").click()
        # 处理 Alert 弹窗
        try:
            alert = Alert(self.driver)
            print("\nAlert 文本:", alert.text)  # 可以打印弹窗内容
            alert.accept()  # 点击"确定"关闭弹窗
        except:
            pass  # 如果没有弹窗,就跳过

        self.driver.quit()

listtest = ListTest()
listtest.ListTest()
listtest.SearchTest()

1.通过采用自动化测试工具如Selenium,项目实现了自动化测试脚本的编写,这有助于提高测试效率和系统运行的稳定性。

2.只创建一次驱动对象,避免每个用例重复创建驱动对象造成时间和资源的浪费。

3.使用参数化:保持用例的简洁,提高代码的可读性。

4.使用测试套件:降低了测试的工作量,通过套件一次执行所有要运行的测试用例。

5.使用了等待:测试脚本能够自动等待页面元素加载完成,这提高了自动化测试运行的效率和稳定性。

6.使用了屏幕截图:方便问题的追溯以及问题的解决。

7.使用了断言:验证测试结果是否符合预期,这是自动化测试中验证测试是否通过的关键部分。

相关推荐
@zulnger7 小时前
selenium 自动化测试工具实战项目(订单)
selenium·测试工具·自动化
汽车仪器仪表相关领域18 小时前
MTX-A 模拟废气温度(EGT)计 核心特性与车载实操指南
网络·人工智能·功能测试·单元测试·汽车·可用性测试
洛阳纸贵1 天前
JAVA高级工程师--Elasticsearch安装以及内置分词器、IK分词器
大数据·elasticsearch·搜索引擎
历程里程碑1 天前
子串----和为K的子数组
大数据·python·算法·leetcode·elasticsearch·搜索引擎·哈希算法
Elastic 中国社区官方博客1 天前
使用 LangGraph 和 Elasticsearch 构建 人机协同( HITL )AI agent
大数据·人工智能·elasticsearch·搜索引擎·ai·机器人·全文检索
YXWik61 天前
openManus更改搜索方式Google改为国内搜索引擎
搜索引擎
历程里程碑2 天前
滑动窗口-----找到所有字母异位词
大数据·python·算法·elasticsearch·搜索引擎·flask·tornado
历程里程碑2 天前
Linux 13 进程前言:冯诺依曼体系结构和操作系统
大数据·linux·运维·服务器·算法·elasticsearch·搜索引擎
程序员三藏2 天前
selenium测试框架快速搭建
自动化测试·软件测试·python·selenium·测试工具·职场和发展·测试用例