边缘计算平台EdgeGallery前端源码分析03-应用测试认证平台

news2024/10/2 22:27:04

1 首页

(1)Nav导航栏

代码路径  atp\atp-fe\src\components\layout\Nav.vue

(2)Banner图片区域

代码路径 atp\atp-fe\src\pages\home\Home.vue

点击详情跳转到 测试用例管理 页面(后面分析)

<div class="banner">
  <img
    src="../../assets/images/bannercn.png"
    alt=""
    class="banner-img"
    v-if="language==='cn'"
  >
  <img
    v-else
    src="../../assets/images/banneren.png"
    alt=""
    class="banner-img"
  >
  <el-button
    class="view-case"
    @click="jumpTo('/testcasemanage')"
  >
    {{ $t('userpage.seeDetail') }}<span class="right">></span>
  </el-button>
</div>

(3)测试模型管理

测试模型管理包括 测试场景管理 测试套管理和测试用例管理,分别点击,可以进入对应的页面(具体yemian)

<div
  style="background-color: #f7f5f9;"
  class="padding_deafult"
>
  <div class="modelmanage">
    <div class="mainmodel">
      <div class="title">
        <p class="toptext">
  .........................

(4)任务管理和贡献管理

点击查看列表,会跳转到对应的页面(后面进行详细分析)

// 任务管理跳转按钮
<el-button
    class="common-btn"
    @click="jumpTo('/tasklist')"
    >
    {{ $t('home.viewList') }}
    </el-button>
// 贡献管理跳转按钮
<el-button
    class="common-btn"
    @click="jumpTo('/contributionList')"
  >
    {{ $t('home.viewList') }}
  </el-button>

(5)数据统计

<div class="statisticdata">
    <div class="left">
      <div class="title">
        <p class="toptext">
          {{ $t('home.Statistics') }}
        </p>
        <p class="bottomtext" />
        <p
          class="leftdetail"
        >
  ....................

(6)Footer区域

该区域使用的是 eg-view(官方自己的组件库实现的,如需定制化修改,需要发布私有的npm包)

代码路径 atp\atp-fe\src\components\common\Footer.vue

2 测试模型

2.1 测试场景管理

代码路径  atp\atp-fe\src\pages\ModelMgmt\ScenariosManage.vue

页面挂载会调用getAllScene函数,获取页面展示的数据

getAllScene () {
      this.form.locale = this.language === 'cn' ? 'ch' : 'en'
      Userpage.getAllSceneApi(this.form).then(res => {  // 调用接口
        this.scenarios = res.data
      }).catch(() => {
        this.$message({
          showClose: true,
          duration: 2000,
          message: this.$t('promptMessage.getSceneFail'),
          type: 'warning'
        })
      })
    },
getAllSceneApi: function (params) {
    let url = 'testscenarios'
    return GET(url, params)
  },

(1)批量导入

<el-dialog
    :visible.sync="addExcelVisible"
    :close-on-click-modal="false"
    width="30%"
    :title="$t('modelmgmt.importCase')"
    append-to-body
    class="addtestdialog commondlg"
  >
  .................

点击确定后,执行BatchImport函数,

BatchImport () {
  let fd = new FormData()
  fd.append('file', this.batchForm.batchFile[0])
  ModelMgmt.importTestModelApi(fd).then(res => {
    this.addExcelVisible = false
    this.$message({
      showClose: true,
      duration: 2000,
      type: 'warning',
      message: '上传成功'
    })
    this.getAllScene()
    this.batchForm = {
      batchFile: []
    }

调用接口

importTestModelApi: function (params) {
    let url = 'testmodels/action/import'
    return POST(url, params)
  }

(2)新增

<el-dialog
  :visible.sync="addTestScenarioVisible"
  :close-on-click-modal="false"
  :title=" $t('testCase.addTestScenario')"
  width="30%"
  append-to-body
  class="commondlg"
>
............

点击确定后,调用confirmAddTestScenario函数

this.$refs['addTestScenarioForm'].validate((valid) => {
    // 表格校验
    if (valid) {
    // 校验通过
      let addTestScenarioForm = this.addTestScenarioForm
      addTestScenarioForm.icon = this.addTestScenarioForm.icon.length > 0 ? this.addTestScenarioForm.icon[0] : this.defaultIconFile
      let fd = new FormData()
      fd.append('nameCh', addTestScenarioForm.nameCh)
      fd.append('nameEn', addTestScenarioForm.nameEn)
      fd.append('descriptionCh', addTestScenarioForm.descriptionCh)
      fd.append('descriptionEn', addTestScenarioForm.descriptionEn)
      fd.append('icon', addTestScenarioForm.icon)
      if (addTestScenarioForm.icon.length === 0) {
        this.$message({
          showClose: true,
          duration: 2000,
          type: 'warning',
          message: this.$t('promptMessage.selectIcon')
        })
      } else {
        ModelMgmt.createTestScenarioApi(fd).then(res => {   // 将数据发送给后端
          this.getAllScene()
          this.addTestScenarioVisible = false
          this.clearFormData(this.addTestScenarioForm)
.........................

调用接口

createTestScenarioApi: function (params) {
    let url = 'testscenarios'  
    return POST(url, params)
  },

2.2 测试套管理

代码路径  atp\atp-fe\src\pages\ModelMgmt\SuitesManage.vue

页面挂载调用fillOptions函数,获取页面展示的数据

async fillOptions () {
  let cacheArray = []
  let para = { locale: '' }
  para.locale = this.language === 'cn' ? 'ch' : 'en'
  await Userpage.getAllSceneApi(para).then(res => {  //发送请求,获取数据
    this.testScenes = res.data
    this.getAllSuites()
  })

请求接口

getAllSceneApi: function (params) {
    let url = 'testscenarios'
    return GET(url, params)
  },

(1)批量导入

<el-dialog
    :visible.sync="addExcelVisible"
    :close-on-click-modal="false"
    width="30%"
    :title="$t('modelmgmt.importCase')"
    append-to-body
    class="addtestdialog commondlg"
  >
  .................

点击确定后,执行BatchImport函数,

BatchImport () {
      let fd = new FormData()
      fd.append('file', this.batchForm.batchFile[0])
      ModelMgmt.importTestModelApi(fd).then(res => {
        this.addExcelVisible = false
        this.$message({
          showClose: true,
          duration: 2000,
          type: 'warning',
          message: '上传成功'
        })
        this.getAllSuites()  // 刷新列表数据
        this.batchForm = {
          batchFile: []
    ........

调用接口

importTestModelApi: function (params) {
    let url = 'testmodels/action/import'
    return POST(url, params)
  }

(2)新增

<el-dialog
  :visible.sync="addTestSuiteVisible"
  :title="$t('testCase.addTestSuite')"
  :close-on-click-modal="false"
  width="30%"
  append-to-body
  class="commondlg"
>
  <el-form
    :model="addTestSuiteForm"
    ref="addTestSuiteForm"
    label-width="auto"
    :rules="rules"
  >
............

点击确定后,调用confirmAddTestSuite函数

confirmAddTestSuite () {
  this.$refs['addTestSuiteForm'].validate((valid) => {
    if (valid) {
      let fd = new FormData()
      fd.append('nameCh', this.addTestSuiteForm.nameCh)
      fd.append('nameEn', this.addTestSuiteForm.nameEn)
      fd.append('descriptionCh', this.addTestSuiteForm.descriptionCh)
      fd.append('descriptionEn', this.addTestSuiteForm.descriptionEn)
      fd.append('scenarioIdList', this.addTestSuiteForm.scenarioList)
      ModelMgmt.createTestSuiteApi(fd).then(res => {  // 数据发送给后端
        this.addTestSuiteVisible = false
        this.getAllSuites()
        this.clearFormData(this.editTestSuiteForm)
      }).catch(() => {
        this.$message({
          duration: 2000,
          message: this.$t('promptMessage.addFail'),
          type: 'warning'
        })
        this.addTestSuiteVisible = false
      })
.........................

调用接口

createTestSuiteApi: function (params) {
    let url = 'testsuites'
    return POST(url, params)
  },

2.3 测试用例管理

代码路径 atp\atp-fe\src\pages\ModelMgmt\TestCaseManage.vue

页面挂载调用getAllcase函数,获取页面展示的数据

async getAllcase () {
  await this.getALlSuites()
  await this.getALlConfig()
  this.pageData = []
  this.form.locale = this.language === 'cn' ? 'ch' : 'en'
  const params = { name: this.form.name,
    type: this.form.type,
    locale: this.form.locale,
    testSuiteIdList: this.form.testSuiteIdList,
    limit: this.limitSize,
    offset: this.offsetPage }
  Atp.getAllCaseApi(params).then(res => {  //获取后端数据
    let data = res.data.results
    this.listTotal = res.data.total
    data.forEach(item => {
      let testSuiteList = []
      item.testSuiteIdList.forEach(Id => {
        if (this.language === 'cn') {
          testSuiteList.push(this.mapCh.get(Id))
        } else {
          testSuiteList.push(this.mapEn.get(Id))
        }
      })
      item.testSuiteNameList = testSuiteList.toString()
      let configList = []
      this.setConfig(item, configList)
    })
    this.pageData = data

(1)批量导入

该部分的功能和2.1,2.2中的批量导入功能一致

<el-dialog
    :visible.sync="addExcelVisible"
    :close-on-click-modal="false"
    width="30%"
    :title="$t('modelmgmt.importCase')"
    append-to-body
    class="addtestdialog commondlg"
  >
    <el-form
      :model="batchForm"
      label-width="100px"
    .................

(2)新增

<el-dialog
    :visible.sync="addCaseVisible"
    :title="dialogTitle"
    :close-on-click-modal="false"
    width="35%"
    append-to-body
    class="addtestdialog commondlg"
  >
 ..................

点击确认后,调用confirmAddCase 函数,校验表单参数,随后发送请求

confirmAddCase () {
  this.$refs['addcaseForm'].validate((valid) => {
     // 校验表单参数
    if (valid) {
      let fd = new FormData()
      let addcaseForm = this.addcaseForm
      fd.append('nameCh', addcaseForm.nameCh)
      fd.append('nameEn', addcaseForm.nameEn)
      fd.append('type', addcaseForm.type)
      fd.append('descriptionCh', addcaseForm.descriptionCh)
      fd.append('descriptionEn', addcaseForm.descriptionEn)
      fd.append('codeLanguage', addcaseForm.codeLanguage)
      fd.append('expectResultCh', addcaseForm.expectResultCh)
      fd.append('expectResultEn', addcaseForm.expectResultEn)
      fd.append('testSuiteIdList', addcaseForm.testSuiteIdList)
      fd.append('testStepCh', addcaseForm.testStepCh)
      fd.append('testStepEn', addcaseForm.testStepEn)
      fd.append('configIdList', addcaseForm.configIdList)
      if (this.confirmBtnApi === 'add') {
        fd.append('file', addcaseForm.file[0])
        Atp.createCaseApi(fd).then(res => { // 发送请求
          this.addCaseVisible = false
          this.getAllcase()
          this.$message({
            duration: 2000,
            showClose: true,
            message: this.$t('promptMessage.addSuccess'),
            type: 'success'
          })

请求接口

createCaseApi: function (params) {
    let url = 'testcases'
    return POST(url, params)
  },

页面主体是一个table表格

<div class="testcase-content">
  <el-table
    :data="pageData"  //table表格的数据来源 =>页面挂载时,调用getAllcase函数,获取到的数据
    class="common-table"
  >
    <el-table-column
      prop="nameCh"
      :label="$t('testCase.caseName')"
    >

3 任务管理

代码路径 
   atp\atp-fe\src\pages\home\TaskList.vue
     atp\atp-fe\src\pages\myApp\ATPTask.vue

页面整体为一个table表格

<div class="task-content">
    <el-table
      v-loading="dataLoading"
      :data="pageData"  // 表格数据
      style="width: 100%;"
      class="common-table"
      @selection-change="handleSelectionChange"
    >
      <el-table-column
        type="selection"
        width="55"
      />

pageData数据的获取是该页面在挂载时,会调用getTaskList函数

getTaskList () {
  const params = { appName: this.form.appName, status: this.form.status, limit: this.limitSize, offset: this.offsetPage }
  Taskmgmt.taskListApi(params).then(res => {  //调用接口,获取数据
    let data = res.data.results
    this.listTotal = res.data.total
    data.forEach((item, index) => {
      let newDateBegin = this.dateChange(item.createTime)
      item.createTime = newDateBegin
      let newDateEnd = this.dateChange(item.endTime)
      item.endTime = newDateEnd
    })
    this.pageData = data  // 获取table表格数据
    this.dataLoading = false

调用接口

taskListApi: function (params) {
    let url = 'tasks'
    return GET(url, params, 'v2')
  },

4 贡献管理

代码路径  atp\atp-fe\src\pages\home\ContributionList.vue

页面挂载会调用getAllcontribution函数,获取页面展示需要的数据

getAllcontribution () {
  const params = { name: this.form.name, limit: this.limitSize, offset: this.offsetPage }
  Taskmgmt.contributionsApi(params).then(res => {  //获取数据
    let data = res.data.results
    this.listTotal = res.data.total
    this.dataLoading = false
    data.forEach((item, index) => {
      let newDateBegin = this.dateChange(item.createTime)
      item.createTime = newDateBegin
    })
    this.pageData = data

调用接口

contributionsApi: function (params) {
    let url = 'contributions'
    return GET(url, params, 'v2')
  },
<div class="content">
  <el-table
    v-loading="dataLoading"
    :data="pageData"
    @selection-change="handleSelectionChange"
    class="common-table"
  >
    <el-table-column
      type="selection"
      width="55"
    />

5 配置管理

代码路径 atp\atp-fe\src\pages\home\ContributionList.vue

页面挂载会调用getAllcontribution函数,获取页面展示所需信息

getAllcontribution () {
  const params = { name: this.form.name, limit: this.limitSize, offset: this.offsetPage }
  Taskmgmt.contributionsApi(params).then(res => {  //发送请求,请求数据
    let data = res.data.results
    this.listTotal = res.data.total
    this.dataLoading = false
    data.forEach((item, index) => {
      let newDateBegin = this.dateChange(item.createTime)
      item.createTime = newDateBegin
    })
    this.pageData = data  //表格数据

调用接口

contributionsApi: function (params) {
    let url = 'contributions'
    return GET(url, params, 'v2')
  },

页面整体结构为table表格构成

<div class="content">
  <el-table
    v-loading="dataLoading"
    :data="pageData"  // 表格数据
    @selection-change="handleSelectionChange"
    class="common-table"
  >
    <el-table-column
      type="selection"
      width="55"
    />

在页面中输入名称搜索触发selectContributionList函数,该函数调用getAllcontribution函数,查询搜索的数据并回显到页面

<el-input
  class="common-input"
  v-model="form.name"
  prefix-icon="el-icon-search"
  :placeholder="$t('testCase.provideNameSearch')"
  @clear="selectContributionList"
  @change="selectContributionList"  //change事件
/>
selectContributionList () {
  sessionStorage.setItem('currentPage', 1)
  this.getAllcontribution()
},
getAllcontribution () {
  const params = { name: this.form.name, limit: this.limitSize, offset: this.offsetPage }
  Taskmgmt.contributionsApi(params).then(res => {
    let data = res.data.results
    this.listTotal = res.data.total
    this.dataLoading = false
    data.forEach((item, index) => {
      let newDateBegin = this.dateChange(item.createTime)
      item.createTime = newDateBegin
    })
    this.pageData = data

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

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

相关文章

交易平台开发:构建安全/高效/用户友好的在线交易生态圈

在数字化浪潮的推动下&#xff0c;农产品现货大宗商品撮合交易平台已成为连接全球买家与卖家的核心枢纽。随着电子商务的飞速发展&#xff0c;一个安全、高效、用户友好的交易平台对于促进交易、提升用户体验和增加用户黏性至关重要。本文将深入探讨交易平台开发的关键要素&…

ARM中多寄存内存访问概念和栈的种类和应用

多寄存器内存访问指令 多寄存器内存访问指令 MOV R1,#1 MOV R2,#2 MOV R3,#3 MOV R4,#4 MOV R11,#0x40000020 STM R11,{R1-R4} 将R1-R4寄存器中的数据存储到内存以R11为起始地址的内存中 LDM R11,{R6-R9} 将内存中以R11为起始地址的数据读取到R6-R9寄存器中 当寄存器…

一劳永逸的方法解决:LNK1168无法打开 xxx.exe 进行写入 报错问题

这种错误的产生原因&#xff1a; 运行程序退出不是按正常流退出&#xff0c;是按窗口右上角的 “X” 来关闭程序&#xff0c;但是后台的xxx.exe控制台程序还在运行&#xff1b;修改程序的代码后再运行&#xff0c;就会报LNK1168的错误&#xff1b; 报错示例&#xff1a; 解决方…

第十七章垃圾回收器

第十七章垃圾回收器 文章目录 第十七章垃圾回收器1. GC分类与性能指标1.1 垃圾回收器概述1.2 垃圾回收器分类1.3 评估GC的性能指标吞吐量暂停时间吞吐量VS暂停时间 2. 不同的垃圾回收器概述七种经典垃圾回收器七种经典收集器与垃圾分代之间的关系垃圾收集器的组合关系如何查看默…

详细讲解Xilinx DDR3 的MIG IP生成步骤及参数含义

前几篇文章讲解了SDRAM到DDR3各自的变化&#xff0c;本文讲解如何使用DDR3&#xff0c;在Altera的Cyclone IV开发板上一般会使用SDRAM作为存储数据的芯片&#xff0c;而Xilinx的S6和7000系列一般使用DDR3作为存储数据的芯片。 从SDRAM芯片内部结构分析其原理&#xff0c;从内部…

【大模型系列】图文对齐(CLIP/TinyCLIP/GLIP)

文章目录 1 CLIP(ICML2021&#xff0c;OpenAI)1.1 预训练阶段1.2 推理阶段1.3 CLIP的下游应用1.3.1 ViLD&#xff1a;zero-shot目标检测(2022, Google)1.3.2 图像检索Image Retrival1.3.3 HairCLIP&#xff1a;图像编辑Image Editing(2022&#xff0c;中科大) 2 TinyCLIP(2023,…

【AI视野·今日Robot 机器人论文速览 第八十三期】Wed, 6 Mar 2024

AI视野今日CS.Robotics 机器人学论文速览 Wed, 6 Mar 2024 Totally 30 papers &#x1f449;上期速览✈更多精彩请移步主页 Interesting: &#x1f4da;SpaceHopper,外星探索多功能三足机器人 (from Robotic Systems Lab, ETH Zurich) Daily Robotics Papers A Safety-Criti…

RAG综述 《Retrieval-Augmented Generation for Large Language Models: A Survey》笔记

文章目录 概述RAG 的定义RAG的框架Naive RAGAdvanced RAGpre-retrieval processRetrievalpost-retrieval process Modular RAG RetrievalEnhancing Semantic Representationschunk 优化 微调向量模型Aligning Queries and DocumentsAligning Retriever and LLM GenerationAugme…

【工具使用-VScode】VScode如何设置空格和tab键显示

一&#xff0c;简介 在提交代码的时候&#xff0c;行末尾的tab和空格不符合规范&#xff0c;但是如果在vscode中不显示tab和空格的话&#xff0c;不能及时的查看到并改正&#xff0c;导致提交代码之后还需要再次进行修改&#xff0c;效率比较低。 代码编辑界面如图所示&#…

1+x中级题目练习复盘(一)

1、MOD(m,n) 返回m除以n的余数 2、物理备份可以分为冷备份和热备份。冷备份又称脱机备份&#xff0c;是指在关闭数据库后进行的备份&#xff1b;而热备份也称为联机备份&#xff0c;是在数据库运行的同时进行备份&#xff0c;但热备份存在着难以维护等风险。 3、删除表使用…

Elastic Stack--05--聚合、映射mapping

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1.聚合(aggregations)基本概念桶&#xff08;bucket&#xff09;度量&#xff08;metrics&#xff09; 案例 11. 接下来按price字段进行分组&#xff1a;2. 若想对所…

8核16G服务器支持多少人?2024年腾讯云8核16G18M轻量服务器

腾讯云8核16G轻量服务器CPU性能如何&#xff1f;18M带宽支持多少人在线&#xff1f;轻量应用服务器具有100%CPU性能&#xff0c;18M带宽下载速度2304KB/秒&#xff0c;折合2.25M/s&#xff0c;系统盘为270GB SSD盘&#xff0c;月流量3500GB&#xff0c;折合每天116.6GB流量&…

Qdrant 向量数据库的部署以及如何在 .NET 中使用 TLS 安全访问

本文介绍如何使用 Docker 部署 Qdrant 向量数据库&#xff0c;以及其相关的安全配置&#xff0c;并演示如何使用 .NET 通过 TLS 安全访问 Qdrant 向量数据库。 文章目录 1. 背景2. Qdrant 向量数据库的部署2.1 Qdrant 向量数据库的安全配置2.2 使用 Docker 部署安全的 Qdrant 向…

vulnstack1--红队靶机(第一部分)

环境搭建 Windows7x64 Windows server8&#xff08;域控&#xff09; Windows server3 注意密码是hongrisec2019&#xff0c;需要测试是否连通 Kali配置 Eth1是桥接的ip 流程 主机发现 目标应该是193 端口扫描 服务扫描 漏洞扫描 看一下web Win7的系统 目录爆破 web利用 …

【开源】SpringBoot框架开发教学资源共享平台

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 课程档案模块2.3 课程资源模块2.4 课程作业模块2.5 课程评价模块 三、系统设计3.1 用例设计3.2 类图设计3.3 数据库设计3.3.1 课程档案表3.3.2 课程资源表3.3.3 课程作业表3.3.4 课程评价表 四、系统展…

gensim 实现 TF-IDF;textRank 关键词提取

目录 TF-IDF 提取关键词 介绍 代码 textRAnk 提取关键词 这里只写了两种简单的提取方法&#xff0c;不需要理解上下文&#xff0c;如果需要基于一些语义提取关键词用 LDA&#xff1a;TF-IDF&#xff0c;textRank&#xff0c;LSI_LDA 关键词提取-CSDN博客 TF-IDF 提取关键词…

JavaEE进阶(15)Spring原理:Bean的作用域、Bean的生命周期、Spring Boot自动配置(加载Bean、SpringBoot原理分析)

接上次博客&#xff1a;JavaEE进阶&#xff08;14&#xff09;Linux基本使用和程序部署&#xff08;博客系统部署&#xff09;-CSDN博客 目录 关于Bean的作用域 概念 Bean的作用域 Bean的生命周期 源码阅读 Spring Boot自动配置 Spring 加载Bean 问题描述 原因分析 …

【stm32】hal库学习笔记--定时器输出PWM波

【stm32】hal库学习笔记–定时器输出PWM波 PWM波原理 输出比较 输入捕获 驱动函数 定时器驱动函数 PWM波驱动函数 定时器基本不使用DMA方式 定时器中断处理通用函数 HAL_TIM_IRQHandler实验一:输出固定占空比PWM波 时钟树配置 PF9 改为tim14CH1 tim14配置 开启tim14全局中…

基础GamePlay知识-矩形碰撞检测

主要介绍AABB碰撞检测下&#xff0c;矩形该如何和矩形进行碰撞检测/和圆形进行碰撞检测。 直接看图&#xff0c;主要是比较两个矩形的边界线的前后关系。 效果 分析什么时候重合 分析什么时候不重合 完整代码 矩形身上挂载 public class Rectangle : MonoBehaviour {public …

MES数据采集设备

在智能制造日益盛行的今天&#xff0c;MES&#xff08;制造执行系统&#xff09;作为连接计划与生产现场的关键环节&#xff0c;其重要性不言而喻。而MES数据采集设备则是MES系统的核心组件&#xff0c;负责实时、准确地获取生产现场的各种数据&#xff0c;为企业的生产决策提供…