测试平台系列(145) 收尾录制接口页面筛选和生成功能

继续创作,加快生长!这是我参与「日新计划 6 月更文应战」的第29天,点击检查活动概况

大家好~我是米洛
我正在从0到1打造一个开源的接口测验平台, 也在编写一套与之对应的教程,期望大家多多支撑。
欢迎重视我的公众号米洛的测开日记,获取最新文章教程!

回顾

上一节我们完成了证书下载功能,并解决了录制到不相关api的问题,但其实我们还差一个地方没有完成。一起来看看:

测试平台系列(145) 收尾录制接口页面筛选和生成功能

首要数据量比较多,我们没有做分页,其实不是太好显现。其次我们不能剔除以及查找我们想要的api,因为我们难免会录制到一些额外的api恳求。

所以今日我们要要点介绍的便是查找剔除接口恳求数据。

调整RequestInfo

  • 挑选接口

    其实antd的Table组件是支撑过滤数据的,不过我看了一下,真的很费事(比起之前)。

测试平台系列(145) 收尾录制接口页面筛选和生成功能

我们大概是要找到这样的组件,让用户可以点击放大镜然后检查对应的数据。

  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一下:

测试平台系列(145) 收尾录制接口页面筛选和生成功能

主要是在url字段这儿,加上searchprops,也便是上面我们贴出来的部分。其他地方我们都微调一下就好。

接着我们来测验下对不对:

测试平台系列(145) 收尾录制接口页面筛选和生成功能

可以看到,查找后还能高亮,比较便利了。至于这个编号,我们需求调整下这儿:

测试平台系列(145) 收尾录制接口页面筛选和生成功能

  • 删去接口

    有时候我们觉得接口太多,很碍事,有些还是重复的,所以我们最好也给个删去的选项。

测试平台系列(145) 收尾录制接口页面筛选和生成功能

接着我们编写onRemoveRecord办法,这儿接纳的参数是一个索引:

测试平台系列(145) 收尾录制接口页面筛选和生成功能

我们通过索引,去后台把redis list里边的数据删掉即可。

编写后端部分

本以为redis list删去数据很便利,成果他并不能依据索引来删去。我们来看看lrem的参数:

测试平台系列(145) 收尾录制接口页面筛选和生成功能

参数分别是key, 要删去的数量,目标value。比方我们有个数组:

[1,2,3,4,5]

我们要删去3,并不能依据索引2来删去,有必要是lrem(key, 1, 3)。也便是删去value=3的1条数据。

这可就犯难了,要知道我们的录制数据存的value都是又长又臭的。在Stack Overflow的帮助下,我找到了一种折中计划:

    1. 先依据索引把value替换为一个固定值
    1. 删去这个固定值的数据

    看起来很合理,缺点是多了一个步骤,并且有必要找一个很独特的值。但其实我们找一个list里边绝壁不存在的值就可以了,比方”DELETED”就可以。

测试平台系列(145) 收尾录制接口页面筛选和生成功能

我们新增一个remove_record_data办法,接着去lset把对应索引的值改为DELETED,最终删去1条DELETED即可。

最终我们在app/routers/testcase/testcase.py参加以下接口即可:

测试平台系列(145) 收尾录制接口页面筛选和生成功能

作用

测试平台系列(145) 收尾录制接口页面筛选和生成功能

测试平台系列(145) 收尾录制接口页面筛选和生成功能

点击删去按钮后,删去了2条数据。

前端部分参加用例生成表单

测试平台系列(145) 收尾录制接口页面筛选和生成功能

我们在用例录制页面也可以挑选对应的项目+目录,生成对应的数据了。之前我们是写死directory_id=5的,现在我们也要进行一下改造:

参加modal,展现对应的表单。

测试平台系列(145) 收尾录制接口页面筛选和生成功能

测试平台系列(145) 收尾录制接口页面筛选和生成功能

现在改从form里边获取directory_id和name了,注意左侧黄色部分是修改,绿色是新增。底部的request_cookies默认也是需求一个字典,所以我们用JSON.parse转换了一下。


今日的内容就到这儿了,我们下期见~