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.总结

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

相关推荐
张永伟营销8 小时前
从SEO到GEO:技术人视角下的生成式引擎优化架构与实践
搜索引擎·ai·架构
Elastic 中国社区官方博客9 小时前
Elastic 和 OpenAI 合作,将前沿智能引入非结构化企业数据
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai
Elastic 中国社区官方博客10 小时前
Elasticsearch:搜索教程 - 全文搜索(一)
大数据·python·elasticsearch·搜索引擎·全文检索
数据皮皮侠12 小时前
全国乡村旅游重点村DID数据(2000-2026)
大数据·人工智能·搜索引擎·智慧城市·制造·旅游
段一凡-华北理工大学14 小时前
AI推动工业智能化转型~系列文章05:特征工程:工业 AI 的第一生产力
数据库·人工智能·分布式·搜索引擎·特征工程·高炉智能化
Leo Lab1 天前
EAIDK-610 移植主线U-BOOT
大数据·elasticsearch·搜索引擎
傲娇的小满1 天前
UGit 正确操作流程
大数据·elasticsearch·搜索引擎
lazy H2 天前
Git worktree 怎么用?同时开发多个分支完整教程
大数据·git·后端·学习·搜索引擎·github
spider_xcxc2 天前
告别手工管理 Argo CD Application:ApplicationSet 批量编排实战指南
大数据·elasticsearch·搜索引擎
ab7753732002 天前
【4K 超清】超级少女 Supergirl (2026) WEB-DL 无损压制 MKV 封装 15.5G 原版英语配套精准中字
经验分享·搜索引擎·生活