【接口自动化】写接口自动化case要注意的点!

news2024/11/18 3:32:38

可能有人会说,写接口的自动化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"] == 0
    assert result["data"]["content"][-1]["id"] == 10087
    assert result["data"]["content"][-1]["winWay"] == 0

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

现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:691998057【暗号:csdn999】

二、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语句,然后针对性的改动即可。

各位朋友如果有关软件测试的任何问题,欢迎文章后留言,谢谢。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1352210.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

APM32 移植 RTX5

打开APM32的 一个官方例子或者模板工程, MKD格式 更改工程属性,将编译器换为V6: 然后勾选 Use MicroLIB; 接着: 接着: 接着确认 然后编译,会报260个错误: 然后 打开工程树中 下面的文件: 如果用的是M4内核,添加下面的定义:

2SK3019 中低压MOSFET 60V 100mA 双N通道 SOT-723封装

2SK3019小电流双N通道MOSFET,电压60V电流100mA,采用SOT-723封装形式。适用于低RDS (on)的高密度电池设计,压控小信号开关,坚固可靠,ESD保护。可应用便携式设备的负载开关,电池开关上。

探索 CodeWave低代码技术的魅力与应用

目录 前言1 低代码平台2 CodeWave简介3 CodeWave 的独特之处3.1 高保真还原交互视觉需求3.2 擅长复杂应用开发3.3 支持应用导出&独立部署3.4 金融级安全要求3.5 可集成性高3.6 可拓展性强 4 平台架构和核心功能4.1 数据模型设计4.2 页面设计4.3 逻辑设计4.4 流程设计4.5 接…

【STM32F103】TIM定时器PWM

定时器分类 STM32F1中除了互联型产品(STM32F103C8T6为64KB Flash 中容量产品),其余有8个定时器。 可以8个定时器分为高级,通用,基本三种。 高级定时器有两个,分别是TIM1和TIM8。 通用定时器有四个&…

SD-WAN:提升连锁零售企业异地组网稳定性

连锁零售企业往往拥有众多分布在不同地区的分支机构和零售店,为保证企业高效运转,各地区之间的网络连接必须稳定可靠。但基于各地网络基础设施的不同和网络延迟、带宽等限制,异地组网往往并不稳定。在这背景下,SD-WAN成为连锁零售…

频谱论文:空间频率插值的无线电地图 Space-Frequency-Interpolated Radio Map

#频谱# K. Sato, K. Suto, K. Inage, K. Adachi and T. Fujii, "Space-Frequency-Interpolated Radio Map," in IEEE Transactions on Vehicular Technology, vol. 70, no. 1, pp. 714-725, Jan. 2021, doi: 10.1109/TVT.2021.3049894. 东京理科大学&#xff0…

MBP的新拉力=800MT+凯越525+泛美?

MBP国内新兴品牌,可能部分车友了解,之前专门做欧洲市场的,米兰车展的时候它带来一款比较有意思的车型,型号:T502X,这个502和贝纳利的502关系不大。 据了解,车辆是由高金代工生产的,发动机就是高…

闲置树莓派(linux单片机)做NAS的最简单方案

闲置的树莓派其实可以做nas服务器使用。树莓派单片机5V2A,功耗大概10W。外置移动硬盘盒子12V2A 功耗大概24W。全加起来,功耗一小时30W,一天3角左右的运行成本,速率也可以,非常划算。(其他任何Linux单片机原…

2024年个人工作计划怎么写?新年待办计划这样写更方便

元旦的钟声还在耳边回响,2024年的新篇章已经开启。面对新的一年,我深知一个清晰、实用的个人工作计划是多么重要。它不仅是指引我前进的灯塔,更是我实现目标、提升效率的秘密武器。 但如何制定这样一个计划呢?在过去,…

边框渐变色+圆角

这两个同时写,圆角不会生效 li {width: 282px;height: 96px;margin-right: 20px;box-sizing: border-box;border: 1px solid transparent;background-image: linear-gradient(#fff, #fff),linear-gradient(to right, #8efd9f, #07cbfb);background-origin: border-b…

【C语言】作用域 和 生命周期

🚩 WRITE IN FRONT 🚩 🔎 介绍:"謓泽"正在路上朝着"攻城狮"方向"前进四" 🔎🏅 荣誉:2021|2022年度博客之星物联网与嵌入式开发TOP5|TOP4、2021|2222年获评…

Sectigo企业的通配符证书续费

首先,我们要知道SSL证书是有期限的,通常SSL证书的有效期为一年,在SSL证书到期之前我们需要对其进行续费,从而延续SSL证书对网站的保护。Sectigo是中多的CA认证机构之一,申请速度快、性价比高,很多子域名站点…

如何用python新建一个文件,python怎么新建一个文件

大家好,小编来为大家解答以下问题,如何通过python新建一个文件中的文件,如何通过python新建一个文件夹并命名,现在让我们一起来看看吧! 文章目录 前言 1. 使用内置的open函数2. 使用with关键字3. 使用os模块总结零基础…

值得推荐的 5 个前端性能测试工具

前言 PageSpeed Insights 谷歌开发的一个免费的网页分析工具,在地址栏中输入被分析的网站url地址,点击分析, 可模拟移动设备访问页面结果分析 桌面设备访问页面结果分析 前端开发工程师,可以根据这个报告进行页面优化 Lighthous…

HTML语义化的理解

HTML语义化是指在编写HTML代码时,合理地选择适当的标签和属性来描述页面的结构和内容,使得代码更具有可读性、可维护性和可访问性。 可读性:通过使用语义化的标签,可以清晰地表达页面的结构和内容,使得代码更易于阅读和…

基于多反应堆的高并发服务器【C/C++/Reactor】(中)在EventLoop的任务队列中添加新任务

任务队列是一个链表,每个节点包含channel类型、文件描述符和操作类型。在添加节点时,需要考虑线程同步,并确保节点被正确地添加到链表中。节点的操作可以写到另一个函数中,以便于程序的维护。在添加任务节点时,需要加互…

快速打通 Vue 3(三):Vue3 中的 watch 监听器与新特性

很激动进入了 Vue 3 的学习,作为一个已经上线了三年多的框架,很多项目都开始使用 Vue 3 来编写了 这一组文章主要聚焦于 Vue 3 的新技术和新特性 如果想要学习基础的 Vue 语法可以看我专栏中的其他博客 Vue(一):Vue 入…

线程死锁检测组件逻辑与源码

死锁介绍 任务的执行体之间互相持有对方所需的资源而不释放,形成了相互制约而都无法继续执行任务的情况,被称为“死锁”。 死锁案例 线程A持有锁a不释放,需要去获取锁b才能继续执行任务, 线程B持有锁b不释放,需要去…

winform简易用户权限管理系统

一、功能简介 1. 数据库可使用sqlite、mssql、mysql等 2. 管理员账号不管控,其余账号进行权限管控(左侧菜单,表单按钮),且只能看到自己创建的角色、用户 二、操作界面 1. 管理员账号登陆后,左侧菜单栏自动…

【Spark精讲】SparkSQL的RBO与CBO

Spark SQL核心:Catalyst Spark SQL的核心是Catalyst查询编译器,它将用户程序中的SQL/Dataset/DataFrame经过一系列操作,最终转化为Spark系统中执行的RDD。 Catalyst组成部分 Parser :用Antlr将SQL/Dataset/DataFrame转化成一棵未经解析的树…