你的自动化框架如何设计的?为什么感觉面试官总是不满意,到底问题出在哪?

news/2024/4/29 7:39:36/文章来源:https://blog.csdn.net/m0_58026506/article/details/128958781

前言


去面试自动化测试岗位,尤其是接口自动化岗位,面试官总会问:说下你的自动化框架如何设计的?

为什么回答后,面试官对你的框架设计总是感觉不满意?

自动化测试实现的几种方式


对于不同的公司来说,实现自动化的方式不太一样,其实不管哪种实现方式,只要能解决工作中的问题,都是好的。

总的来说有以下这几种实现方式:

1.高度依赖于成熟自动化框架或自动化平台

作为一个公司的测试leader ,想要快速把自动化测试落地,年底好写PPT评绩效。那么会找个成熟的开源自动化框架,或者公司不差钱的可以买一些成熟的自动化平台。

如果你是参与者,你只需要按测试leader 部署好的框架或平台去落地就行了

比如:

  • robotframework 等一些成熟的关键字驱动框架,没代码功底的也可以快速入门

  • yapi, apifox, metersphere 或一些大公司自己开发的内部平台化的方案,部署后就可以直接在上面添加用例

  • postman, jmeter 等一些工具的使用

优点:

对于测试人员来说,可以快速参与到自动化项目中,有参与自动化测试的项目经验。

对于测试领导来说,落地快,出成果快,年底好写PPT评绩效(至于用例质量和高效性不care, 反正不是他自己去落实)

缺点:

对于测试人员,你只是在平台上添加用例,那么对你个人来说提升空间不大,一旦哪天脱离了平台,你什么都不是。

对于测试领导,你无法把控用例质量和提升编写用例效率,只能适用于一些常规项目的普通需求,有特殊需求需要二次开发的没能力解决,比如后续CI/CD集成与实施上就没那么灵活了。

2.基于unittest/pytest或junit 等测试框架

公司有招聘专门的自动化专员的,专职做自动化的人员,一般都是有代码功底掌握了python / java 等语言。

有代码功底的更倾向于开源的测试框架,可以结合单元测试框架(unittest/pytest或junit)去实现不能项目,不同需求的自动化,于是又可以细分成web,接口,app自动化。

web 自动化:

以python语言为例,通过实现方式是 unittest/pytest + selenium, 然后搞个 POM 模式去实现。

优点:

可以灵活的组织自己的测试用例了,写不同场景的自动化用例,还可以定制生成各种漂亮的报告,如allure报告

相同的模块可以代码复用

缺点:

由于不同人员代码质量参差不齐,定位元素只学了皮毛,大量的时间和精力都花在了定位上,你会看到学web自动化的人员,问的最多的永远都是:xx元素怎么定位?

代码质量不高的,不是在报错,就是在报错的路上,排错浪费大量时间和精力。

接口自动化:

以python语言为例,通过实现方式是 unittest/pytest + requests ,然后是搞参数化数据驱动,测试数据和代码分离。

常见的几种方式:

1.所有的接口用例和测试数据放到excel 文件,封装读取和执行excel 用例的方法,让小白也能参与使用

2.参数化(数据驱动、数据代码分离)接口数据放到yaml 或 json 文件,封装读取数据和执行的方法

3.写公共方法,调用函数的方式去组织不同场景用例,更偏重代码的方式实现

4.用httprunner框架,纯数据的方式实现

优点:

接口自动化实现相对来说比较简单,实现的方式也是各种各样的,一般只要有自己的一套方案,都能实现

缺点:

门派太多,实现方式各种各样,用excel的瞧不上用yaml的,用yaml的瞧不上用excel的,用excel、yaml的又瞧不上写代码的。

反正各门派之间内斗严重,去面试的时候也是没统一的标准答案。不像web自动化,POM就是标准答案。

APP自动化:

app 自动化分android 和 ios 两个平台,常用的有appium 和 airtest。

app 自动化是最难学的了,并且能真正落地的很少,没扎实的自动化功底很难做起来。

优点:

能做好的,前途无量

缺点:

环境问题就能劝退一大片的人了

3.基于自己公司的测开人员开发的平台

如果公司有专门的测开人员,根据自己公司的项目需求,开发自动化平台,或者工具。

那么有人会问了,既然有开源的接口自动化工具了,为什么要去开发一个呢?

现有的接口自动化工具,大部分都是基于HTTP/HTTPS 协议的,如果你们公司是其它的接口,比如:websocket/mqtt/Dubbo.

或者开发一个可视化的平台,在平台上维护用例。

优点:

自己公司开发的平台,具有保密性,接口和测试账号不会被泄露

可以根据自己公司的需求,灵活定制

可视化的平台方便领导查阅,知道你具体做了多少工作。

只要平台稳定了,后续其它测试也能快速参与到自动化的工作

缺点:

对测开人员能力要求高

说下你的框架是怎么设计的?


去面试自动化测试岗位,尤其是接口自动化岗位,面试官总会问:说下你的自动化框架如何设计的?

对于这种开放性的问题,因为每个人做的自动化实现方式不太一样,也没标准答案,这里我总结了自动化测试人员的几个阶段,大家可以对号入座,看自己处于哪个阶段。

一、初级入门-以线性用例为主

1.早期的以录制为主,生成的用例,对于不会写代码的人来说,录制简直就是神器。

页面上点点点,就可以自动生成用例了,只需要稍微改一改,快速的实现了自动化。

这种就是典型的线性用例(用例是一条直线形状,不带拐弯的),缺点也很明显,业务的改动,会导致大量用例失效,得重新去录制,复用性很差。

2.以postman、jmeter 等工具为主的接口自动化用例,这比录制稍微强一些了,能自己去组织用例,维护用例了,还可以继承一些报告。

postman 工具实现接口自动化

jmeter 工具实现接口自动化

这种工具为主的,确点也很明显,跨平台使用不方便,还有个很大的缺点,你写的用例,只能在你自己电脑上跑,别人无法跟你的用例共享。

2-3个人共同维护一个项目的时候,缺点就暴露出来了。

这种单个人实现的接口自动化,算是自动化初级入门了。

二、unittest/pytest 框架使用 - 代码复用

有一定的代码能力了, 于是可以学一些自动化测试框架。

以 unittest/pytest 为主的使用,结合selenium, requests 等库实现web或接口的自动化,可以解决前面说到的的问题。

早期基于unittest + excel的项目设计结构

或者以下一个简单的pytest 接口自动化项目结构

web自动化框架都是POM设计模式,主要写个base的文件,其它页面都基于base继承,每个页面封装一个Object 对象。页面上的点点点基于页面对象调用对应方法

这一阶段的主要目的是代码的复用,写一些读取excel或者json/yaml 文件的广告方法,公共模块的封装,比如登录这种公共方法,很多流程都会用到的,那么就可以写成公共函数去调用。

这时候面试官又会说了,那你的框架有没有实现数据和代码的分离呢?

三、 参数化/数据驱动 - 数据可维护性

当上一阶段实现了代码的复用,你会发现很多操作其实都是重复的动作,像接口自动化里面的发送请求,都是调用一个方法,传不同的接口参数就行了。

于是这一阶段的追求是数据驱动模式,通过代码和数据的分离实现参数化,写公共方法去读取excel/yaml/json 文件。

项目基本设计结构:

1.接口的数据写到excel/yaml/json 文件

2.写公共方法读取excel/yaml/json 文件,解析出测试数据,生成用例

3.写个main去执行用例

那么这一阶段的实现,具有代表性的实现方式如下pytest+yaml

在yaml 文件中写接口数据

学公共方法去读取接口数据,封装提取参数和校验参数的方法

最后写个方法去生成用例,通过main.py 去执行全部用例,生成报告

(目前网上看到的绝大部分都是这种思路)

四、 具有代表性的框架是 httprunner 框架

pytest+yaml 测试数据和代码分离成熟的方案就是httprunner框架了,可以直接使用别人封装好的框架。

上面一种自己写的和别人写的httprunner框架 对比有哪些不一样呢?

1.别人的框架始终是别人写的,你去面试的时候说用的httprunner框架,面试官会觉得你不会写框架,都是用的别人的

2.你给领导看的时候,你全写的yaml用例,领导觉得你没水平啊,换个人也能做

3.你没写代码,领导觉得你不会写代码吧,下次不给你涨工资了

所以自己的东西再烂,那也是自己的,可以唬住面试官和领导。

这就是为什么,网上都喜欢自己去写一套pytest+yaml 的方案的

1.代码在项目结构里面,可以唬住领导,让领导觉得你好厉害,写这么多

2.面试的时候,可以非常自信的说是自己写的,还可以介绍每个模块实现的功能

3.可以让其他不会代码的人员觉得你这20k不是白拿的,确实厉害,很有优越感

4.金框架银框架不如自己的狗框架

五、自己开发框架/插件

我这里说的自己开发框架,不是前面说的简单建几个文件夹的事情,是开发一个能给大家使用的,比如httprunner框架开发。

还有我近期开发的基于pytest 框架的 pytest-yaml-yoyo 插件,项目地址https://gitee.com/yoyoketang/pytest-yaml-yoyo?_from=gitee_search

所有的用例读取和执行都封装好了,只需一个pip安装就能使用

pip install pytest-yaml-yoyo

用例只需要写个yaml文件,不需额外的代码了

config:  name: getteststeps:-  name: get  request:    method: GET    url: http://httpbin.org/get  validate:    - eq: [status_code, 200]

用例执行,跟pytest执行一样,只需一个命令

pytest test_demo.yml

只有当你熟练使用了各种测试框架后,你才会知道每个框架的优缺点,知道测试人员的痛点在哪,那么你设计的框架能解决这些痛点就是优秀的。

六、平台化-测试开发

有很多测试人员一直搞不明白,测试开发的工作是做什么,跟自动化测试有什么区别?

测试开发的工作是不是就是开发一个web网站这种测试平台呢?

不同公司对测试开发的岗位定位其实不太一样,总的来说,测试开发的工作是为给自动化测试提供服务的。

比如自动化测试人员需要一个测试平台,那么就需要开发一个平台让他们去维护自动化用例。

比如自动化测试人员想参与CI/CD的工作,那么测试开发就去建设对应的工作。

比如自动化测试人员需要一个测试dubbo接口的工具,那么测试开发人员就去开发一个工具。

还有其它很多能提高自动化效率的事情,都是测试开发人员的工作。

七、人工智能-自动生成自动化用例

最近chatGPT 很火,各大媒体都在蹭流量,它的出现,可以帮助程序员快速实现一些基础的逻辑代码。

我们做自动化测试的早期目的,就是为了解决手工的重复劳动。

于是早期我们通过代码的方式让双手解放了出来。

但是想一想,虽然不用手工点点点了,你去写自动化用例敲代码,也是需要双手的,所以并没有真正的解放双手,虽然双手没有解放,但节省了时间。

当接口自动化用例写多了之后,你会发现大部分工作都是复制粘贴,改改参数,这其实也是重复劳动。

于是就有面试官问:那你的框架能不能根据接口文档自动生成自动化用例呢?

如果开发给一个swagger文档,你写的框架能自动根据接口文档,生成不同的请求参数,自动去校验结果,那么就是面试官所需要的。

总结


总的来说,不管你处于哪个阶段,只要能让公司自动化落地,提升测试效率,都是好的。

如果你处于第一个初级阶段,想一下子实现到第七个阶段,那步子迈的有点大,怕你扯着

四、自动化测试学习资源分享

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

下方这份完整的软件测试视频学习教程已经上传CSDN官方认证的二维码,朋友们如果需要可以自行免费领取 【保证100%免费】

这些资料,对于想进阶【自动化测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助……基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等配套学习资源免费分享~

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2023年地方两会政府工作报告汇总(各省市23年重点工作)

新年伊始,全国各地两会密集召开,各省、市、自治区2023年政府工作报告相继出炉,各地经济增长预期目标均已明确。相较于2022年,多地经济增长目标放缓,经济不断向“高质量”发展优化转型。今年是二十大后的开局之年&#…

【参加CUDA线上训练营】零基础cuda,一文认识cuda基本概念

【参加CUDA线上训练营】零基础cuda,一文认识cuda基本概念1.术语2.线程层次2.1 Block、Warp与Thread之间的关系2.2 Thread index1.术语 \\%序号名称描述1HostCPU和内存(host memory)2DeviceGPU和显存(device memory)3SMStreaming M…

101-并发编程详解(上篇)

并发编程详解在学习之前,如果多线程的理解足够,可以往下学习,否则的话,建议先看看26章博客(只是建议),注意:可能有些字的字体不对,那么一般是复制粘贴来的,但…

开关电源-一种方便快捷计算开关电源环路参数的方法及实例

一种方便快捷计算开关电源环路参数的方法及实例 接上文《技术实例 | 开关电源环路测量时,注入信号的幅值对测量结果的影响》,得到电流环功率级的开环传递函数后,我们通过matlab的sisotool工具箱自动计算出了电流环路补偿器的传递函数C&#…

三层交换机【实验】

目录 1、要求: 2、拓扑: 3、创建vlan和端口定义并划入vlan: 4、创建以太网中继Eth-Trunk使sw1和sw2的相互冗余并且不浪费链路: 5、使用mstp定义组和对应的根: 6、配置网关冗余: 7、核心层的路由的IP配…

云仓仓储的运行模式是什么?

仓库能够简单地定义为一个规划空间,通常是一个用于处置和贮存货物的大型商业建筑。因而,仓储是指在这样一个规划空间中存储和处置货物所触及的一切过程。仓库中常见的货物包括:;机械零配件、建筑资料、废品农产品、家具和电子产品。仓库中的一…

Fluid-数据缓存亲和性调度原理解析

前言在Fluid中,Dataset资源对象中所定义的远程文件是可被调度的,这意味着你能够像管理你的Pod一样管理远程文件缓存在Kubernetes集群上的存放位置。另外,Fluid同样支持对于应用的数据缓存亲和性调度,这种调度方式将应用(e.g. 数据…

二进制部署K8S集群

目录 一、架构图 二、部署步骤 1、实验环境 2、操作系统初始化配置 3、部署 docker引擎 4、部署 etcd 集群 5、部署 Master 组件 一、架构图 二、部署步骤 1、实验环境 服务器类型IP地址master192.168.80.5node01192.168.80.8node02192.168.80.9 2、操作系统初始化配置…

SpringBoot整合Mybatis的核心原理

0. 前言:1. 自动配置类MybatisAutoConfiguration:1.1. SqlSessionFactory的生成:1.2. Mapper的扫描和代理生成:1.2.1. MapperScannerConfigurer1.2.2. MapperFactoryBean1.2.3. getMapper生成代理对象2. 小结:0. 前言&…

3D模型深度生成网络【ShapeAssembly】

推荐:使用 NSDT场景设计器 快速搭建 3D场景。 我们提出了一个深度生成模型,该模型学习在ShapeAssembly中编写新颖的程序,ShapeAssembly是一种用于建模3D形状结构的特定领域语言。 执行 ShapeAssembly 程序会生成一个由部件代理长方体的分层连…

2023,考个软考中级证书稳妥深圳入户,5月考试8月办入户

最新消息!最新消息!最新消息! 2023年2月8日,深圳市发展和改革委员会深圳市公安局深圳市人力资源和社会保障局关于印发《深圳市积分入户办法》的最新通知↓ 来源《深圳市发展和改革委员会》 该积分入户将于2023年2月15日正式实施&…

Prometheus监控Java-JMX

一、什么是 JMX Exporter ? JMX Exporter 利用 Java 的 JMX 机制来读取 JVM 运行时的一些监控数据,然后将其转换为 Prometheus 所认知的 metrics 格式,以便让 Prometheus 对其进行监控采集。 那么,JMX 又是什么呢?它的全称是&a…

ChatGPT 支持的搜索引擎 Bing 究竟什么样?

微软于2月8日北京时间凌晨在 Redmond 线下举办一场媒体活动,围绕微软的产品以及 AI,公布最新消息。这里我们先回顾一下微软在 AI 上的布局。 2019年,微软向 OpenAI 投资10亿美元,成为了 OpenAI 紧密的合作伙伴,而微软…

Java中动态调用setter以及getter

0x00 前言 对于非专业程序员的安全人员来说,因为没有代码项目的积累,很多知识体系都不完善,所以有必要在一些常用的内容进行学习的总结。 在很多的调用链中都会用到**“动态调用setter以及getter”**这个知识点,比如经典的CB链&a…

Python语言零基础入门教程(九)

Python pass 语句 Python pass 是空语句,是为了保持程序结构的完整性。 pass 不做任何事情,一般用做占位语句。 Python 语言 pass 语句语法格式如下: pass测试实例: #!/usr/bin/python # -*- coding: UTF-8 -*- # 输出 Pytho…

线程池小结

什么是线程池 线程池其实就是一种多线程处理形式,处理过程中可以将任务添加到队列中,然后在创建线程后自动启动这些任务。这里的线程就是我们前面学过的线程,这里的任务就是我们前面学过的实现了Runnable或Callable接口的实例对象; 为什么使用线程池 …

leetcode刷题之背包问题(01背包)

01 背包 概念:有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i]weight[i]weight[i],得到的价值是value[i]value[i]value[i]。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。 方法1:暴力回溯…

FPGA时序约束与分析 --- 实例教程(1)

注意: 时序约束辅助工具或者相关的TCL命令,都必须在 open synthesis design / open implemention design 后才能有效运行。 1、时序约束辅助工具 2、查看相关时序信息 3、一般的时序约束顺序 1、 时序约束辅助工具(1)时序约束编辑…

微服务负载均衡器Ribbon

目录 什么是Ribbon 客户端的负载均衡 服务端的负载均衡 常见负载均衡算法 Nacos使用Ribbon 添加LoadBalanced注解 修改controller Ribbon负载均衡策略 IRule AbstractLoadBalancerRule 修改默认负载均衡策略 自定义负载均衡策略 配置自定义的策略 饥饿加载 Ribbo…

【golang】1797. 设计一个验证系统

你需要设计一个包含验证码的验证系统。每一次验证中,用户会收到一个新的验证码,这个验证码在 currentTime 时刻之后 timeToLive 秒过期。如果验证码被更新了,那么它会在 currentTime (可能与之前的 currentTime 不同)时…