【项目】智能BI洞察引擎 测试报告

news2025/1/5 8:19:39

目录

  • 一、项目背景
    • BI介绍
    • 问题分析
    • 项目背景
  • 二、项目功能
  • 三、功能测试
    • 1、登录测试
      • 测试用例
      • 测试结果
    • 2、注册测试
      • 测试用例
      • 测试结果
      • 出现的bug
    • 3、上传文件测试
      • 测试用例
      • 测试结果
    • 4、AI生成图表测试
      • 测试用例
      • 测试结果
    • 5、分析数据页面测试(异步)
      • 测试用例
      • 测试结果
    • 6、图表列表页面测试
      • 测试用例
      • 测试结果
  • 四、自动化测试
    • 整体架构模式
    • 登录注册页面
    • AI生产图表页面测试
    • 图表列表页面测试
      • 自动化测试遇到的问题
        • 元素定位不到:
        • 编写自动化测试代码看不到效果
        • StaleElementReferenceException

项目地址:
项目代码:Gitee

一、项目背景

BI介绍

BI: Business Intelligence
即商业智能:数据可视化、报表可视化系统
主流BI平台:
FineBI、PowerBI

https://chartcube.alipay.com/

在这里插入图片描述

问题分析

  1. 需要人工上传数据
  2. 需要人工拖选分析要用到的数据行和列(数据分析师)
  3. 需要人工选择图表类型(数据分析师)
  4. 生成图表并保持配置

项目背景

区别于传统的 BI,用户(数据分析者)只需要导入最最最原始的数据集,输入想要进行分析的目标(比如帮我分析一下网站的增长趋势),就能利用 AI 自动生成一个符合要求的图表以及结论,实现数据分析的降本增效

二、项目功能

  1. 用户的登录和注册 --用户输入账号密码登录注册
  2. 智能分析:
    – 用户上传excel文件,分析目标(图表类型)
    – 对接AI能力 – 对接讯飞星火大模型分析数据
    –自动生成图表和分析结论
  3. 图表管理功能 – 点击图表管理,用户可以看到自己需要生成的数据分析结果和数据分析状态
  4. 异步化图表生成 – 对图表生成的优化
    在这里插入图片描述

三、功能测试

软件环境:win11 Google Chrome 131.0.6778.205 mysql 5.7

测试用例总览
在这里插入图片描述

1、登录测试

测试用例

在这里插入图片描述

测试结果

  1. 页面显示在这里插入图片描述

  2. 正常登录 (显示登录成功)在这里插入图片描述

  3. 异常登录
    在这里插入图片描述
    在这里插入图片描述

2、注册测试

测试用例

在这里插入图片描述

测试结果

点击注册:
显示该页面不存在
在这里插入图片描述

404 一般是路径问题
后端注册接口为:/api/user/register
后端注册接口没问题
在这里插入图片描述

出现的bug

bug:openapi自动生成了 前后端交互部分,但是前端没有是实现这个注册页面
在这里插入图片描述

3、上传文件测试

测试用例

在这里插入图片描述

测试结果

  1. 正常上传
    在这里插入图片描述
    在这里插入图片描述
  2. 异常上传
    在这里插入图片描述
    yml文件也可以上传成功,这里前端未校验文件格式
    点击提交(后端校验文件格式),显示分析失败
    在这里插入图片描述

4、AI生成图表测试

测试用例

在这里插入图片描述

测试结果

在这里插入图片描述
分析结论和可视化图表展示正常
在这里插入图片描述
鼠标光标定位显示正常

5、分析数据页面测试(异步)

测试用例

在这里插入图片描述

测试结果

在这里插入图片描述

6、图表列表页面测试

测试用例

在这里插入图片描述

测试结果

  • 无数据时显示
    在这里插入图片描述

  • 历史图表显示情况

  • 在测试时输入新的数据出现bug

异常情况:
在这里插入图片描述
解决:观察数据库,AI生成的echarts的json配置不正确,导致前端界面显示正常,预设的 promote 需要重新调整
调整后:

String predefinedInformation = “你是一个数据分析师和前端开发专家,接下来我会按照以下固定格式给你提供内容:\n” +
“分析需求:\n” +
“{数据分析的需求或者目标}\n” +
“原始数据:\n” +
“{csv格式的原始数据,用,作为分隔符}\n” +
“请根据这两部分内容,严格按照以下指定格式生成内容(此外不要输出任何多余的开头、结尾、注释)同时不要使用这个符号 ‘】’\n” +
“‘【【【【【’\n” +
“{前端 Echarts V5 的 option 配置对象 JSON 代码, 不要生成任何多余的内容,比如注释和代码块标记}\n” +
“‘【【【【【’\n” +
“{明确的数据分析结论、越详细越好,不要生成多余的注释} \n”
+ “下面是一个具体的例子的模板:”
+ “‘【【【【【’\n”
+ “JSON格式代码”
+ “‘【【【【【’\n” +
“结论:”;

将后端错误数据逻辑删除,显示正常
在这里插入图片描述

  • 搜索功能
    存在情况在这里插入图片描述
    不存在情况
    在这里插入图片描述

四、自动化测试

整体架构模式

在这里插入图片描述

登录注册页面

测试点
在这里插入图片描述

自动化代码


package tests;

import common.Utils;
import org.openqa.selenium.By;


import java.io.IOException;

public class LoginPage extends Utils {
    public static String url = "http://localhost:8000/user/login";
    public LoginPage() {
        super(url);
    }


    // 检查登录功能 -- 登录成功
    public void loginSuc() throws InterruptedException, IOException {

//        String title = driver.getTitle();
//        // 断言
//        assert title.equals("");

        // 清空输入框里的数据


        driver.findElement(By.cssSelector("#root > div > div > div > div.ant-pro-form-login-top.css-dev-only-do-not-override-1wwf28x.css-dev-only-do-not-override-1wwf28x > div.ant-pro-form-login-desc.css-dev-only-do-not-override-1wwf28x > a"));


        // 先清除输入框
        driver.findElement(By.cssSelector("#userAccount")).clear();
        driver.findElement(By.cssSelector("#userPassword")).clear();

        Thread.sleep(2000);
        driver.navigate().refresh();

        // 账号密码正确
        driver.findElement(By.cssSelector("#userAccount")).sendKeys("admin");
        driver.findElement(By.cssSelector("#userPassword")).sendKeys("admin123");
        driver.findElement(By.cssSelector("#root > div > div > div > div.ant-pro-form-login-main.css-dev-only-do-not-override-1wwf28x > form > button")).click();


//        driver.navigate().back();

        Thread.sleep(2000);
    }

    // 检查登录功能 -- 登录失败
    public void loginFail() throws IOException, InterruptedException {


        // 检查元素
        driver.findElement(By.cssSelector("#root > div > div > div > div.ant-pro-form-login-top.css-dev-only-do-not-override-1wwf28x.css-dev-only-do-not-override-1wwf28x > div.ant-pro-form-login-desc.css-dev-only-do-not-override-1wwf28x > a"));


        // 先清除输入框
        driver.findElement(By.cssSelector("#userAccount")).clear();
        driver.findElement(By.cssSelector("#userPassword")).clear();

        // 密码错误情况
        driver.findElement(By.cssSelector("#userAccount")).sendKeys("admwqwin");
        driver.findElement(By.cssSelector("#userPassword")).sendKeys("admin123");
        driver.findElement(By.cssSelector("#root > div > div > div > div.ant-pro-form-login-main.css-dev-only-do-not-override-1wwf28x > form > button")).click();
        // 检查是否登录成功
        Utils.getScreenshot("loginFail");


    }

}

登成功失败页面

AI生产图表页面测试

测试点:
在这里插入图片描述

上传文件代码

      // 定位上传文件按钮
        WebElement fileInput = driver.findElement(By.cssSelector("input[type='file']"));
        String filePath = "D:\\dev-BI\\bi-backend\\backend\\bi-backend\\src\\main\\resources\\测试数据.xlsx";
        fileInput.sendKeys(filePath);

自动化代码

package tests;

import common.Utils;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;

import java.io.IOException;
import java.util.concurrent.TimeUnit;

public class BiCreatePage extends Utils {
    public static String url = "http://localhost:8000/add_chart";
    public BiCreatePage() {
        super(url);
    }
    public void biCreate() throws InterruptedException, IOException {
        // 隐式等待 
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

        // 检查元素
        driver.findElement(By.cssSelector("#root > div > div.ant-layout.css-dev-only-do-not-override-1wwf28x > div > main > div.add-chart > div > div:nth-child(2) > div:nth-child(3) > div.ant-card-body > div:nth-child(1)"));
        System.out.println("succeed!!!");
        driver.findElement(By.cssSelector("#addChart_goal")).sendKeys("分析一下专业情况");
        driver.findElement(By.cssSelector("#addChart_name")).sendKeys("专业分析图");

        driver.findElement(By.cssSelector("#addChart > div:nth-child(3) > div > div.ant-col.ant-col-16.ant-form-item-control.css-dev-only-do-not-override-1wwf28x > div > div > div > div > span > span.ant-select-selection-search"));

        // 定位图表类型下拉框
        WebElement chartTypeDropdown = driver.findElement(By.cssSelector(".ant-select"));
        chartTypeDropdown.click();
        // 定位折线图选项并点击
        WebElement lineChartOption = driver.findElement(By.cssSelector(".ant-select"));
        lineChartOption.click();
        // 定位上传文件按钮
        WebElement fileInput = driver.findElement(By.cssSelector("input[type='file']"));
        String filePath = "D:\\dev-BI\\bi-backend\\backend\\bi-backend\\src\\main\\resources\\测试数据.xlsx";
        fileInput.sendKeys(filePath);
        System.out.println("---------------------wfe----------------");

        WebElement submitButton = driver.findElement(By.cssSelector(".ant-btn-primary"));
        submitButton.click();
    }
}

AI生成图表自动化测试

图表列表页面测试

在这里插入图片描述

图表管理自动化测试

自动化测试遇到的问题

元素定位不到:
  • js渲染需要时间,自动化已经开始下一步了,通过添加等待的方式
  • ant design pro 框架有特殊的cssSelector 比如 .ant-btn-primary、.ant-select,通过这种方式定位元素。
  • 要定位的元素为动态元素,每次打开对应的元素名不一样
编写自动化测试代码看不到效果
  • 通过添加等待,来观察效果
StaleElementReferenceException
  • 页面刷新或导航后,原来的 WebElement 对象变得无效。
  • 元素所在的 iframe 或者 shadow DOM 发生了变化。
  • 动态加载的内容导致元素被重新渲染。
  • StaleElementReferenceException 可能是由于页面刷新或元素被重新渲染后,之前的 WebElement 对象变得无效。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2269841.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

权限菜单之菜单管理 SpringBoot + VUE

一、 数据表设计 新建表sys_menu 表内数据 添加实体类Menu package com.example.demo.demos.web.demo.entity;import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.Ta…

【AIGC篇】AIGC 引擎:点燃创作自动化的未来之火

:羑悻的小杀马特.-CSDN博客 未来都是惊喜。你生来本应为高山。并非草芥。 引言: 在当今数字化的时代,人工智能生成内容(AIGC)正以一种前所未有的力量改变着我们的创作领域。它就像一个神秘而强大的魔法师,…

UnityRenderStreaming使用记录(三)

测试UnityRenderStreaming在Ubuntu24.04.1LTS上的表现 先放上运行图操作系统 Ubuntu24.04.1LTSUnity测试工程环境相关修改遇到的问题 先放上运行图 操作系统 Ubuntu24.04.1LTS 系统下载地址 https://cn.ubuntu.com/download/desktop安装UnityHub https://blog.csdn.net/AWNUXC…

从0开始的docker镜像制作-ubuntu22.04

从0开始的docker镜像制作-ubuntu22.04 一、拉取基础ubuntu22.04镜像二、进入拉取的docker镜像中,下载自己需要的安装包三、安装需要的系统软件四、打包现有镜像为一个新的镜像五、推送打包的镜像到私有docker服务器1.编辑docker文件,使其允许http传输和对…

多模态论文笔记——CogVLM和CogVLM2(副)

大家好,这里是好评笔记,公主号:Goodnote,专栏文章私信限时Free。本文详细介绍多模态模型的LoRA版本——CogVLM和CogVLM2。在SD 3中使用其作为captioner基准模型的原因和优势。 文章目录 CogVLM论文背景VLMs 的任务与挑战现有方法及…

gitlab-runner的卸载与安装

如果你使用rpm方式安装gitlab-runner,则可以参考本教程。 卸载 停止和卸载gitlab-runner 停止 gitlab-runner stopchkconfig gitlab-runner off卸载 gitlab-runner uninstall删除rpm包 查询出rpm包名,根据包名删除rpm。 [rootEuler02 ~]# rpm -qa …

Nacos配置中心总结

Nacos配置中心总结 Nacos配置文件的加载顺序和优先级 加载顺序 nacos作为配置中心时,需要在bootstrap.yml文件中添加nacos config相关的配置,这样系统启动时就能先去拉取nacos server上的配置了。拉取过来后会和本地配置文件进行合并。 bootstrap.ym…

赛博周刊·2024年度工具精选(图片资源类)

1、EmojiSpark emoji表情包查找工具。 2、fluentui-emoji 微软开源的Fluent Emoji表情包。 3、开源Emoji库 一个开源的emoji库,目前拥有4000个emoji表情。 4、中国表情包大合集博物馆 一个专门收集中国表情包的项目,已收录5712张表情包,并…

Goland:专为Go语言设计的高效IDE

本文还有配套的精品资源,点击获取 简介:Goland是JetBrains公司开发的集成开发环境(IDE),专为Go语言设计,提供了高效的代码编辑、强大的调试工具和丰富的项目管理功能。其智能代码补全、强大的调试与测试支…

小程序发版后,用户使用时,强制更新为最新版本

为什么要强制更新为最新版本? 在小程序的开发和运营过程中,强制用户更新到最新版本是一项重要的策略,能够有效提升用户体验并保障系统的稳定性与安全性。以下是一些主要原因: 1. 功能兼容 新功能或服务通常需要最新版本的支持&…

EasyExcel(环境搭建以及常用写入操作)

文章目录 EasyExcel环境搭建1.创建模块 easyexcel-demo2.引入依赖3.启动类创建 EasyExcel写1.最简单的写入1.模板2.方法3.结果 Write01.xlsx 2.指定字段不写入Excel1.模板2.方法3.结果 Write02.xlsx 3.指定字段写入excel1.模板2.方法3.结果 Write03.xlsx 4.按照index顺序写入ex…

典型常见的基于知识蒸馏的目标检测方法总结三

来源:Google学术2023-2024的顶会顶刊论文 NeurIPS 2022:Towards Efficient 3D Object Detection with Knowledge Distillation 为3D目标检测提出了一种知识蒸馏的Benchmark范式,包含feature的KD,Logit的cls和reg的KD&#xff0c…

通过Dockerfile来实现项目可以指定读取不同环境的yml包

通过Dockerfile来实现项目可以指定读取不同环境的yml包 1. 挂载目录2. DockerFile3. 运行脚本deploy.sh4. 运行查看日志进入容器 5. 接口测试修改application-dev.yml 6. 优化Dockerfile7. 部分参数解释8. 优化不同环境下的日志也不同调整 Dockerfile修改部署脚本 deploy.sh重新…

开源的go语言统一配置中心 - nacos + nacos go sdk

配置文件实时更新机制的场景需求 配置文件热更新主要应用于需要在不停机的情况下动态调整系统行为的场景,例如修改服务参数、切换数据源等。其原理在于通过一个中心化的管理平台来存储和分发最新的配置信息。当配置文件发生变化时,该平台会主动或被动地…

对45家“AI+安全”产品/方案的分析

一. 关键洞察 “AI+安全”创新非常活跃,一片百家争鸣之势,赛道选择上,以事件分诊Incident Triage、 安全辅助Security Copilots、自动化Automation三者为主为主,这充分反映了当前安全运营的主要需求,在产品理念选择上以 AI 和 自动化为主,这确实又切合上了在关键…

GESP202412 三级【数字替换】题解(AC)

》》》点我查看「视频」详解》》》 [GESP202412 三级] 数字替换 题目描述 小杨有一个包含 n n n 个数字的序列 A A A,即 A [ a 1 , a 2 , … , a n ] A[a_1,a_2,\ldots,a_n] A[a1​,a2​,…,an​],他想将其中大于 k k k 的数字都替换为序列的最大…

springboot集成websokcet+H5开发聊天原型(二)

本文没有写完~~~~ 聊天相关数据结构&#xff1a; 我们初步设计了如下几个数据结构。 //存放 sessionId 与 userId 的map private Map<String,String> sessionId_userId new HashMap<>(); // 用于存储用户与群组的关联关系&#xff0c;键为用户ID&#xff0c;值…

List接口(源码阅读)

文章目录 1.List接口常用方法1.代码2.结果 2.ArrayList底层机制1.结论2.ArrayList底层源码1.代码2.debug添加第一个元素1.进入2.elementData数组存储ArrayList的数据3.初始化为空数组4.首先确保使用size1来计算最小容量5.如果elementData为空&#xff0c;最小容量就是106.modCo…

Python爬虫(一)- Requests 安装与基本使用教程

文章目录 前言一、简介及安装1. 简介2. 安装 Requests2.1 安装2.2 检查安装是否成功 二、使用 Requests 发送 HTTP 请求1. 发送 GET 请求2. 发送 POST 请求3. 发送 PUT 请求4. 发送 DELETE 请求5. 发送 HEAD 请求6. 发送 OPTIONS 请求 三、传递参数1. GET 请求传递 URL 参数1.1…

风力涡轮机缺陷检测数据集,86.6%准确识别率,11921张图片,支持yolo,PASICAL VOC XML,COCO JSON格式的标注

风力涡轮机缺陷检测数据集&#xff0c;86.6&#xff05;准确识别率&#xff0c;11921张图片&#xff0c;支持yolo&#xff0c;PASICAL VOC XML&#xff0c;COCO JSON格式的标注 数据集下载 yolov11&#xff1a; https://download.csdn.net/download/pbymw8iwm/90206849 yolov…