起源

一组接口测试用例已经在测试平台中编辑好,这时候想在第一条用例执行前插入一条用例,竟发现无从下手

解决思路

经过短暂头脑风暴,我的大脑给出两种解决方案:

方案一: 给测试用例模型添加新属性 「testOrder」 , 用于表示该用例的执行顺序。

后端改动:

新增用例,和修改用例接口中实现 「testOrder」 属性的添加以及修改,并且需要在 执行用例 接口中将一组接口用例按照 「testOrder」 顺序执行。

仔细一想其实也并非那么简单,新增用例时,需要先搜索当前用例组中最大的 「testOrder」 值,然后将 「最大的testOrder值」+ 1 后写入用例中。这样的话需要给新增用例接口加个锁,否则可能会导致一组用例中存在相同的 「testOrder」 值。

还有,在修改用例顺序时,需要将当前用例所属用例组中部分用例执行顺序进行重新排序更新 「testOrder」 值。还有 ... ... ... ...

既然你(我)都(也)不想听了那么我们进入方案二好了咯

方案二: 用例执行顺序改为按照「创建时间」执行。实现一个「复制用例」的功能同时「间接实现用例插入」

后端改动:

首先在获取测试用例时多加一个sort排序即可,代码如下:

testing_cases = TestingCase.find({'isDeleted': {'$ne': True}}).sort([('createAt', pymongo.ASCENDING)]) # 我就是传说中的 sort排序
复制代码

然后新增一个复制用例的接口,也不复杂,核心代码如下:

# 先获取原用例数据
test_case = TestingCase.find_one({'_id': ObjectId(case_id)})
# 去除原用例_id属性
test_case.pop('_id') if test_case.get('_id') else None
# 去除原用例createAt属性
test_case_create_at = test_case.pop('createAt') if 'createAt' in test_case else datetime.datetime.utcnow()
# 获取新用例的「创建时间」
new_test_case_create_at = get_new_create_at(test_case_create_at) # 划重点 划重点 划重点
# 设置新用例的名称后缀便于区分
new_case_name_suffix = '(复制版)'
# 设置新用例名称
new_case_name = test_case.pop('name') + new_case_name_suffix \if 'name' in test_case else '未知接口用例' + new_case_name_suffix
# 赋值
test_case['createAt'] = new_test_case_create_at
test_case['name'] = new_case_name
# 插入数据
TestingCase.insert(test_case)
复制代码

过程就是先将待复制用例中的 _id 以及 createAt 属性去除,然后根据原有用例创建时间生成新用例的创建时间, 接着设置新用例名称后将数据插入数据库。

相信大家都对上面代码中的 get_new_create_at 函数抱有好奇心 :)

#TODO 防止意外最好加个?
def get_new_create_at(create_at):time_quantity = 1while True:new_create_at = create_at - datetime.timedelta(milliseconds=time_quantity)find_result = list(TestingCase.find({'createAt': new_create_at}))has_identical_create_at_case = True if len(find_result) > 0 else Falseif not has_identical_create_at_case:return new_create_atelse:time_quantity += 1
复制代码

总结成一句话就是拼命往前找,直到找到整个用例库中不存在的用例创建时间为止。

前端改动:

新增一个复制按钮即可。

最终方案

作为一个有追求的人,当然是选择方案二了。

效果展示环节:

可以清晰看到每复制一个用例,都会在当前用例「创建时间」前创建新用例 (列表数据默认按照创建时间倒序排序)。

最终完美实现需求: 在列表中任意用例前后插入新用例。 (如果说要在最后一个用例后面插入新用例的话直接新建用例即可)

感谢读者耐心看完这篇文章,觉得有意思的点个赞哦~

有任何问题或者对笔者测试平台感兴趣的话欢迎扫码关注一下 公众号 「智能自动化测试」 哦:)

--坚持每天进步一点点,你将会在不远的将来看到不一样的自己

转载于:https://juejin.im/post/5ced261b6fb9a07ec07fa012

灵机一动之优雅实现用例顺序插入相关推荐

  1. 【数据结构】堆的建立(边输入数据边建立)(给定数字顺序插入)

    堆的建立有两种方式,一个向上调整,一个向下调整,这两个得到的结果可能不同 向上调整一般用于边输入数据边建立,是给定数字顺序插入 向下调整一般是将所有结点先加入到一棵完全二叉树中,然后对二叉树的所有非叶 ...

  2. Python 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。

    给定排序数组和目标值,如果找到目标,则返回索引. 如果没有,请返回索引按顺序插入的索引. 您可以假设数组中没有重复项. Example 1: Input: [1,3,5,6], 5 Output: 2 ...

  3. java输入数据插入if_java编程,从键盘录入10个整数数据,将每次录入的数据按从小到大的顺序插入到数组中。...

    匿名用户 1级 2015-06-06 回答 楼主你好,先说一下我对这道题目的认识吧. 1.输入10个数,一次按顺序插入.核心考察的应该是2点 1) 给定一个数组和一个整数n,找到这个数应该插入的位置. ...

  4. 按顺序插入图片_MysqlInnodb特性之插入缓存

    InnoDB存储引擎的关键特性包括插入缓冲.两次写(double write).自适应哈希索引(adaptive hash index).这些特性为InnoDB存储引擎带来了更好的性能和更高的可靠性. ...

  5. LaTex按照作者姓名et al.格式以及引用顺序插入参考文献

    LaTex按照作者姓名et al.格式以及引用顺序插入参考文献 前言 一.按照引用顺序插入参考文献 二.在保持引用书序的基础上,加入姓名et al的格式 总结 前言 今天刚刚解决的一个小问题,怕自己忘 ...

  6. java单向链表按顺序插入节点

    实现步骤: 1.首先找到新添加的节点的位置,是通过辅助变量(指针),通过遍历来实现. 2.新的节点 next = temp.next. 3.将temp.next = 新的节点. package com ...

  7. 【伪类与伪元素】用CSS伪元素(以:before为例)插入图片

    [伪类与伪元素]用CSS伪元素(以:before为例)插入图片 对于一些小图标类型的图片,若使用<img>略微有些麻烦,iconfont是一个不错的选择用起来也相当灵活,但是所需要步骤较为 ...

  8. 如何优雅地在 microsoft word 插入代码块

    如何优雅地在 microsoft word 插入代码块 此步骤适用于文档中需要插入代码或者某些特定的段落 1. 选择菜单表格 2. 选择1*1表格 3. 设置字体 4. 在表格下选择底纹为灰,边框为无 ...

  9. 如何优雅的在word中插入代码-方法汇总

    方法一:借助转换网站(强烈推荐) 参考知乎讨论 https://www.zhihu.com/question/31544667 网站截图 高亮代码效果图: 方法二:用word自带样式 (所用模板文件下 ...

最新文章

  1. AXI总线基本知识:(基于uart_lite IP核)
  2. Future 模式介绍
  3. 解决Loadrunner报not writing pre_cci.ci问题
  4. net5:Theme主题样式的动态变换,在内容页content中操作影响模板页的操作
  5. nyist-组队赛(六)
  6. java递归实现 堆的删除_java 递归实现删除或查询指定目录下的全部文件
  7. boost::log相关用法的测试程序
  8. 神经网络可视化,真的很像神经元!
  9. Drupal Working with nodes, content types and fields
  10. Cisco 4507R+E四引擎VSS故障解决
  11. 激光雷达+imu_多款激光雷达性能测估
  12. Tableau Desktop【包含各个版本】
  13. 离散时间信号处理第三版英文版课后习题答案
  14. node.js 快速入门
  15. AI之语音转写项目实践
  16. 《创新思维训练》2021网课章节测验及答案
  17. 手机图形计算器matlab,Mathlab图形计算器
  18. SA上传吞吐率优化经验总结
  19. Graz技术大学计算机图形与视觉小组PEGASUS项目介绍
  20. java商城系统和php商城系统哪个好?

热门文章

  1. layui模板引擎laytpl判断为null或为空
  2. myeclipse报错:The superclass javax.servlet.http.HttpServlet was not found on the Java Build Path
  3. VB 按指定编码格式写入文本文件
  4. 炒股的最终下场(搞笑趣图)
  5. 微软遭30万人实名抗议:非人道的1914万美元,能不能别赚?
  6. 英伟达老黄又来送大礼,全新Titan V CEO限量版GPU火力全开
  7. 建模数据科学家的福音:MIT系特征自动构造工具今日发布
  8. append导致TypeError: 'NoneType' object is not iterable
  9. iOS分段选择器、旅行App、标度尺、对对碰小游戏、自定义相册等源码
  10. Linux下Ipython安装