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

news2025/7/18 17:38:06

前言


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

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

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


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

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

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.coloradmin.cn/o/334837.html

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

相关文章

iOS16灵动岛横屏视频播放适配(ZFPlayer)

项目场景: 手机为iphone14Pro 版本iOS16.0.3 Xcode版本14.2 视频播放第三方库ZFPlayer 问题描述 使用视频时,视频播放自动横屏控制层的返回按钮和暂停按钮都点不到,上图错误、下图正确(控制按钮距离屏幕左右减小50、视频全屏不做…

Maven:基础知识

Maven概念图生命周期目录工程创建测试常用命令COMPILATION ERROR : 不再支持目标选项 5。请使用 7 或更高版本。问题解决pom.xml文件properties配置示例scope配置详解概念图 依赖管理构建项目Maven 的底层核心实现项目的构建和管理必须通过插件完成,但插件本身并不包…

VC++打开或关闭目标进程的声音(扬声器)(附源码)

VC常用功能开发汇总(专栏文章列表,欢迎订阅,持续更新...)https://blog.csdn.net/chenlycly/article/details/124272585C软件异常排查从入门到精通系列教程(专栏文章列表,欢迎订阅,持续更新...&a…

一刷代码随想录——单调栈

每日温度739题目描述:给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来…

spring security 核心类 和请求登陆过程

核心类图2. 执行登陆 首先请求被拦截器 UsernamePasswordAuthenticationFilter 拦截 看源代码可以看出默认拦截的是 /login 请求地址 当然这个地址是可以被配置的 private static final AntPathRequestMatcher DEFAULT_ANT_PATH_REQUEST_MATCHER new AntPathRequestMatche…

DFS深度优先算法 —— AcWing 842. 排列数字AcWing 843. n-皇后问题

一、了解dfs1、DFS(Depth First Search)DFS在我看来就是一条路走到黑,直到无路可走的情况下,才会选择回头,然后重新选择一条路(官方说法即“优先考虑深度”)整个进程反复进行直到所有节点都被访…

Allegro如何添加ICT操作指导

Allegro如何添加ICT操作指导 当PCB板需要做飞针测试的时候,通常需要在PCB设计的时候给需要测试的网络添加上ICT。 如图: Allegro支持给网络添加ICT,具体操作如下 首先在库中创建一个阻焊开窗的过孔,比如via10-ict一般阻焊开窗的尺寸比盘单边大2mil 在PCB中选择Manufacture…

Linux基础命令1(常见的系统进程、状态命令)

目录 Linux命令格式 Linux快捷按键 常用系统命令 man 查看命令的帮助信息 echo 输出信息(将信息输出到屏幕上面) date 查看系统的日期、时间 timedatectl 设置系统时间,主要是时区&…

程序环境--翻译+执行

ANSI C标准下,有两种程序环境。 第1种是翻译环境,在这个环境中源代码被转换为可执行的机器指令。 翻译环境包括:预处理(预编译)编译汇编链接。四个步骤。 第2种是执行/运行环境,它用于实际执行代码。 链接…

UPC-2023新生个人训练赛第18场-Rank1

问题 B: 2的N次方 题目描述 输入n行,每行一个整数x,输出2的x次方的个位是多少?2的3次方表示3个2相乘,结果是8 输入 输入n行,每行一个整数x 输出 输出n行,每行一个整数,2的x次方的个位。 …

Flink CEP 在抖音电商的业务实践

摘要:本文整理自抖音电商实时数仓研发工程师张健,在 FFA 实时风控专场的分享。本篇内容主要分为四个部分:Flink CEP 简介业务场景与挑战解决方案实践未来展望Tips:点击「阅读原文」查看原文视频&演讲 ppt01Flink CEP 简介Flin…

论文投稿指南——中文核心期刊推荐(冶金工业 2)

【前言】 🚀 想发论文怎么办?手把手教你论文如何投稿!那么,首先要搞懂投稿目标——论文期刊 🎄 在期刊论文的分布中,存在一种普遍现象:即对于某一特定的学科或专业来说,少数期刊所含…

23种设计模式之策略模式

一、概念 就是将一系列算法封装起来,并使它们之间相互替换。被封装起来的算法具有独立性外部不可改变其特性。 策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算…

BCN点击试剂diSulfo-Cy5-PEG3-BCN,二磺酸三聚乙二醇环丙烷环辛炔,纯度 95%+

【中文名称】二磺酸-三聚乙二醇-环丙烷环辛炔【英文名称】 diSulfo-Cy5-PEG3-BCN,BCN-PEG-Sulfo Cy5【CAS号】N/A【分子式】C51H68N4O12S2【分子量】993.24【基团】BCN基团【纯度】95%【规格标准】1g,5g,10g,包装灵活,…

2-ChatGPT插件到Google浏览器,并进行ChatGPT工作。

ChatGPT插件到Google浏览器,并进行ChatGPT工作。1,首先,在装插件ChatGPT forGoogle插件时,我没安装成功,问题是我没有区分Google浏览器和双核浏览器的差别。2,如何使用ChatGPT在浏览器上进行工作。1&#x…

[future 2022] 基于特征选择的DDoS攻击流分类方法

https://www.sciencedirect.com/science/article/pii/S0167739X22000474highlights•我们设计了一种特征选择方法来选择独立和相关的特征。•我们设计了一种方法来识别物联网和复杂的 DDoS 攻击流。•该体系结构在有效性和效率方面优于比较方法。摘要分布式拒绝服务 (DDoS) 攻击…

CentOS8基础篇3:使用vim编辑文档

一、vim编辑器 vim 编辑器共有三种工作模式,分别是命令模式、输入模式和末行模式。 〖例2.24〗使用vim编辑器创建并编辑文件hello.c。 二、查看文件内容命令 1. more/less 浏览文件全部内容 当文件内容过多时,可以用more或less命令来查看。 命令格式…

HTTP缓存看这一篇就够了

前言 HTTP缓存机制是优化web性能的重要手段,也是优化用户体验的重要一环。了解和熟悉HTTP缓存机制也成为了前端工作者必不可少的技能。 HTTP缓存是用于临时存储网页资源(如HTML页面、图像等),以减少服务器延迟的一种技术。HTTP缓…

nim语言在不同操作系统安装

官网: Nim Programming Language 学习文档: Nim文档概述 Tutorial (part I)The Nim one deals with basics. 官方下载地址:Download - Nim Programming Language 目录 Mac OS Ubuntu centos Mac OS 安装语言 brew install nim 安装…

nodejs基于vue的饭店点餐外卖平台网站

本系统主要实现了管理员:首页、个人中心、用户管理、菜品分类管理、菜品信息管理、菜品评价管理、系统管理、订单管理,用户:首页、个人中心、菜品评价管理、我的收藏管理、订单管理,前台首页:首页、菜品信息、菜品资讯、个人中心、后台管理、…