【接口测试】从0不到1的心路历程

这篇具有很好参考价值的文章主要介绍了【接口测试】从0不到1的心路历程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【接口测试】从0不到1的心路历程

我是一名做了三年测试的tester,2020年以功能测试工程师的身份入职北京一家医疗培训公司,入职后为了提高测试效率,接触到接口测试,以下是从零到现在 (还有很大完善的空间,所以不能算是1) 的一些心路历程。

做接口测试的动机

于公司业务和团队现状而言,团队中仅我一名测试,随着产品功能日益丰富,导致回归测试任务量越来越大,紧靠人工回归,效率低,质量低,所以自动化测试势在必行。

于个人职业发展路径而言,每天点点点,看似很忙,但除了对业务流程越来越熟练之外,硬技能长进很慢,要想把测试这条路走宽走远,主动求变是必须的,站在功能测试工程师的角度看职业发展方向,无非就是安全测试、性能测试、自动化测试以及管理方向,刚好公司业务所需,所以决定先从自动化测试入手。

起步阶段,选择JMeter

我认为打算做一件事情之前,如果准备过多,往往会阻碍起步的脚步,过犹不及,不如稍作准备就马上抛竿,实践一下鱼塘里有没有口儿。所以我选择了上手比较容易的JMeter,从接口自动化开始突破。当时手握《全栈性能测试修炼宝典 JMeter实战》这本经典工具书,参考网上优秀的实战经验帖,很快就搭建出了一套200条case的脚本,脚本中尽可能的提取公共变量,解决接口依赖问题。

【接口测试】从0不到1的心路历程

弃用JMeter做接口自动化测试

随着 case 越来越多,发现一旦有接口变更,维护起来的难度极大 (极容易眼花缭乱),有一次因为入参的值多了一个空格,导致我整整找了3个多小时,当发现原因时直接崩溃 (具体是哪个参数值想不起来了,举个例子:正确:${14trainCenterId},错误:${ 14trainCenterId}),就因为在14面前多了一个空格,我在200 多条case,几千参数值中找了整整一下午,至此,决定放弃JMeter。

其实JMeter不适合在团队中做接口自动化测试的另一个重要原因是多人合作编写一个脚本并不是很方便,但介于当时团队中只有我一个人,所以没切实的体会过这个缺点。

虽然弃用JMeter,但在编写接口测试期间,脑子里也形成了一套接口测试case 的编写方法论,比如接口测试case设计需要考虑正常情况 (必填项必填,参数之间的组合,参数值的遍历等等),异常情况 (必填参数参数值为空、为异常值、索性连参数都不写等等),其实接口 case 的设计和业务功能测试 case 设计时的思路差不多,唯一区别可能是手动点点点时一些参数的输入被大前端限制住了,但是接口测试就可以随便传参。

尝试使用Python+unittest+requests

弃用工具那就只好选择编程语言了,当时选择Python其实没那么多高大上的理由,单单是因为看到了那句"人生苦短...",再加上在自动化测试这方面Python的呼声也很高,我自己也倾向做事尽可能的立竿见影,所以没有考虑Java。

要单说仅仅让Python脚本跑起来,也许只需要学一些基础的语法,迟则三五天的事情,再选择一个测试框架,当时选择的是这样的组合:Python+unittest+requests。前期照葫芦画瓢一边学 Python 语法,一边学习测试框架。很快就写出了一套和之前JMeter一样效果的测试脚本(虽然整个项目就仅有两个文件:test_.py 和 run.py,虽然简陋,但是能跑,入门学习是够了的)。至此也算是入了道儿了。

因为我是刚刚起步,团队中也没有这方面的前辈可以指点,所以几乎是摸着石头过河,走了很多弯路 (也许现在走的路也不直),但我每积累一段时间我都会停下来总结思考是不是需要重构,并不会随着思维惯性 瓷蹦蹦 的复制粘贴。截至目前,有三版较大的改动,让我说给你听。

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

【接口测试】从0不到1的心路历程

初具雏形 - 第一代测试框架

简单来说,第一代主要的事情就是搭建基础框架,使用parameterized实现数据驱动测试。

第一代我的目录结构是这样的:

【接口测试】从0不到1的心路历程

其中有4个目录和2个文件,需要解释的可能是public下的custom_tools,我将一些通用方法写在这个文件里,例如获取指定个数个字符串的random_str方法、对参数进行 md5 加密的 to_md5 方法等。

【接口测试】从0不到1的心路历程

【接口测试】从0不到1的心路历程

至于public下的tearDown_methods文件,我当时为了清理测试数据,定义了一些数据删除的方法,举个场景:接口A生成产品、接口B通过商品id编辑商品、接口C通过商品id删除商品。在这个版本中我就把接口C写到了tearDown_methods文件中,然后再在正式的测试脚本文件中定义 teardown 方法调用删除接口(此时可能就有小伙伴质疑了,你这不是脱裤子放屁么,哈哈,我刚开始的时候还认为这种写法很高端,但在不久之后我就意识到了这个问题,所以在后面的版本就改正了)。

【接口测试】从0不到1的心路历程

【接口测试】从0不到1的心路历程

正文-test_tanqiang.py的编写思路是这样的:

为了解决接口依赖的问题(例如上面举的例子:接口A生成产品、接口B通过商品id编辑商品、接口C通过商品id删除商品)我在测试文件的前部分初始化了多个全局变量 (例如 id_product = -1),然后在新增接口中,新增成功后获取产品 id,并赋值给id_product,然后在编辑和删除接口中就能使用这个值。文件结构大致如下:

【接口测试】从0不到1的心路历程

第一版使用parameterized装饰器做了数据驱动测试,完整的一条case如下:

【接口测试】从0不到1的心路历程

另外,我将不同环境和不同端的HOST写到了config文件中。

这个版本也能实现生成测试报告,并发送电子邮件的功能,想的是为日后持续集成做铺垫。

【接口测试】从0不到1的心路历程

第一版的成果和反思:在这种模式下,我一共写了70多个接口的case,实践证明使用Python做接口自动化测试确实比 JMeter 灵活得多,可实践后也发现如下问题:

  • 没必要将测试数据清理的方法单独写在一个文件中,可以直接写在测试类下,因为删除接口也是接口测试的范畴。

  • 数据驱动测试时,将测试数据罗列在测试方法上方,如果接口入参过多,那么在阅读及后期维护上很不方便 (因为得数索引位置)。

  • 数据驱动测试时,如果其中一条 case 断言失败,也不知道具体是其中哪条数据出的问题。

  • 测试case的执行顺序不可控。

【接口测试】从0不到1的心路历程

效率至上 - 第二代测试框架

根据第一代的经验和问题,重构框架,详细如下:

变动1:弃用数据驱动模式,因为做接口自动化测试的初衷就是为了做回归测试(保障原有功能不受影响),而不是通过接口自动化测试发现新的问题。再加上团队中就我一名测试,我的时间重点还是在保障功能测试上。根据以往接口受影响的经验来看,接口如果受影响更多情况会直接500,而不会是type传1接口正常,type接传2接口异常。所以在第二版中,我仅选择每个接口的正常入参,并将测试数据直接写进了测试脚本里。

【接口测试】从0不到1的心路历程

变动2:通过文件、类、测试方法的名称来控制用例的执行顺序。

【接口测试】从0不到1的心路历程

【接口测试】从0不到1的心路历程

变动3:移除public下的teardown_method.py文件,将数据清理接口写进test_xxx文件中的测试类下。

【接口测试】从0不到1的心路历程

变动4:丰富接口断言。接口自动化测试重中之重就是断言设计,所以本次改版丰富了断言类型。

【接口测试】从0不到1的心路历程


(有可能有的小伙伴会发出疑问:问什么都断言了响应的 code,还有必要断言响应的msg吗?我的思考是:如果你所处的团队接口开发比较规范的话其实code和msg断言其中一个就可以了,但我目前的团队并不是很规范,例如有的接口成功的响应是{'code':'2000','msg':'操作成功'},有的接口成功的响应是{'code':'0','msg':'成功'},基于此,我对code和msg都做了断言。)

变动5:接口依赖时采用 “错误先行” 编程思想。(可能有小伙伴会发出笑声,寻思为什么还有这种写法:

self.assertEqual(1, 2, '省份 id 获取失败,所以无法进行新建培训中心操作'),后来我也发现了这个问题,所以在下个版本中改为 “raise KeyError('省份 id 获取失败,所以无法进行新建培训中心操作')”)

【接口测试】从0不到1的心路历程

第二版的成果和反思:在这个模式下我共集成了150个接口的自动化case。不过在实践中又发现了新的问题:如果某条 case 报错,那么报错后我并不能清楚的知道测试时的请求体的具体内容,以及响应体的具体内容。这会让我在排查以及跟开发反馈时很困难(运行完乌压压一片红,具体错在哪不是很明了)。

提升接口测试结果的可信度、持久化接口测试前中后过程中的信息 - 第三代测试框架

我加入这家公司正是团队刚刚起步的时候,所以那时迭代很快,每天都很忙,转眼入职两年了,产品预期的功能都已上线,我们公司主打的本就不是软件,IT部是职能部门,所以一旦该有的功能都有了之后也不会有太多大动作的更新(懂得都懂)。这个时候我就有时间再重新思考下当前的测试脚本了。

最近在反复的读《测试架构师修炼之道第2版》这本书(强烈推荐给大家),书中系统的教授了如何设计测试用例,从其中教授的多参数组合测试方法中得到启发,大致意思就是比如一个接口有3个必填参数(参数A(可取值:1,2,3,4,5)、参数B(0,1)、参数 C(0,1,2)),相互之间没有关联关系,据此可生成5条case:

【接口测试】从0不到1的心路历程

基于此,我又再次想到了数据驱动测试,这次想把测试数据源放在excel中,可能有的小伙伴就会吐槽这种excel模式的数据驱动测试,会觉得在测试前先去整理excel很麻烦。我本次的策略是,不手动在excel中数着格子填写测试数据,而是编写一个生成测试数据的方法,让其自动生成测试数据。整体思维脑图大致如下:

【接口测试】从0不到1的心路历程


(整体思路)

【接口测试】从0不到1的心路历程


(测试前编写生成测试数据的方法(需要根据每个接口编写各自的测试数据生成方法))

【接口测试】从0不到1的心路历程


(将测试运行过程中的 response 的相关信息写入到excel(这个方法可公用))

【接口测试】从0不到1的心路历程


(测试结束后,如果所有断言都通过,则将excel中对应的 case_id 置成绿色(这个方法可公用))

【接口测试】从0不到1的心路历程


(在testcase中调取响应的方法)

【接口测试】从0不到1的心路历程


(测试运行结束后,excel 中的结果)

第三版除此之外的变动主要还有:

1.将原测试脚本中的全局变量全部移到了config文件中,使得测试脚本文件更加整洁;

2.将原测试 case 中不必要的 self.去掉了,只有在断言的时候才加 (self.assertEqual()),例如之前会这么写:self.url = "XXX" self.data = {'id':1} ,现在改成:url = "XXX",data = {'id':1},理论可度娘 “在类方法中添加 self 和不加 self 的区别”,反正我实践结果是加与不加都不影响测试结果,那自然不加(能少写就少写,~.=)。

第三版的成果和反思:目前使用这个版本刚刚写了23个接口的case,虽然看似在写正式脚本前还要先编写一个生成测试数据的方法很麻烦,但实操发现并没有想的那么麻烦,而且这个投入产出比我认为还是很高的。也许以这个模式写的接口数量还不够多,等在沉淀沉淀一定还会发现其他新的问题。

我们的成长不就是不断的发现问题,不断地解决问题,再发现新的问题么,嘿嘿。

罗里吧嗦写了一大推,更多的是对自己在接口测试这方面从开始到现在的一个总结,就像开头说的,因为目前团队中在测试方面能相互沟通的伙伴几乎没有,所以一直都是自己摸着石头过河,走了很多弯路,现在走的路也可能不是直的,我真的真的真的真的很渴望沟通,希望各位佬儿哥佬儿姐能够不吝赐教,将发现的问题或者建议留言给我,如果能添加微信对我指点一二那简直太哇塞了(VX:GXY1162031010)。

其实重构到当前版本仍然有很多问题没有想通该怎么解决,大家帮我盘盘呗

问题1:接口依赖怎么做数据驱动测试?

场景描述:创建产品的接口 A,调用成功之后会提取新建产品的 id,并保存为全局变量(例如:id = -1,接口 A 调用成功后置为新值,例如 id = 100),编辑产品的接口 B,在编写接口 B 生成测试数据的函数中,期望能够读取到 id 的最新值 100,实操后发现是原值-1。这个问题的原因我也知道个大概,因为运行测试前先加载所有的 ddt,然后才会运行 testcase,所以读不到在测试运行中赋予 id 的新值100。有佬儿哥指点,可以把 id = -1 写成 id = [-1],这样ddt就可以在测试运行中读到新值,我测试后确实可以,但又有佬儿哥建议接口依赖不能做数据驱动测试,所以目前还在不断试错、尝试。

问题2:针对查询接口,怎么做断言?

场景描述:新增一个产品,新增成功后拿到产品 id = 100,然后对查询产品接口 C 做断言,我目前的断言策略是 “self.assertIsNotNone(response.json()['data'])”(捂脸),我尝试过断言查询结果的第一条数据的 id 是否等于100,可是这种断言很不稳定,如果有多人在使用,那么列表中的第一条数据很有可能就不是你刚刚添加的数据。所以目前还没想到合适的断言方法。

问题3:在第三版的testcase中,在获取到响应后,都会固定的调用 TD.data_write() 方法,且传参内容很多,并且即使是不同的testcase,在这一步时,传入的参数都是一样的。有没有什么优化方法,可以避免每个testcase都写这么多重复的内容?

【接口测试】从0不到1的心路历程

END

绵薄之力

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

【接口测试】从0不到1的心路历程

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

【接口测试】从0不到1的心路历程文章来源地址https://www.toymoban.com/news/detail-420271.html

到了这里,关于【接口测试】从0不到1的心路历程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【深度学习】模型训练云服务器平台推荐!!!个人心路历程,新手少踩坑

    作为一名深度学习训练小白,想上github下一个一般的网络练练,但是每次千辛万苦地配置好环境,成功运行,没开始几步,就提示显存不够! (362条消息) 把显存用在刀刃上!17 种 pytorch 节约显存技巧_听 风、的博客-CSDN博客_降低显存占用 上网一搜一大堆教程,改小batchsize,清

    2023年04月22日
    浏览(45)
  • 我是如何成为一名全栈工程师的?

    经历了将近一年的时间,我终于阶段性地完成了从iOS开发到后端开发的角色转变。 现在我可以自豪地说,我已经接近一名全栈工程师了,已经熟悉了后端开发的各种工具、环境和一些后端工作的方式。 接下来,我将继续熟悉框架、工具、语言,并继续深入研究后端的一些技

    2024年02月10日
    浏览(49)
  • 解决pip安装torch库出现问题(本人自己安装心路历程,希望对你有用)

    本人刚开始使用的python 3.11.0 博主按照以前下载库的方法一样,输入 pip install torch 然后系统报错为: ERROR:Could not find a version that satisfies the requirement torch 当我输入更新指令: python -m pip install --upgrade pip 再次输入pip install torch cmd命令栏中输入: pip install torch -i https://pypi.douban.com/s

    2024年01月21日
    浏览(43)
  • postman测试接口接收不到参数

    最近写封装成VO的类作为controller的参数,使用@RequestBody注解进行修饰,用postman进行测试时,接收不到参数,但是请求可以成功返回。 排查后发现是由于@RequestBody注解引包时引用错了 替换成springframework.web.annotation.*后参数接收正常

    2024年02月12日
    浏览(37)
  • Midjourney API 接口对接历程

    Midjourney是一个基于Discord环境的画图工具,它提供API接口用于扩展功能。对于程序开发者来说,Midjourney只能在Discord环境下使用,这限制了它的使用范围。本文将介绍使用Midjourney的API接口进行开发发过程中遇到的一些问题。 内测地址:由于不符合1万张门槛,登录被拒绝 无法

    2024年02月11日
    浏览(47)
  • 8年测试工程师分享,我是怎么开展性能测试的(基础篇)

    性能测试的工作是基于系统功能已经完备或者已经趋于完备之上的,在功能还不够完备的情况下没有多大的意义(后期功能完善上会对系统的性能有影响,过早进入性能测试会出现测试结果不准确、浪费测试资源);因此,性能测试首先是基于功能测试的,你必须了解其功能

    2024年02月05日
    浏览(43)
  • 一名8年测试工程师,因为偷偷接私活被····

     接私活 对程序员这个圈子来说是一个既公开又隐私的话题,不说全部,应该大多数程序员都有过想要接私活的想法,当然,也有部分得道成仙的不主张接私活。但是很少有人在公开场合讨论私活的问题,似乎都在避嫌。就跟有人下班后跑滴滴一样,程序员私有时间接点活挣

    2024年02月06日
    浏览(32)
  • 作为一名测试工程师,进行商城的测试用例设计思路是什么?

    进行商城的测试用例设计时,可以考虑以下思路: 1. 功能测试:测试商城的基本功能是否正常工作,包括用户注册、登录、浏览商品、搜索商品、添加商品到购物车、下单、支付等。 2. 数据验证测试:验证商城中的数据是否正确、完整和一致,包括商品信息、价格、库存、

    2024年02月08日
    浏览(38)
  • 做为一名测试经理,这2年我都做错了哪些事?!

    我是一名测试经理,在过去的两年时间做了两件事,团队从0到1的搭建和从QC到QA转型。这两年没有什么精彩的故事,都是一次次的尝试-失败-尝试的过程。 公司背景 近两年主要做项目外包。客户是央企,我们做完的项目要过他们的测试部验收,测试超过两轮要罚款。他们通过

    2024年02月01日
    浏览(39)
  • 阿里9年测试经验告诉你:作为一名年薪40w自动化测试需要具备那些能力

    前言 前段时间张同学问我说:我已经功能测试2年多了,在功能测试的阶段中也一直在自学自动化测试,有了一定的代码基础还学习了很多的工具,问题是我不知道自动化测试到底需要具备什么样的能力。 我相信有很多小伙伴也是在思索这个问题,在这里我今天以9年的自动化

    2023年04月23日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包