测试平台系列(33) 编写环境配置页面(下)

简介: 编写环境配置页面(下)

阅读本文可能需要一些时间,建议通勤/蹲坑的时候观看。

回顾


上篇编写了一部分结构,还剩下表格没有编写。以及和后端接口的联调,也会在本文补充。

补充Table内容


在此之前,我们给新增环境这个按钮加一个icon,这样会更直观。

icon地址: https://ant.design/components/icon-cn/

21.jpg

点击复制

22.jpg

image

23.jpg

其实icon也是一个组件,我们把它嵌入到Button

补充Table组件


需要注意的是,这里和html有大不一样的地方了。因为我们需要用到antd的Table组件,所以我们按照规矩行事,根据它需要的参数传入对应的数据就行。

24.jpg

先理解一下官网的最基本的表格例子


  • dataSource
    一个json数组,里面呢,存放的是数据信息,这个数据我们从哪儿来呢?从后端接口/config/environment/list获取。
  • columns
    这个是表格的列配置信息,也是个json数组,key代表列的key,title代表表头的名字,dataIndex代表从dataSource的数据里面取什么字段,比如上图的address,代表这一列的内容是从address里面取的。

25.jpg

我们先copy官网的代码,看看效果

26.jpg

可以看到,我们实现了想要的效果

但是这样还不够,数据和内容都不是我们想要的,所以我们还需要改造。

  • 改写columns
    我们有自己需要展示的列和字段:

27.jpg

image

其实我们需要展示id,环境名,备注,创建人和更新时间就可以了。所以列就这几项,但是因为我们还需要编辑某一行和删除某一行的功能,所以我们需要再定义一列。

28.jpg

定义一列操作列

操作列提供了2个链接a,分别是编辑和删除,用Divider隔开,这个是分割线。

  • 暂时改变dataSource的值
    因为这里的数据都是写好了的,并不是真正的接口返回,可以说是假数据。我们为了测试列名显示的情况,我们自己给他进行一些调整。

29.jpg

对应上columns里面的remarks,name,create_user等等

30.jpg

显示效果如下

大体上我们已经完成了html结构的编写,接着我们需要补全功能。其实路还很长,我们需要改动的地方还很多,建议大家耐心看。

拿到真实数据


上述我们是造了一个假数据,那我们怎么拿到真实数据呢?首先,我们需要维护一个变量,举个例子叫: data,它默认是空数组,也就是没数据。当我们请求了/config/environment/list接口以后,更新data变量,由于react会自动判断变量的更新并update页面内容,所以我们需要做的事情就变得很简单了。

  • 维护data变量

31.jpg

image

state大家注意,这个是一个固定的写法,别换成别的,react会自动监听Environment组件的state变量里的数据内容。这么理解,state等于是一个动态变量池,你在里面放入一个data,当state里面的data发生变化,react会自动检测data是否在dom上有显示,有的话就自动更新

同时,我们还要把原来的dataSource去掉,换成data。

  • 编写获取后端的接口

32.jpg

image

这边我们一次性把增删改查的接口都编写好,以便之后去使用。其实就是request请求,然后传入对应的请求方式和url地址+参数等。注意以下图中post和get的区别。

有同学可能注意到了,第一个listEnvironment接口method下面一行的params,怎么不是key-value的形式?有同学知道的吗?

其实这里是一个省略的写法,当key的名字和value变量名一样的时候,可以省掉key。也就是说:

{key: key}可以简写为{key},注意:前面的key是字符串,后面的key是变量。这个大家要搞明白才能玩得转!

  • 需要维护的变量
    由于我们的环境列表获取页支持分页,所以在获取列表的时候,需要加上当前page和size2个参数。这边我们还得维护一个变量: pagination,这样当我们用户切换页码的时候,我们可以去请求对应page的环境列表。

33.jpg

默认current为第1页,pageSize为8,数据总数为0

由于我们的list接口还需要一个name参数,而这个name也会进行更换,所以我们也要维护一个name的变量。

  • 编写获取环境列表的方法

34.jpg

image

这个方法接受page, size和name3个参数,如果不传入的话,默认为state里面的值。为啥要设定参数,这个说来话长,因为react的修改状态不是立马生效的,是异步的。

举个例子,你在翻页的时候,想的是更新了页码的当前页从1->2,然后重新调用fetchEnvironmentList方法,可能还是取的第一页数据。所以我们需要支持参数化,这样更可控

如果请求成功,我们就更新data的数据为response.data, pagination的total字段为res.total。

这里有个细节要值得注意:

我们更新状态,必须用this.setState,不能直接去修改它的值。比如: this.state.data = xxx,这样是不对的。

  • 思考什么时候会发生获取环境列表的调用
    其实有2个地方,第一个是我刚进来,你要给我展示第一页的数据。第二个是我搜索的时候,你也要给我展示新的数据。

35.jpg

image

我们加上一个这样的方法,componentDidMount是react的一个固定的写法,也是继承自Component的方法,代表这个组件加载后执行的方法,这个方法仅仅会被执行一次,满足了我们的需求(一进来就获取环境信息)。

36.PNG

看看效果

那个创建人为1的地方,大家先忽略掉,因为我存的是用户id。

编写查找的方法


首先我们需要改写搜索框,当搜索框的文本有变化的时候,我们需要去更新name,其次是用户点击搜索按钮或回车的时候,我们要去根据输入的内容搜索对应的环境。

  • 改写搜索框

37.jpg

image

注意一下,这个输入框的内容的value是this.state.name,然后onChange是antd为Input输入框提供的方法,e.target.value可以拿到用户输入的新值,接着我们根据新的值改写name即可。

onSearch方法,实际上调用了fetchEnvironmentList方法,第三个参数传入了当前用户输入的name。

38.PNG

image

编写新增/修改功能


其实新增和修改很简单,我们想象有一个对话框,里面可以填写环境名和备注,那不就o了吗?雀氏如此!

复杂的表单,antd都给我们封装好了,博主这里又进一步封装了一层,有兴趣的可以去看具体的源码。

我们想做的就是,点击新增环境按钮,给咱家弹出一个对话框,那对话框啥时候显示,是不是很明了了呢?你点的时候就显示,X掉就不显示了。

所以我们需要一个visible的变量(默认为false),去管理我们对话框是否出现。还需要一条记录record,用于初始化表单的数据。

39.jpg

image

Modal(也就是对话框)我们已经编写好了,onFinish代表的是表单的提交动作,在这里有2种:

  • 新增环境
  • 编辑环境
    怎么区分它们呢?我们根据record里面的id是不是0来区分,如果不是0说明是编辑动作,否则则是新增动作。所以我们在点击新增环境按钮的时候,需要把record也进行下修改。

40.PNG

可以看到我们可以正确获取到表单的数据

接着我们来编写onFinish方法:

41.jpg

image

如果成功提交,我们需要关闭对话框!最终我们重新获取一遍数据,嘿嘿。

最后,我们需要为编辑按钮添加一个点击事件: 显示出对话框并把表单初始化为这行数据。

42.jpg

image

编写删除方法


43.jpg

image

删除很简单,只需要传入record.id给onDelete方法,并调用到后端接口即可。

你以为,这就结束了?其实还有2个地方!有没有想过,我们没有处理table翻页的情况,还有个就是上面的创建人是数字的情况。

编写翻页功能


44.jpg

image

只需要在table的onChange事件里面调用获取环境列表的方法即可。注意,pagination参数是当前你要翻的页面,比如你从第一页到第二页,那么pagination的数据是{current: 2, pageSize: 8},这个大家可以自己console.log输出试试。还得指定pagination参数为this.state.pagination。

简单地替大家尝试一下


45.PNG

image

46.PNG

image


其实拆分不太合理,下篇花了太多时间。但是也不想花费太多篇章了。辛苦大家耐心看完了!不太完整的前端教程就到这里了~




相关文章
|
3月前
|
Kubernetes 测试技术 Perl
混沌测试平台 Chaos Mesh
混沌测试平台 Chaos Mesh
110 1
|
12天前
|
监控 安全 测试技术
构建高效的精准测试平台:设计与实现指南
在软件开发过程中,精准测试是确保产品质量和性能的关键环节。一个精准的测试平台能够自动化测试流程,提高测试效率,缩短测试周期,并提供准确的测试结果。本文将分享如何设计和实现一个精准测试平台,从需求分析到技术选型,再到具体的实现步骤。
50 1
|
30天前
|
人工智能 监控 测试技术
云应用开发平台测试
云应用开发平台测试
46 2
|
12天前
|
监控 安全 测试技术
构建高效精准测试平台:设计与实现全攻略
在软件开发过程中,精准测试是确保产品质量的关键环节。一个高效、精准的测试平台能够自动化测试流程,提高测试覆盖率,缩短测试周期。本文将分享如何设计和实现一个精准测试平台,从需求分析到技术选型,再到具体的实现步骤。
35 0
|
1月前
|
测试技术 数据安全/隐私保护
北邮人论坛登录页面测试用例
北邮人论坛登录页面测试用例
35 1
|
3月前
|
XML JavaScript 测试技术
Web自动化测试框架(基础篇)--HTML页面元素和DOM对象
本文为Web自动化测试入门指南,介绍了HTML页面元素和DOM对象的基础知识,以及如何使用Python中的Selenium WebDriver进行元素定位、操作和等待机制,旨在帮助初学者理解Web自动化测试中的关键概念和操作技巧。
53 1
|
3月前
|
测试技术 Android开发 iOS开发
Appium 是一个开源的自动化测试框架,它支持多种平台和多种编程语言
Appium是一款开源自动化测试框架,支持iOS和Android多平台及多种编程语言。通过WebDriver协议,开发者可编写自动化测试脚本。在iPhone上实现屏幕点击等操作需安装Appium及其依赖,启动服务器,并设置所需的测试环境参数。利用Python等语言编写测试脚本,模拟用户交互行为,最后运行测试脚本来验证应用功能。对于iPhone测试,需准备真实设备或Xcode模拟器。
116 1
|
3月前
|
运维 Kubernetes 监控
|
8天前
|
JSON Java 测试技术
SpringCloud2023实战之接口服务测试工具SpringBootTest
SpringBootTest同时集成了JUnit Jupiter、AssertJ、Hamcrest测试辅助库,使得更容易编写但愿测试代码。
38 3
|
1月前
|
JSON 算法 数据可视化
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
这篇文章是关于如何通过算法接口返回的目标检测结果来计算性能指标的笔记。它涵盖了任务描述、指标分析(包括TP、FP、FN、TN、精准率和召回率),接口处理,数据集处理,以及如何使用实用工具进行文件操作和数据可视化。文章还提供了一些Python代码示例,用于处理图像文件、转换数据格式以及计算目标检测的性能指标。
59 0
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)