吐血整理,自动化测试框架设计思路分析,一篇不走弯路...


前言

说起自动化测试框架设计,大家脑海中大多会浮现出以下问题:

1)测试数据要怎么准备,如何在框架中实现,是否可复用。
2)测试用例的批量导入。
3)用例之间是否存在逻辑关系,相互之间是否有影响,在框架中该如何处理。
4)测试执行结果的导出和查看。
5)执行失败的用例如何快速定位复现。

6)对于UI自动化,当出现异常时(如对象获取不到,无法对对象进行指定操作),框架要如何对应处理,以保证整套用例不会中断执行。
7)运用多进程和分布式管理的方式,实现在有限时间内完成大批量测试用例的执行。
8)测试结果的数据统计,生成分析图表。

这些问题我们都可以在网上找到答案,如下所示:
1)在测试数据准备上,尽量做到数据可复用,便于在集成测试时可循环执行。所以可以把数据的初始化通过在数据库当中用sql语句或存储过程的方式实现,并且可以将此步骤放在自动化测试执行起始或结束处。

2)如果团队中测试人员们的技术功底较好,可以考虑直接将测试用例存放在数据库中来批量导入,内存读取效率是很高的。其次也可以把测试用例批量导入的载体换为xml或Excel文件。

3)用例之间如果存在逻辑关系,建议对用例进行分组,使各组用例之间相对独立,执行结果或产生异常也能互不影响。

4)测试执行结果的导出方式就很多了,结合业务和系统架构场景,怎么方便高效怎么来。查看上做到直观易懂就行。

5)对于执行失败的用例原因定位,最好能通过在自动化测试脚本中编辑对应的异常输出日志来定位,而不是单纯靠脚本语言自己提供的报错信息。

6)在UI自动化测试中,对于事先无法预知的异常,可以考虑通过事件触发机制来做判断,然后添加上一些比如关闭弹窗、模拟回车和退出键的操作,使得焦点恢复到主窗体,然后通过测试框架的驱动进入到下一组执行用例中。

7)测试结果的统计,包含的信息可以有执行时长、总执行用例数、成功/失败执行用例比、失败用例自动retry次数、本轮执行与上轮执行的不同点统计等等。

从这些问题中我们不禁思考,一个优秀的自动化测试框架应该具备哪些条件?

1、一个优秀的自动化测试框架应该具备哪些条件?

首先我们要明白:没有万能的测试框架,适合自己项目的,就是好的;

其次:测试框架的本质是提升效率;明白了这两点,其实我们也就知道了一个优秀的自动化测试框架一定是先解决了核心功能、效率优化的问题,然后是“可维护性、可扩展性”的问题。

概括如下:
通用性:能够在各种各样的系统和平台都能够使用;
易维护性:能够把我们的数据、用例、框架的实现进行独立的维护,能够在实现完善的过程,快速的定义到维护的点,而不对框架的其他功能造成影响;

定时处理:能够在指定的时间执行;
持续集成:当被测程序和测试代码有更新能够自动执行;
调试:可调试行强;
测试结果:测试报告、测试数据的统计分析;

2、自动化测试框架的设计思路是怎样的?

1)从零开始设计

从零开始设计自动化测试框架,例如,针对一款编程语言,单元测试框架一般需要作为基础库被设计并集成到编程语言中。

标准化的测试结构。单元测试框架提供了一种统一的结构化方式,让开发者以一致的方式组织和运行测试。

测试方法的命名:通常有特定约定。例如,以 test_开头(Python 的 unittest)或用@Test 注解(Java 的 JUnit)。这种约定使得框架可以自动发现测试方法。

独立性:每个测试方法应保持独立,不依赖其他测试。测试之间的隔离有助于更快地定位问题。

断言机制。断言(Assertions)是单元测试的核心,用于验证被测代码的行为是否符合预期。
断言的作用如下:
独立性:每个测试方法应保持独立,不依赖其他测试。测试之间的隔离有助于更快地定位问题。通过对输入和输出的验证,确保代码逻辑正确。
如果断言失败,则测试会立即终止并报告错误。
测试发现。测试发现是单元测试框架的一项重要功能,能够自动找到符合规范的测试。

框架会扫描特定的模块或文件夹,找到符合命名约定的方法。例如,在 Python 中,pytest 会自动发现以 test_ 开头的方法。在 Java 的 JUnit 中, @Test 注解标识的方法会被识别为测试方法。

测试套件和测试运行器。测试套件和运行器使得开发者可以高效地组织和执行测试。
测试套件(Test Suite):测试套件是一个集合,用于将多个测试用例组合在一起运行。通过它我们可以方便地对测试用例进行分组管理。
测试运行器(Test Runner):测试运行器负责执行测试并收集测试结果。

测试报告和结果反馈。测试报告用于展示测试的执行结果,帮助开发者快速了解代码的健康状态。
测试结果的分类如下:
通过(Pass): 测试正常完成且所有断言成功。
失败(Fail): 测试未通过,某个断言失败。
错误(Error): 测试执行过程中抛出了未预期的异常。
跳过(Skip/Ignore): 测试因某些条件未被执行。

扩展:例如 JUnit(Java)、NUnit(.NET)、pytest(Python)等。

2)基于单元测试框架二次开发

基于单元测试框架二次开发指在单元测试框架的基础上,更偏注重于扩展各种测试能力。

通常,单元测试框架已经提供了基础的测试能力,为了更好地支撑各种类型的测试,我们可以在此基础上进行扩展,以便于满足不同类型的需求。

基于单元测试框架二次开发的方向比较多,取决于基于框架设计的定位和目标。以下是常见的扩展功能。

数据驱动。数据驱动是自动化测试中最常见的功能之一,可以有效地减少样例代码的编写,提高测试用例编写的效率。

数据驱动装饰器:可以通过数据驱动装饰器来驱动测试测试用例(方法), 例如,Seldom框架的 @data([]) 装饰器。

数据驱动文件:通过数据驱动文件读取不同类型的数据文件。例如,Seldom框架的 @data_file(“./data/file.json”)管理测试数据。

定制化测试报告。测试报告是自动化测试框架的非常重要的功能,我们需要对测试报告做一些定制化开发。

个性化测试样式和内容:例如,显示公司logo、人员个名称和角色等。
生成不同的报告类型:不同的运行模式需要不同的报告类型。例如,在本地执行需要HTML格式的报告,在CI/CD 或平台化执行需要XML、JSON格式的测试报告。

脚手架工具。集成脚手架工具,可以快速的生成 自动化测试项目模板。
关于自动化测试项目模板,文章的开头已经介绍,这里不再阐述。

集成消息功能。每个公司都有自己的通讯工具,邮件、钉钉、企微、飞书等。通过调用相关工具的API,实现发消息功能,可以让测试的运行结果更快的发送给相关人员。

3)集成各种测试库

基于框架的定位,可以集成不同类型的测试库,并对这些库进行二次开发,使框架的使用更加高效统一。

Web UI测试:如果是为了实现Web UI自动化测试,那么可以集成 Selenium、Playwright等测试库,并对这些库的API进行二次封装。
API 测试:如果是为支持接口测试,那么可以集成 Requests、webSocket、gRPC等测试库,并对这些库的API进行二次封装。
App UI测试:如果是为了实现App UI自动化测试,那么可以集成 Appium、等测试库,并对这些库的API进行二次封装。

目前主流测试技能:自动化测试,测试开发,性能测试,安全测试等等,掌握其中之一将更有优势

接口自动化测试方向:Python+requests+pytest+yaml+alluer+Jenkins;
web自动化测试方向:Python+selenium4+pytest+POM+allure+Jenkins;
app自动化测试方向:Python+appium+POM+pytest+allure+Jenkins;

最新最全花1W买的Python+Selenium全栈Web自动化测试

下面是我整理的2025年最全的软件测试工程师学习知识架构体系图

一、Python编程入门到精通

请添加图片描述

二、接口自动化项目实战

请添加图片描述

三、Web自动化项目实战

请添加图片描述

四、App自动化项目实战

请添加图片描述

五、一线大厂简历

请添加图片描述

六、测试开发DevOps体系

请添加图片描述

七、常用自动化测试工具

请添加图片描述

八、JMeter性能测试

请添加图片描述

九、总结(尾部小惊喜)

人生最珍贵的不是最终抵达的终点,而是沿途突破自我的每个瞬间。当你觉得撑不住时,请记住:蝴蝶破茧时的挣扎,正是它获得飞翔力量的关键。你的坚持,正在为生命谱写最动人的乐章!

别被暂时的风雨模糊了视线!那些看似坎坷的路途,都在引领你走向更美的风景。当别人选择放弃时,你的坚持就是最有力的宣言。向前奔跑吧,整个世界都在期待你的光芒绽放!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值