可能有人会说,写接口的自动化CASE多简单了,写个参数发送请求完事了,还要注意啥?

没错,相比起UI自动化的case,你要去写各种定位器,接口自动化的case写起来确实容易多了。这也是接口自动化
的一个优点,开发效率更快。

但是写得快,不等于写得好,本章就聊聊接口自动化case的那些事。

一、case要易于阅读和维护

既然是写自动化case,那也是在写代码,那么,代码的可阅读性就不可以忽视。除了python的代码规范,还要注意
case的结构,能让人一目了然。

其实跟我们手动用postman测试接口差不多,把每一步的事情写写清楚就好。
那测试接口通常有三个步骤:

  1. 传入请求参数
  2. 发送请求到接口
  3. 判断接口返回的结果是否符合预期

这样一来,我们在接口的自动化case中也分三步走。

def test_query_activity_manual(init_activitiy_manual, del_activity):'''查询可参与的活动-手动开奖'''payload = {"winWay":0}r = requests.get(activity_url, params=payload, headers=HEADER)result = r.json()assert result["status"] == 0assert result["data"]["content"][-1]["id"] == 10087assert result["data"]["content"][-1]["winWay"] == 0

这样写的话,是不是比较清晰呢?谁都能看懂你的代码,自己调试代码的时候读着也舒心。

二、case的稳定性

1、为什么有人写的case经常报错

比起上面说的易于阅读维护,自动化case的稳定性才是最重要的。如果写的测试case跑起来总是不稳定,容易报错,
那么接口自动化这个事情就做的没什么意义了,使用的人也会对你的框架失去信任。

我相信,大家在写完一个case的时候一定是调试通过的,那么为什么这个case当时能跑,过几天就跑不了呢?在我
观察下来,很多时间都是由于“测试数据”引起的。自动化case依赖的测试数据不稳定,或许你的测试数据被别人无意中删掉了,
又或者你别的case产生的测试数据影响到了你这条case的测试数据等等,都是比较常见的原因。

我在工作中发现有的人喜欢调用接口来生成自己想要的测试数据,就是说依赖另一个接口来产生测试数据。这种方式有着一个
很吸引人的优点,那就是你不用去深入了解被测接口的上下游数据关系,反正调用接口后,系统逻辑会去生成对应的数据。
没错,这一点很诱人,但是当这个产生数据的接口挂了,或者返回了错误数据时,你的case必然就会受到影响了。

另外,还有的人喜欢用上一个case产生的数据来给下一个case用,这同样的道理,上一个接口要是报错了,下一个也必然收到影响,
但是你能说受到影响的case没跑成功是因为接口本身有bug吗?
很显然不能。

2、釜底抽薪,sql生成测试数据

说白了,上述2种情况都是由于生成测试数据的方式不稳定,会产生误伤。那么我是怎么应对的呢?
思路很简单,我直接用sql在测试环境里生成我要的测试数据,用完再删掉不就好了。在工作中,我也确实是这样做的,效果很稳。

另外,最近在解读pytest官方文档中的fixture模块,深深感受到了fixture功能的强大,设计的巧妙。而且人家也强调了,要保持
测试case所处环境的干净。

所以,我的case编写原则就是:任意一个case,任何时候都可以运行,不受其他case的影响。

我通常把单个接口的case放在一个模块里。比如说,有6个接口,我就会写6个模块,每个模块里有着对于这个接口的所有场景的测试,
像参数校验、不同传参导致不同结果的场景(数据驱动)等。

对于这个6个接口的业务流测试,我会单独的放一个模块里,在这个模块里,就只测业务流,证明他们几个的业务逻辑是没问题的,不会
再去关注其中单个接口的其他场景的测试。在业务流测试里,case之间的测试数据是要传递使用的。

3、上述2种方式的优缺点

姑且按照顺序,把上面2种方式称为方式1、方式2吧,其中方式2是我喜欢的方式。

先说方式1的优缺点:

  • 优点:测试人员不需要关注数据库层相关的逻辑关系,简单省事。
  • 缺点:过于依赖其他创建数据的接口,只要依赖接口有问题,case必然受影响。

再说方式2的:

  • 优点:不受其他接口的影响,直接在数据库插入测试数据,用完即删,保证测试环境的干净,测试数据不会影响到其他case。
  • 缺点:测试人员需要清楚业务逻辑背后涉及到的表关系,因为很多接口涉及到的不止一张表,比较麻烦。

其实方式2的缺点比起方式1 ,我觉得也不能算严格意义的缺点吧,虽然你了解表之间关系以及写sql麻烦了点,但是也是加深了
你对业务的理解,最重要的是case稳定了,这样的接口自动化才有意义。

三、个人的一点实操分享

或许有人会认同我的方式了,但是又担心自己写sql写不好,万一出错咋整?

对此,没啥好办法,只能保证都是正确的了。这里有2个建议,可以帮助你去写好sql。

  1. 自己清楚表的逻辑关系最好,不清楚,请找对应的开发请教,并且记录下来。
  2. 通过页面或者接口手动创建数据,然后去数据库里追踪这条数据,通过数据库工具,复制出sql语句,然后针对性的改动即可。

【接口自动化】3.写接口自动化case要注意的点相关推荐

  1. Node 学习 | Day03 express (初识Express、Express 路由、Express 中间件、使用 Express 写接口)

    Express 初识Express 1.1 Express 简介 1.1.1 什么是 express 1.1.2 进一步理解 Express 1.1.3 Express可以做什么 1.2 Expres ...

  2. python 基于unittest写接口自动化脚本

    已过时.如感兴趣,请移步这篇文章 https://blog.csdn.net/tomoya_chen/article/details/121550706 python 基于unittest写接口自动化 ...

  3. 【总结】用pytest写接口自动化测试用例

    1.自动化用例怎么写? 概念问题: 1.功能覆盖率= 至少被执行一次的测试功能点数/ 测试功能点总数 (功能点) 2.需求覆盖率= 被验证到的需求数量 /总的需求数量 (需求) 3.覆盖率= 至少被执 ...

  4. 阿里java接口自动化实践pdf_接口自动化测试设计

    1.接口测试基础 1.1.什么是接口测试? 接口测试是测试系统组件间接口的一种测试. 接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点. 接口测试的重点是要检查数据的交换,传递和控 ...

  5. python接口自动化 一个变量 其他接口要用_python接口自动化(二)--什么是接口测试、为什么要做接口测试(详解)...

    简介 上一篇和大家一起科普扫盲接口后,知道什么是接口,接口类型等,对其有了大致了解之后,我们就回到主题-接口测试. 什么是接口测试 接口测试是测试系统组件间接口的一种测试.接口测试主要用于检测外部系统 ...

  6. python网站设计中接口的作用_python接口自动化(三)--如何设计接口测试用例(详解)...

    简介 上篇我们已经介绍了什么是接口测试和接口测试的意义.在开始接口测试之前,我们来想一下,如何进行接口测试的准备工作.或者说,接口测试的流程是什么?有些人就很好奇,接口测试要流程干嘛?不就是拿着接口文 ...

  7. 亚马逊电商数据自动化管理接口平台JAVA SP-API接口开发(下)

    亚马逊电商数据自动化管理接口平台JAVA SP-API接口开发(下) 重要说明 本文章为亚马逊系列其中的一篇,具体详见 主页 中亚马逊分类 该系列项目均为[CSDN轻夏]原创,未经允许禁止转载 如有疑 ...

  8. 亚马逊电商数据自动化管理接口平台JAVA SP-API接口开发(中)

    亚马逊电商数据自动化管理接口平台JAVA SP-API接口开发(中) 重要说明 本文章为亚马逊系列其中的一篇,具体详见 主页 中亚马逊分类 该系列项目均为[CSDN轻夏]原创,未经允许禁止转载 如有疑 ...

  9. LuckyFrameWeb测试平台(一款支持接口自动化、WEB UI自动化、APP自动化,并且支持分布式测试的全纬度免费开源测试平台)

    官网:luckyframe.cn 源码地址:https://gitee.com/seagull1985/LuckyFrameWeb 分布式测试:使用Web-Client的方式,Web端负责基本信息管理 ...

最新文章

  1. Forrester:全球供应商在中国处于领导地位 但本土供应商却在私有云市场蒸蒸日上...
  2. linux更换主板后无法启动网卡
  3. 计算机统计字符数,如何在Word中统计相同字符(文字)出现的个数 -电脑资料
  4. [python爬虫] BeautifulSoup设置Cookie解决网站拦截并爬取蚂蚁短租
  5. LELE的RPG难题
  6. Zookeeper--Watcher机制源码剖析一
  7. 前端学习(2185):tabberitem和路由结果
  8. Android应用程序结构解析
  9. Java实训项目:GUI学生信息管理系统(2017)
  10. uva10069-Distinct Subsequences
  11. 青橙 A1280. 最长双回文串
  12. 微信小程序API之map
  13. sql语句分页多种方式ROW_NUMBER()OVER
  14. 关于 stylus的全局变量的配置
  15. Mysql触发器与事务
  16. 阿里云张建锋:如何管理超大规模研发团队?
  17. 【Java后台开发规范】--- 日志的输出
  18. 【集合论】集合概念与关系 ( 真子集 | 空集 | 全集 | 幂集 | 集合元素个数 | 求幂集步骤 )
  19. Fedora9 的 初体验
  20. 成功杀掉病毒kpvtctr和hkvaciq

热门文章

  1. 微带线与带状线的区别
  2. php7语法 mysql_php7语法
  3. matplotlib保存图片去除白边
  4. 软文营销如何自我激励创造巨大价值
  5. 华大MCU-----进入深度睡眼不能下载程序
  6. 空白脂质体冻干粉制备以及荧光素修饰空白脂质体的应用
  7. PPT文档中如何插入超链接
  8. ChatGpt会替代码农可行性分析
  9. 在项目中遇到导入TXT乱码现象。为什么UTF-8不行?ANSI是什么编码?
  10. 移动端名片识别SDK