• 0
  • 0
分享
  • 思考:如何让自动化框架更自动化——软件测试圈
  • 曼倩诙谐 2023-12-28 15:02:50 字数 2325 阅读 893 收藏 0

  一、引言

  对于大厂的同学来说,接口自动化是个老生常谈的话题了,毕竟每年的MTSC大会议题都已经能佐证了,不是大数据测试,就是AI测试等等(越来越高大上了)。不可否认这些专项的方向是质量智能化发展的方向,但是凡事都遵循2/8定律,80%的从事软件测试的同学或许对这些并不感冒,因为大部分测试同学分布于中小厂,而他们大多停留在如何更好更快地进行接口自动化的阶段。

  小厂质量团队地位低,在团队中发言分量轻,项目中往往处于劣势,项目的测试时间不能保证,更别提搞什么高大上的质量专项了,能把接口自动化测试做好就是大事一件,节省不少时间了。

  因此,聊聊接口自动化还是非常有必要的。

  二、“JMeter式”的自动化设计思路

  毫无疑问,聊起接口自动化,大家可能第一时间联想的就是自动化工具、自动化框架,例如JMeter、Postman等。这些工具学习成本小,掌握这些工具用法算是一条腿迈进了自动化测试大门。当然我建议大多数测试菜鸟先从工具的使用学起,话说“读书百遍,其义自见”,用多了你也就理解了工具本身的设计(模式)精髓,为将来自己动手设计工具打好基础。

1-1.png

  我也曾设计过接口测试工具,但是现在回过头再看看开发出来的东西,或多或少有些JMeter的影子!是的比葫芦画瓢,JMeter已经在你脑海里先入为主了,你开发的接口测试工具有它的影子也不足为怪。换句话说,这或许是JMeter式的重复造轮子。

  以我之前设计的测试工具为例,使用它就要动手搜集接口信息,动手组装入参,动手写断言。。这TM就是和使用JMeter写用例要做的事情一样的嘛!

  JMeter式的自动化测试,我认为是“高级”的手工测试。自研的测试框架写用例往往需要代码基础,但是写过的都知道,业务用例代码重复度挺高的。而更重的在于用例的维护,毕竟大家写的代码风格迥异,维护的难度更大,甚至不如JMeter的用例维护来的方便。

  意识到这个问题后,我也尝试在github上搜索stars比较多的开源自动化工具,遗憾的是这些框架始终摆脱不了这个“设计套路”。例如:

1-2.png

  当然,说上面这些并非不建议大家开发接口自动化测试框架,自研的接口测试框架同样有很多优点。

  1、测试工具开发的测试用例往往不易于维护,试想一下当你维护JMeter生成的各种JMX文件场景。

  2、大量的测试用例可重用性差,例如登陆模块,每个接口调用前都要获取cookie,而登陆则是前置模块,使用JMeter开发用例需要每个JMX文件都要包含登陆,重复度太高。

  3、无法满足自动化平台诉求,短期内确实可以快速实现自动化,但是这些工具对于平台非自动化能力的拓展成本较高,毕竟改动开源工具的成本比自研高很多。

  4、使用开源工具不利于提升团队在自动化技术方面的成长。自动化能力的提升离不开编程能力的提升,使用开源工具能提升工具学习使用能力,最终你的成长无外乎又掌握了一个测试工具的使用。

  那么,如何摆脱JMeter式的传统思路,用更多的自动化代替手工??

  三、让自动化框架更自动化

  接口自动化的核心是什么?接口、数据、断言。

  正如上文说的,这也是我们手工重复度比较高的工作内容,也是痛点所在。

  传统的自动化用例设计,往往需要人工采集接口信息(例如抓包,然后写脚本提取接口信息HTTP Type、Method、Request等),人工造入参数据等,这些重复度是极高的。更进一步来说,人工造入参数据更是痛中之痛,毕竟不同的业务需要构造的request内容是不同的。

  那么如何自动化实现呢?

  不妨大家先考虑我们是在哪里获取的这些信息。例如接口信息,你是否有过通过开发者工具提取接口信息?是否有过解析Charles工具har文件提取接口信息?以及解析swagger等接口文档工具。。。。然后通过提取的接口信息生成自动化框架所需的接口请求service。

  但是,接口信息就在那里,为什么还要将其从一种载体中提取出来再转化为另一种类型的接口信息。难道直接使用类似har文件、swagger的接口信息就不行吗?当然是可以的。例如美团的Lego测试平台。

1-3.png

  可以直接解析其他接口测试工具文件里的接口信息,以下拉列表的方式供测试使用者选择要写用例的接口,当然该接口request、Method等信息要同步填充到对应的输入框。这样就省去手工输入接口信息的时间。

  刚刚说了,构造入参数据是痛中之痛?这部分如何自动化?

  我的答案,入参数据从线上服务器日志里去取。试问,我们构造的数据难道有线上业务真实跑出来的数据更贴合我们要测试的业务吗?当然没有。

  so,线上服务器的日志格式务必要规范化,这样可以方便我们提取xx接口的请求数据。有条件的公司可能会有自己的分布式链路追踪,这样可以基于trace提取出某个接口的请求和响应的所有信息。

  断言怎么自动化?

  其实这个的解法和第2个问题一样,我们在从日志中提取接口信息的同时,肯定也是有xx request参数下的xx response相应信息,我们可以将此次的响应信息作为基准,下次相同的request再次请求的时候,得到的响应和基准响应做比较就行了。当然,这个其实也是流量回放的思路。

  四、总结

  本文是我对此前设计的一个测试框架的反思,当时设计框架的“上下文”(即团队基建能力、以及自身的设计水平和负责的项目的业务架构等背景)和现如今所在的公司质量基建是有很大差别的(有时候很多想法的实现是需要一定基建能力支撑的)。在一定程度上,也算是站的更高,看的更远吧。


作者:佚名    

来源:http://www.51testing.com/html/66/n-7792766.html

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 一、测试常见问题和流程篇1、介绍一下测试流程(重点,常见!)需求评审、测试计划、测试用例、用例评审、冒烟测试、测试执行、验收测试、风险评估、上线\观察、问题跟进、测试报告、复盘会议;根据自己的日常经验来回答,每个点的工作内容都需要清晰掌握,有可能就某个点如何工作进行提问。2、介绍一下测试方法按阶段:单元测试、集成测试、系统测试、验收测试按手段:黑盒测试、白盒测试、灰盒测试其他:冒烟测试、回归测试3、介绍一下测试用例设计方法(用例设计方法&测试方法需分清楚)黑盒测试用例设计:等价类划分法、边界值分析法、错误推测法、因果图法、正交试验分析法、流程分析法白盒测试:语句覆盖、判定覆盖、条件覆盖...
            8 8 821
            分享
          • 前言下面将详细说说微信小程序如何发布体验版(测试环境)和线上版(生产环境)小程序如何打包1、打开微信开发者工具,并使用微信扫码登录2、打开已经编写好的小程序代码项目3、当代码编写完成后,点击上传4、上传完成后,登录微信公众平台,点击版本管理,刚刚打包上传的版本就是最新的体验版5、如果需要将体验版转为线上版本,那么就点击体验版的提交审核按钮,补充审核资料即可6、体验版审核成功后,会出现在审核版本上,点击审核版本的发布生产,即可将此版本转为线上版本,此时在微信就可以搜出最新的生产环境的小程序了作者:Boale_H原文链接:https://blog.csdn.net/Boale_H/article/...
            0 0 5669
            分享
          • 兼容性测试方案兼容性问题屏幕分辨率兼容性问题;软件(iOS和Android系统版本及不同厂家的定制ROM)兼容性问题;硬件(不同的CPU、内存大小等等)兼容性问题;网络(2G/3G/4G/WIFI)兼容性。公司内部兼容性测试1、屏幕分辨率、软件版本和硬件兼容性通过客户端嵌入统计SDK,统计出当前已有用户的分辨率、软件版本和手机使用排行;购买相应排名前十位的设备,这三个属性可相互交叉覆盖到即可注:解决的是基本和必须的兼容性问题。2、网络兼容性通过购买不同的手机卡支持相应的2G/3G/4G,和使用公司现有的WIFI网络解决网络兼容性问题。最终需要在测试用例中体现。3、辅助工具monkey随机事件测...
            0 0 1195
            分享
          • 1、场景在做性能测试时,单台机器进行压测可能达不到预期结果。主要原因是单台机器压到一定程度会出现瓶颈。也有可能单机网卡跟不上造成结果偏差较大。例如4C8G的window server机器,使用UI方式,最高压测在1800并发(RT 20ms以内)左右。如果对于XML文件进行解析,更容易吃CPU,并发数会更低。当单台机器不能支持更大的并发时需要考虑分布式压力测试。 2、原理原理图如下:Jmeter分布式测试时,选择其中一台作为调度机(master),其它机器做为执行机(slave)master通过GUI界面启动slave机器,将jmeter压测发送给每台启动的slaveslave启动j...
            6 8 3513
            分享
          •   一、接口的产生  1、接口的定义  一般来说,接口分为硬件类接口和软件类接口。银行系统的接口一般指的是软件接口,软件接口分为两种:  (1)程序内部的接口:方法与方法、模块与模块之间的交互,程序内部抛出的接口,用于模块与模块之间的交互,使用于自身的系统。  (2)系统对外的接口:与银行别的业务系统之间的交互。由于对方系统不会提供数据库共享,只提供一个写好的方法,让其对接,业务系统需通过这个写好的方法,来获取自身系统想要的数据。这个写好的方法,就是对外的接口。  2、接口的分类  接口一般分为两种:  (1)webService接口:走soap协议通过http传输,请求报文和返回报文都是xm...
            0 1 1256
            分享
      • 51testing软件测试圈微信