企业自动化测试实现的方式
对于不同的公司来说,实现自动化的方式不太一样,其实不管哪种实现方式,只要能解决工作中的问题,都是好的。
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语言为例,通过实现方式是:Python+selenium4+pytest+POM+allure+Jenkins; 然后搞个 POM 模式去实现。
接口自动化:
以python语言为例,通过实现方式是:Python+requests+pytest+yaml+alluer+Jenkins;然后是搞参数化数据驱动,测试数据和代码分离。
接口自动化实现相对来说比较简单,实现的方式也是各种各样的,一般只要有自己的一套方案,都能实现
APP自动化:
以python语言为例,通过实现方式是:Python+appium+POM+pytest+allure+Jenkins;然后搞个 POM 模式去实现,测试数据和代码分离。
app 自动化分android 和 ios 两个平台,常用的有appium 和 airtest。
app 自动化是最难学的了,并且能真正落地的很少,没扎实的自动化功底很难做起来。
3、基于自己公司的测开人员开发的平台
如果公司有专门的测开人员,根据自己公司的项目需求,开发自动化平台,或者工具。
那么有人会问了,既然有开源的接口自动化工具了,为什么要去开发一个呢?
现有的接口自动化工具,大部分都是基于HTTP/HTTPS 协议的,如果你们公司是其它的接口,比如:websocket/mqtt/Dubbo.
或者开发一个可视化的平台,在平台上维护用例。
自己公司开发的平台,具有保密性,接口和测试账号不会被泄露
可以根据自己公司的需求,灵活定制
可视化的平台方便领导查阅,知道你具体做了多少工作。
只要平台稳定了,后续其它测试也能快速参与到自动化的工作
对测开人员能力要求高
自动化测试框架是怎么设计的
1、初级入门-以线性用例为主
早期的以录制为主,生成的用例,对于不会写代码的人来说,录制简直就是神器。页面上点点点,就可以自动生成用例了,只需要稍微改一改,快速的实现了自动化。
这种就是典型的线性用例(用例是一条直线形状,不带拐弯的),缺点也很明显,业务的改动,会导致大量用例失效,得重新去录制,复用性很差。
以postman、jmeter 等工具为主的接口自动化用例,这比录制稍微强一些了,能自己去组织用例,维护用例了,还可以继承一些报告。
Postman 工具实现接口自动化
Jmeter 工具实现接口自动化
这种工具为主的,确点也很明显,跨平台使用不方便,还有个很大的缺点,你写的用例,只能在你自己电脑上跑,别人无法跟你的用例共享。
2-3个人共同维护一个项目的时候,缺点就暴露出来了。
2、unittest/pytest 框架使用 - 代码复用
有一定的代码能力了, 于是可以学一些自动化测试框架。
以 unittest/pytest 为主的使用,结合selenium, requests 等库实现web或接口的自动化,可以解决前面说到的的问题。
早期基于unittest + excel的项目设计结构
web自动化框架都是POM设计模式,主要写个base的文件,其它页面都基于base继承,每个页面封装一个Object 对象。页面上的点点点基于页面对象调用对应方法
这一阶段的主要目的是代码的复用,写一些读取excel或者json/yaml 文件的广告方法,公共模块的封装,比如登录这种公共方法,很多流程都会用到的,那么就可以写成公共函数去调用。
参数化/数据驱动 - 数据可维护性
当上一阶段实现了代码的复用,你会发现很多操作其实都是重复的动作,像接口自动化里面的发送请求,都是调用一个方法,传不同的接口参数就行了。
于是这一阶段的追求是数据驱动模式,通过代码和数据的分离实现参数化,写公共方法去读取excel/yaml/json 文件。
项目基本设计结构:
接口的数据写到excel/yaml/json 文件;
写公共方法读取excel/yaml/json 文件,解析出测试数据,生成用例;
写个main去执行用例;
那么这一阶段的实现,具有代表性的实现方式如下pytest+yaml
在yaml 文件中写接口数据
测试开发 - 开发测试平台
有很多测试人员一直搞不明白,测试开发的工作是做什么,跟自动化测试有什么区别?
测试开发的工作是不是就是开发一个web网站这种测试平台呢?
不同公司对测试开发的岗位定位其实不太一样,总的来说,测试开发的工作是为给自动化测试提供服务的。
比如自动化测试人员需要一个测试平台,那么就需要开发一个平台让他们去维护自动化用例。
比如自动化测试人员想参与CI/CD的工作,那么测试开发就去建设对应的工作。
比如自动化测试人员需要一个测试dubbo接口的工具,那么测试开发人员就去开发一个工具。
还有其它很多能提高自动化效率的事情,都是测试开发人员的工作。
下面是我整理的2023年最全的软件测试工程师学习知识架构体系图 |
只有努力奋斗,才能让梦想破茧而出,绽放光芒;只有坚持不懈,才能走向成功的顶峰;只有勇往直前,才能超越自我,创造辉煌。无论遇到多大困难,都要坚信你的努力会带来美好的未来!
只有敢于冒险,才能在逆境中绽放;只有拼搏奋斗,才能创造辉煌的未来;只有坚守信念,才能超越自我;只有不屈不挠,才能实现梦想的壮丽航程。相信自己,勇往直前!
只有付出努力,才能收获辉煌;只有坚持不懈,才能追逐梦想;只有勇往直前,才能创造奇迹。让我们积极拼搏,超越自我,用汗水书写人生的壮丽篇章!