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

相关推荐
LaughingZhu2 小时前
移动端 AI 的价值重估:设备端智能的拐点
大数据·人工智能·经验分享·搜索引擎·语音识别
青稞社区.5 小时前
Claude Code 源码深度解析:运行机制与 Memory 模块详解
大数据·人工智能·elasticsearch·搜索引擎·agi
Aktx20FNz6 小时前
iFlow CLI 完整工作流指南
大数据·elasticsearch·搜索引擎
LaughingZhu7 小时前
Anthropic 收购 Oven 后,Claude Code 用运行时写了一篇护城河文章
大数据·人工智能·经验分享·搜索引擎·语音识别
学习3人组7 小时前
TortoiseGit冲突解决实战上机练习
大数据·elasticsearch·搜索引擎
念越10 小时前
蓝桥杯自动化测试模拟1期答案及代码解析(完整版)
自动化测试·软件测试·selenium·蓝桥杯
切糕师学AI10 小时前
Elasticsearch 向量索引深度解析:从原理到生产实践
大数据·elasticsearch·搜索引擎·语义搜索·相似性搜索·语义理解
Elastic 中国社区官方博客1 天前
当 TSDS 遇到 ILM:设计不会拒绝延迟数据的时间序列数据流
大数据·运维·数据库·elasticsearch·搜索引擎·logstash
沐风___1 天前
Claude Code 权限模式完全指南:Auto、Bypass、Ask 三模式深度解析
大数据·elasticsearch·搜索引擎
Elastic 中国社区官方博客1 天前
使用 Elastic Workflows 监控 Kibana 仪表板视图
大数据·运维·数据库·elasticsearch·搜索引擎·全文检索·kibana