如何构建高效的接口自动化测试框架(文档+视频讲解)

news2024/11/18 7:52:37

在选择接口测试自动化框架时,需要根据团队的技术栈和项目需求来综合考虑。对于测试团队来说,使用Python相关的测试框架更为便捷。无论选择哪种框架,重要的是确保 框架功能完备,易于维护和扩展,提高测试效率和准确性。今天勇哥介绍一个基于Python的接口自动化测试框架,结合了Python的Unittest框架、Requests库以及数据驱动思想,帮助您更好地实现接口测试。

1. 接口自动化测试项目框架简介

搭建接口自动化测试框架的技术栈如下:

语言:Python,简洁高效,上手容易,无压力;人生苦短,我用 python;

测试框架:Unittest,封装自定义断言方法进行验证,如:eq\lt\lte\gt\gte\neq\str_eq等等;

接口调用:Requests库,提供不同的HTTP请求方法,支持session和cookies,支持失败请求重发等;

数据驱动:数据驱动测试(DDT),以用例数据来生成测试用例

数据管理:Openpyxl,用于进行Excel数据的读写,同时支持CSV、JSON、YAML、TXT等数据格式;

依赖管理:封装各类强大的工具库,如正则、jsonpath、字典取值的方式获取请求数据、响应数据;

变量管理:封装全局变量,临时变量,环境变量,动态管理各类变量,动条调用函数,前后置脚本等;

动态脚本:封装PM对象,让动条变量除了可以使用{{args}} 或{{func(*args,**kwargs)}}的方法使用变量外,还要能够类似postman一样灵活编写python动态代码;

数据库交互:PyMySQL,根据不同数据库选择相应的第三方模块来完成交互;

数据格式转换:Eval,JSON,用于将数据在不同格式之间进行转换;

日志处理:Logging,统一日志输出格式,记录渠道、级别和执行结果,便于问题定位;

持续集成:Jenkins,通过配置定时执行测试用例、查看测试通过率,解决重复发版带来的重复工作,并使用插件unittestreport生成HTML报告和发送邮件;

同时,我也为大家准备了一份软件测试视频教程(含面试、接口、自动化、性能测试等),就在下方,需要的可以直接去观看,也可以直接点击文末小卡片免费领取资料文档

软件测试视频教程观看处:

B站封神的接口测试教程,30天练完70个项目实战(含自动化测试、性能测试),学完即就业,永久白嫖!

2. 接口测试流程

接口测试步骤可以概括如下:

获取接口文档:首先要与开发团队协作,获取接口文档,了解每个接口的功能和参数要求。

设计接口测试用例:根据接口文档,设计接口测试用例,覆盖正常场景、异常场景以及边界值等情况。

编写接口测试代码:使用Python Unittest框架,结合Requests库发起接口调用,并在测试用例中进行断言验证。

执行接口测试用例:执行编写好的接口测试用例,对接口进行验证。

发现问题与跟踪:如果发现接口问题,及时记录并提交至缺陷管理平台,与开发团队协作解决问题。

性能测试:对接口的并发情况和响应时间进行测试,确保接口性能满足要求。

3. 接口测试用例设计

接口测试用例设计要从以下几个方面入手:

正常场景验证:保证接口按照需求返回正确结果,根据接口文档的参数要求传入合适的数据,验证接口返回结果是否符合预期。

参数组合验证:对于接口有多个参数的情况,验证不同参数组合下接口的行为是否正确,包括必填和可选参数的组合。

异常验证:测试接口对异常情况的处理,例如输入异常值、多输入、少输入参数等,确保接口能正确处理异常情况并返回合理结果。

安全性验证:对于涉及安全的接口,例如登录接口,验证用户名和密码的加密是否安全可靠。

性能测试:测试接口的并发情况和响应时间,确保接口能在高负载下稳定运行。

4. 接口测试执行中的数据库校验

为了确保接口返回的数据与数据库中的数据一致或者业务流程脚本编写,有时候需要使用数据库:

数据库预置数据:在测试前,可以预先在数据库中插入需要的测试数据,然后接口测试用例执行时,校验接口返回的数据与预置的数据是否一致。

接口调用比对:接口测试用例执行时,通过调用数据库查询的方式,获取接口需要的数据,然后与接口返回的数据进行比对,确保一致性。

数据清理:在接口测试用例执行完毕后,进行数据清理,将测试过程中产生的垃圾数据从数据库中删除,以保持数据库的干净和整洁。

流程数据预埋:执行某些接口前,先插入固定数据,流程开始后读取固定数据,实现业务流的运转,最好再删除数据。

5. 接口测试质量评估标准

接口测试的质量评估八股文如下:

业务功能覆盖是否完整:确认接口测试用例是否覆盖了所有的业务功能点。

业务规则覆盖是否完整:检查接口测试用例是否涵盖了所有的业务规则和边界情况。

参数验证是否达到要求:验证接口对不同参数的处理是否符合预期,包括参数边界和业务规则。

接口异常场景覆盖是否完整:测试接口在异常情况下的处理是否正确,确保系统在异常情况下能正确稳定运行。

接口覆盖率是否达到要求:确认接口测试用例是否覆盖了所有接口,包括不同的场景和输入组合。

代码覆盖率是否达到要求:检查接口测试代码的覆盖率,确保所有关键逻辑都得到验证。

性能指标是否满足要求:对接口的性能进行测试,确保在高负载下接口仍能稳定运行。

安全指标是否满足要求:验证接口的安全性,确保数据传输和存储的安全性。

6. 接口测试中依赖第三方数据的处理

如果依赖第三方数据的接口有时候难以直接调用接口处理时,可如下处理:

使用Mock工具:利用Mock工具(如:JSON Server、Easy Mock)模拟第三方数据接口的返回数据,降低对第三方数据的依赖性,加快开发和测试速度。

编写虚拟接口:在接口测试用例中,编写虚拟接口,直接返回模拟的第三方数据,以达到测试的目的。

编写代理接口:如果无法模拟第三方数据,可以编写代理接口,将测试请求转发到真实的第三方数据接口,并在接口测试用例中校验代理返回的数据是否正确。

直接往数据库中插入数据或者更改某条数据的信息,达到模拟第三方接口正常的情况。

如果有一些回调接口,直接利用第三方回调的参数格式修改某些变量,自己手动触发回调修改数据,提高稳定。

7. 接口测试项目的数据管理

在接口测试项目中,不同类型的数据需要灵活地进行管理和存储:

Excel数据管理:对于较小规模的数据或者静态数据,可以使用Excel来管理测试数据 (1万条数据以内比较推荐)。Python中的Openpyxl库可以很方便地读取和写入Excel数据,同时支持其他数据格式的转换。

yaml文件:对于非常小规模的数据或者配置文件数据,可以使用yam来管理测试数据 (数据量200以内可以考虑)。Python中yaml库读取和写入yarm文件还是很方便的。同时这个文件可以注释。

数据库交互:对于大规模的数据或者需要频繁变更的数据,可以使用数据库来存储测试数据。Python中的PyMySQL库可以实现与数据库的交互,方便数据的读取和写入。

数据驱动思想:数据驱动测试(DDT)是一种测试方法,通过读取测试数据源来动态生成和执行测试用例。这种方式可以使得测试数据和测试用例分离,降低代码的冗余。

数据缓存:在测试过程中,为了提高测试效率,可以将已经处理过的数据进行缓存,下次测试时直接使用缓存数据,避免重复请求或计算。

配置文件:一些接口测试中的配置信息,例如接口URL、账号密码等,可以单独放在配置文件中,便于管理和修改。

8. 解决接口文档缺失问题

遇到接口文档缺失的情况,解决思路如下:

与开发沟通:与开发人员直接沟通,了解接口的参数和预期结果,根据开发人员提供的信息编写测试用例。

抓包分析:通过抓包工具(如Fiddler、Wireshark)来分析接口的请求和响应,从中提取接口的参数和数据,以及接口的行为和返回结果。

数据库查询:对于接口数据存储在数据库中的情况,可以通过查询数据库来获取接口的数据,并根据数据设计测试用例。

源码接口分析:对于代码能力强的童鞋,可以直接拉去开发的项目代码去分析有哪些接口及参数去设计测试用例(有这个能力还写个毛接口测试??)。

日志分析:通过日志查询(如elk,tail)等等获取接口的请求和响应,从而设计测试用例。

9. 自动化测试框架的好处

搭建一个自动化测试框架对于接口测试项目有很多好处:

提高测试效率:自动化测试可以快速执行大量测试用例,提高测试效率和执行速度。

减少重复工作:通过自动化测试,可以减少人工测试中的重复性工作,提高测试人员的生产力。

提高测试准确性:自动化测试可以避免人为因素对测试结果的影响,提高测试的准确性。

持续集成和持续交付:通过自动化测试框架,可以实现持续集成和持续交付,加快软件的开发和交付速度。

灵活性和可扩展性:自动化测试框架可以根据项目的需要进行定制和扩展,适应不同项目的需求。

当然,很多童鞋会觉得市面那么多开源工具及框架,直接拿来主义使用就好,为啥还要自己整呢?嗯确实没错,但是在座的各位还是得考虑一下换工作(被迫换工作)时,坐在你对面的面试官要怎么应付吧...

10. 解决接口产生的垃圾数据

解决接口产生的垃圾数据常用解决思路如下:

数据库回滚:在测试用例执行完成后,使用数据库事务回滚将数据还原到测试前的状态,确保数据不会对接口环境产生影响。

数据清理脚本:编写数据清理脚本,定期执行数据清理操作,删除过期或不再需要的测试数据,保持数据库的整洁。

定时任务:设置定时任务,定期执行数据清理操作,避免测试数据过多导致数据库性能下降。

自动化数据清理:在自动化测试框架中集成数据清理功能,确保每次测试执行后都能自动清理产生的垃圾数据。

接口闭环调用:对于有新增增删改的接口,执行增改接口后,标记数据id等关键信息,在teardown 部分执行批处理调用删除接口。

11. 针对第三方接口常见的测试思路

第三方接口这玩意不文档,面试或者工作中遇到的还是比较多。勇哥挖箱底给大家一些思路:

使用Mock数据:可以使用Mock工具来模拟第三方接口的返回数据,以便于测试独立进行,不受第三方数据影响。

数据备份与还原:在接口测试之前,先对第三方数据进行备份,测试完成后再进行数据还原,确保测试对第三方数据没有实质性影响。

数据协调:与第三方数据提供方进行协调,请求提供稳定的测试数据,或者在测试时提供临时的测试环境,避免影响到正式环境数据。

容错设计:在测试时,要考虑到第三方数据不稳定的情况,设计容错机制,使得接口在部分数据缺失或异常时也能正常运行,不影响整体测试流程。

日志监控:监控第三方数据接口的日志,及时发现异常情况,与第三方数据提供方沟通解决。

12. 如果控制接口在整个测试流程中只调用一次

如果有其他接口需要先获取接口信息(例如登录接口),而且希望登录接口只调用一次,并在后续其他接口中使用该登录凭证:

使用Fixture(Pytest)或Setup(Python unittest):在测试框架中,可以使用Fixture或Setup功能,在执行测试用例前,先执行登录接口,并将登录凭证保存到缓存中。后续其他接口执行前,先判断登录凭证是否存在,如果存在,则直接使用,不再重复调用登录接口。

登录接口与其他接口合并:将登录接口与其他接口合并成一个测试用例,保证登录接口在其他接口调用之前执行,且只执行一次。这样可以确保登录凭证在后续其他接口中有效。

使用Session保持登录状态:有些接口测试工具(如Requests-Test)支持Session功能,可以通过Session保持登录状态。在第一次调用登录接口后,Session会自动保存登录凭证,在后续其他接口中直接使用Session即可。

封装登录接口:将登录接口封装成一个单独的函数或类,该函数或类内部维护登录状态,确保登录只调用一次。其他接口调用前,先调用登录函数或类的方法,获取登录凭证。

使用全局变量:在程序中使用全局变量来保存登录凭证,在其他接口中读取该全局变量获取登录凭证,避免重复调用登录接口。

总结

PS:这里分享一套软件测试的自学教程合集。对于在测试行业发展的小伙伴们来说应该会很有帮助。除了基础入门的资源,博主也收集不少进阶自动化的资源,从理论到实战,知行合一才能真正的掌握。全套内容已经打包到网盘,内容总量接近100个G。

☑ 240集-零基础到精通全套视频课程
☑ [课件+源码]-完整配套的教程
☑ 18套-测试实战项目源码
☑ 37套-测试工具软件包
☑ 268道-真实面试题
☑ 200个模板-面试简历模板、测试方案模板、软件测试报告模板、测试分析模版、测试计划模板、性能测试报告、性能测试报告、性能测试脚本用例模板(信息完整)

这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。

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

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

相关文章

最新版小说泛站群系统源码 小说泛目录站群源码系统程序/PHP语言(源码+教程)

源码简介: 新版小说泛目录站群系统网站源码(小说站群源码),PHP小说泛站群系统程序,网站优化泛目录站群源码,新版小说泛站群系统源码,小说站群源码,小说泛目录站群源码PHP语言操作简…

《合成孔径雷达成像算法与实现》Figure5.4

clc clear close all%% 参数设置 Ta 128; % 脉冲持续时间 Ka -0.085; % 方位向调频率 alpha_OS [5,0.25]; …

《Python趣味工具》——自制emoji(4)计算机二级考试题

前面我们学习了如何制作emoji,相信你也是有很多想法了吧!今天我们就来看看几道计算机二级考试真题。 1. 绘制套圈 使用turtle库的circle()函数和seth()函数绘制套圈。 最小的圆圈半径为10像素,不同圆圈之间的半径差是40像素。 ps:注意要和题…

【生物信息学】奇异值分解(SVD)

目录 一、奇异值分解(SVD) 二、Python实现 1. 调包np.linalg.svd() 2. 自定义 三、SVD实现链路预测 一、奇异值分解(SVD) SVD分解核心思想是通过降低矩阵的秩来提取出最重要的信息,实现数据的降维和去噪。 ChatG…

针对敏感数据的安全转录服务

即便在新冠肺炎疫情期间,继续保持了最高级别的机密性 新冠肺炎疫情带来的各种限制向所有服务提供商提出了挑战,促使提供商们想方设法采取更富想象力的新方法来满足客户的需求。澳鹏采用了一种由两种方案组成的工作机制,服务于客户机密材料的…

systrace使用注意事项

打开systrace文件报错:Unable to select a master clock domain because no path can be found from “SYSTRACE” to “LINUX_FTRACE_GLOBAL”. 使用systrace生成的trace.html文件无法打开,或者报上面的错误,可以选择下面这个方式&#xff1…

Springboot 实践(19)负载平衡配置与运用

前文Springboot 实践(1)至Springboot 实践(18),我们分别讲解了springboot数据源配置、swagger-ui测试controller、整合security、整合Oauth2.0、服务注册、路由配置以及配置中心等单例功能开发,实现了各个系…

Avalonia开发(一)环境搭建

一、介绍 开源 GitHub:https://github.com/AvaloniaUI/Avalonia/多平台支持,包括Windows、mac OS、Linux、iOS、Android、Samsung Tizen(很快支持)、WebAssemblyIDE支持,Visual Studio扩展支持,JetBrains …

NLP技术如何为搜索引擎赋能

目录 1. NLP关键词提取与匹配在搜索引擎中的应用1. 关键词提取例子 2. 关键词匹配例子 Python实现 2. NLP语义搜索在搜索引擎中的应用1. 语义搜索的定义例子 2. 语义搜索的重要性例子 Python/PyTorch实现 3. NLP个性化搜索建议在搜索引擎中的应用1. 个性化搜索建议的定义例子 2…

学习笔记-接口测试(postman、jmeter)

目录 一、什么是接口测试 二、前端和后端 三、get请求和post请求的区别 四、cookie和session 五、接口测试的依据 六、HTTP状态码 七、通用接口用例 八、postman接口测试 九、Jmeter接口测试 一、什么是接口测试 通常做的接口测试指的是系统对外的接口,比…

【深度学习】 Python 和 NumPy 系列教程(九):NumPy详解:1、创建数组的n种方式

目录 一、前言 二、实验环境 三、NumPy 0. 多维数组对象(ndarray) a. 多维数组的属性 1. 创建数组 a. 使用numpy.array函数: b. 使用numpy.zeros函数 c. 使用numpy.ones函数 d. 使用numpy.arange函数 e. 使用numpy.linspace函数 …

旋转链表-双指针思想-LeetCode61

题目要求:给定链表的头结点,旋转链表,将链表每个节点向右移动K个位置。 示例: 输入:head [1,2,3,4,5], k2 输出:[4,5,1,2,3] 双指针思想: 先用双指针策略找到倒数K的位置,也就是(…

根据商品ID获得淘宝商品详情, 获得淘宝商品详情高级版,获得淘宝商品评论, 获得淘宝商品快递费用 ,获得淘口令真实,批量获得淘宝商品上下架时间)

参数说明 通用参数说明 参数不要乱传,否则不管成功失败都会扣费url说明 https://api-gw.…….cn/平台/API类型/ 平台:淘宝,京东等, API类型:[item_search,item_get,item_search_shop等]version:API版本key:调用key,测试key:test_…

火山引擎A/B测试在消费行业的案例实践

更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 近日,火山引擎数智平台举办了“走进火山-全链路增长:数据飞轮转动消费新生力”的活动,其中火山引擎数智平台DataTester产品负责人…

家居设计软件Live Home 3D Pro mac中文版特点介绍

Live Home 3D Pro mac是一款专业的3D家居设计软件,可以帮助用户轻松创建和设计家居平面图和3D模型,并进行渲染和虚拟漫游。​​​​​​​ ​Live Home 3D Pro mac软件特点 1. 界面友好:Live Home 3D Pro的界面友好,操作简单方便…

MyBatis基础之SqlSession

SqlSession 线程安全问题 当你翻看 SqlSession 的源码时,你会发现它只是一个接口。我们通过 MyBatis 操作数据库,实际上就是通过 SqlSession 获取一个 JDBC 链接,然后操作数据库。 SqlSession 接口有 3 个实现类: #实现类1Defa…

北斗+渔业:且看北斗卫星如何提升渔业监管水平

近日,为确保渔业船舶海上航行安全和管理,海南省农业农村厅近日发布通告:全省小型海洋渔船须于今年9月30日前完成北斗船载终端安装,大中型海洋渔船须于今年11月30日前同时完成北斗船载终端和“插卡式AIS”终端安装。 近年来&#x…

两种风格的纯CSS3加载动画

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>加载动画</title><style>.loader {w…

调用feign接口时手动设置请求头信息

调用feign接口手动设置请求头 一 需求场景&#xff1a;二 解决方法2.1 feign接口添加RequestHeader的注解2.2 provider正常从请求头获取参数2. 3 consumer手动传参2.4 测试 一 需求场景&#xff1a; 我们在provider服务有些参数是从请求头中获取的&#xff0c;但是consumer服务…

单元测试的重要性:编写更安全、更可靠的代码

在软件开发过程中&#xff0c;测试是非常重要的一环。而在众多的测试方法中&#xff0c;单元测试占据了不可忽视的地位。那么&#xff0c;为什么我们需要进行单元测试呢&#xff1f;以下将从理论和实践两方面进行详细的解释。 一、单元测试的定义和目的 单元测试是指对软件中的…