继续创作,加快生长!这是我参与「日新计划 6 月更文应战」的第29天,点击检查活动概况
大家好~我是
米洛
!
我正在从0到1打造一个开源的接口测验平台, 也在编写一套与之对应的教程
,期望大家多多支撑。
欢迎重视我的公众号米洛的测开日记
,获取最新文章教程!
回顾
上一节我们完成了证书下载
功能,并解决了录制到不相关
api的问题,但其实我们还差一个地方没有完成。一起来看看:
首要数据量
比较多,我们没有做分页,其实不是太好显现。其次我们不能剔除
以及查找
我们想要的api,因为我们难免会录制到一些额外的api恳求。
所以今日我们要要点介绍的便是查找
和剔除
接口恳求数据。
调整RequestInfo
-
挑选接口
其实antd的Table组件是支撑过滤数据的,不过我看了一下,真的很费事(比起之前)。
我们大概是要找到这样的组件,让用户可以点击放大镜
然后检查对应的数据。
const getColumnSearchProps = (dataIndex: DataIndex): ColumnType<DataType> => ({
filterDropdown: ({ setSelectedKeys, selectedKeys, confirm, clearFilters }) => (
<div style={{ padding: 8 }}>
<Input
ref={searchInput}
placeholder={`Search ${dataIndex}`}
value={selectedKeys[0]}
onChange={e => setSelectedKeys(e.target.value ? [e.target.value] : [])}
onPressEnter={() => handleSearch(selectedKeys as string[], confirm, dataIndex)}
style={{ marginBottom: 8, display: 'block' }}
/>
<Space>
<Button
type="primary"
onClick={() => handleSearch(selectedKeys as string[], confirm, dataIndex)}
icon={<SearchOutlined />}
size="small"
style={{ width: 90 }}
>
Search
</Button>
<Button
onClick={() => clearFilters && handleReset(clearFilters)}
size="small"
style={{ width: 90 }}
>
Reset
</Button>
<Button
type="link"
size="small"
onClick={() => {
confirm({ closeDropdown: false });
setSearchText((selectedKeys as string[])[0]);
setSearchedColumn(dataIndex);
}}
>
Filter
</Button>
</Space>
</div>
),
filterIcon: (filtered: boolean) => (
<SearchOutlined style={{ color: filtered ? '#1890ff' : undefined }} />
),
onFilter: (value, record) =>
record[dataIndex]
.toString()
.toLowerCase()
.includes((value as string).toLowerCase()),
onFilterDropdownVisibleChange: visible => {
if (visible) {
setTimeout(() => searchInput.current?.select(), 100);
}
},
render: text =>
searchedColumn === dataIndex ? (
<Highlighter
highlightStyle={{ backgroundColor: '#ffc069', padding: 0 }}
searchWords={[searchText]}
autoEscape
textToHighlight={text ? text.toString() : ''}
/>
) : (
text
),
});
这仅仅只是针对一个字段要加的办法,可以看到十分的复杂,包含设置高亮
,编辑文本
等状况。不过好在官方给了个实例,我们就cv一下:
主要是在url字段这儿,加上searchprops,也便是上面我们贴出来的部分。其他地方我们都微调一下就好。
接着我们来测验下对不对:
可以看到,查找后还能高亮,比较便利
了。至于这个编号,我们需求调整下这儿:
-
删去接口
有时候我们觉得接口太多,很碍事,有些还是重复的,所以我们最好也给个
删去
的选项。
接着我们编写onRemoveRecord办法,这儿接纳的参数是一个索引:
我们通过索引,去后台把redis list里边的数据删掉即可。
编写后端部分
本以为redis list删去数据很便利,成果他并不能依据索引
来删去。我们来看看lrem的参数:
参数分别是key, 要删去的数量,目标value。比方我们有个数组:
[1,2,3,4,5]
我们要删去3,并不能依据索引2来删去,有必要是lrem(key, 1, 3)。也便是删去value=3的1条数据。
这可就犯难了,要知道我们的录制数据存的value都是又长又臭
的。在Stack Overflow的帮助下,我找到了一种折中计划:
-
- 先依据索引把value替换为一个固定值
-
- 删去这个固定值的数据
看起来很合理,缺点是多了一个步骤,并且有必要找一个很独特的值。但其实我们找一个list里边绝壁不存在的值就可以了,比方”DELETED”就可以。
我们新增一个remove_record_data办法,接着去lset把对应索引的值改为DELETED,最终删去1条DELETED即可。
最终我们在app/routers/testcase/testcase.py参加以下接口即可:
作用
点击删去按钮后,删去了2条数据。
前端部分参加用例生成表单
我们在用例录制
页面也可以挑选对应的项目+目录,生成对应的数据了。之前我们是写死directory_id=5的,现在我们也要进行一下改造:
参加modal,展现对应的表单。
现在改从form里边获取directory_id和name了,注意左侧黄色部分是修改
,绿色是新增
。底部的request_cookies默认也是需求一个字典,所以我们用JSON.parse转换了一下。
今日的内容就到这儿了,我们下期见~