API文档搜索引擎——测试报告

一、项目概述

1.项目背景

基于Spring Boot开发的在线API文档搜索引擎,可通过输入一个关键词,得到若干搜索结果,每个搜索结果包含标题、描述、展示URL并且点击标题可跳转至对应页面。

2.项目结构

索引模块:扫描本地API文档,分析内容并构建正排和倒排索引。

搜索模块:根据输入的关键词,基于倒排索引进行检索,合并文档、设置权重,返回搜索结果。

3.测试环境

操作系统:Windows 11

浏览器:Chrome

测试工具:Selenium、JMeter、postman

二、测试用例

三、功能测试

1.手动测试

测试场景1:输入框不输入任何词汇,点击搜索按钮

预期结果:页面不做响应

测试场景2:输入框输入停止词汇,点击搜索按钮

预期结果:页面不做响应

测试场景3:输入框输入词汇,点击搜索按钮

预期结果:根据输入的词汇,返回搜索得到的结果

测试场景4:点击页面标签

预期结果:跳转至对应页面

2.自动化测试

2.1工具类
java 复制代码
package com.springboot;

import io.github.bonigarcia.wdm.WebDriverManager;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.PageLoadStrategy;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.support.ui.WebDriverWait;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.time.Duration;

public class Utils {
    public static WebDriver driver = null;
    public WebDriverWait driverWait = null;

    public Utils(String url){
        createDriver();
        driver.get(url);
        driverWait = new WebDriverWait(driver, Duration.ofSeconds(3));
    }

    public static WebDriver createDriver() {
        if (driver == null) {
            String proxyHost = "127.0.0.1";
            int proxyPort = 7897;
            //创建谷歌驱动
            WebDriverManager.chromedriver()
                    .proxy(proxyHost + ":" + proxyPort) // 设置代理
                    .setup();
            ChromeOptions options = new ChromeOptions();
            //允许访问所有的链接
            options.addArguments("--remote-allow-origins=*");
            //设置加载模式 EAGER为等待部分元素加载完成
            options.setPageLoadStrategy(PageLoadStrategy.EAGER);
            driver = new ChromeDriver(options);
            //2s隐式等待
            driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(2));
        }
        return driver;
    }

    public void getShot(String str) throws IOException {
        // ./src/test/img/
        //               /2026-04-12/
        //                          /test01-152420.png
        SimpleDateFormat sim1 = new SimpleDateFormat("yyyy-MM-dd");
        SimpleDateFormat sim2 = new SimpleDateFormat("HHmmssSS");

        String dirTime = sim1.format(System.currentTimeMillis());
        String fileTime = sim2.format(System.currentTimeMillis());

        String filename ="./src/main/java/img/test-"+dirTime+"/"+str+"-"+fileTime+".png";
        File file = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
        FileUtils.copyFile(file,new File(filename));
    }

    public static void main(String[] args) throws IOException {
        Utils utils = new Utils("https://www.baidu.com");
        utils.getShot("test");
        driver.quit();
    }
}
2.2页面测试类
java 复制代码
package com.springboot.tests;

import com.springboot.Utils;
import org.openqa.selenium.By;

import java.io.IOException;

public class SeacherPage extends Utils {
    public static String url = "http://127.0.0.1:8080/index.html";
    public SeacherPage() {
        super(url);
    }

    public void checkPage() throws IOException {
        driver.findElement(By.cssSelector("body > div > div.header > input[type=text]"));
        driver.findElement(By.cssSelector("#search-btn"));
        driver.findElement(By.cssSelector("body > div > div.result"));
        getShot(Thread.currentThread().getStackTrace()[1].getMethodName());
    }

    public void searchFail1() throws IOException {
        //不输入任何词进行搜索
        driver.findElement(By.cssSelector("body > div > div.header > input[type=text]")).clear();
        driver.findElement(By.cssSelector("#search-btn")).click();
        getShot(Thread.currentThread().getStackTrace()[1].getMethodName());
    }
    public void searchFail2() throws IOException {
        driver.findElement(By.cssSelector("body > div > div.header > input[type=text]")).clear();
        //输入停止词进行搜索
        driver.findElement(By.cssSelector("body > div > div.header > input[type=text]")).sendKeys("a");
        driver.findElement(By.cssSelector("body > div > div.result")).click();
        getShot(Thread.currentThread().getStackTrace()[1].getMethodName());
    }

    public void searchSuccess() throws IOException {
        driver.findElement(By.cssSelector("body > div > div.header > input[type=text]")).clear();
        driver.findElement(By.cssSelector("body > div > div.header > input[type=text]")).sendKeys("list");
        driver.findElement(By.cssSelector("#search-btn")).click();
        //跳转页面
        driver.findElement(By.cssSelector("body > div > div.result > div:nth-child(2) > a")).click();
        String curHandle = driver.getWindowHandle();
        Set<String> handles = driver.getWindowHandles();
        for(String handle : handles) {
            if (!handle.equals(curHandle)) {
                driver.switchTo().window(handle);
                break;
            }
        }
        getShot(Thread.currentThread().getStackTrace()[1].getMethodName());
    }
}

四、兼容性测试

测试场景1:使用edge浏览器进入API搜索引擎

预期结果:无异常且布局显示功能与预期一致

测试场景2:使用谷歌浏览器进入API搜索引擎

预期结果:无异常且布局显示功能与预期一致

测试场景3:使用手机浏览器进入API搜索引擎

预期结果:无异常且布局显示功能与预期一致

五、易用性测试

功能易用,反馈清晰。

六、测试总结

1.潜在问题

不兼容手机浏览器,使用手机浏览器打开后布局异常,无法正常使用。

2.总结

本次测试覆盖的功能、界面、易用性等核心指标均满足上线标准,但兼容性指标仍存在问题。

相关推荐
大志哥1232 小时前
整理安装ES和Logstash
大数据·elasticsearch·搜索引擎
大气层煮月亮20 小时前
RAG 检索技术 - Elasticsearch
大数据·elasticsearch·搜索引擎
Cx330❀1 天前
线程进阶实战:资源划分与线程控制核心指南
java·大数据·linux·运维·服务器·开发语言·搜索引擎
小真zzz2 天前
搜极星:第三方多平台中立GEO洞察专家全面解析
人工智能·搜索引擎·seo·geo·中立·第三方平台
果粒蹬i3 天前
Elasticsearch 单机部署实测:安装流程、常见坑点与远程访问配置
大数据·elasticsearch·搜索引擎
历程里程碑3 天前
二叉树---二叉树的中序遍历
java·大数据·开发语言·elasticsearch·链表·搜索引擎·lua
ZC跨境爬虫3 天前
dankoe视频笔记:如何培养对自己喜欢之事的痴迷感
人工智能·笔记·搜索引擎
ZC跨境爬虫3 天前
Dan koe视频笔记: 个人成长与目标设定的重要性
人工智能·笔记·搜索引擎
Elastic 中国社区官方博客3 天前
使用 Elasticsearch + Jina embeddings 进行无监督文档聚类
大数据·人工智能·elasticsearch·搜索引擎·全文检索·jina