干货 | 自动化测试理论思想

软件自动化测试(Automated Testing)是相对于手工测试而存在的,主要通过所开发的软件测试工具,脚本等来实现,具有良好的可操作性,可重复性和高效率等特点。

目前,自动化测试已成为国内软件领域的一个重要课题。

自动化测试定义

我们将自动化测试定义为:一切可以由计算机系统自动完成的测试任务,都已由计算机系统或软件工具,程序来承担并自动执行,它包含了下列三层含义:

包含测试执行任务,即验证被测对象,而且还包括测试相关的其他任务,如环境安装,测试管理,缺陷管理,设置和维护等。

系统不能自动完成测试中的某些任务,如脚本开发,测试用例设计等,类似这些需要创造的任务,依旧必须通过手工处理来完成。

即使有系统进行自动化测试,还少不了人的干预,包括实现安排自动化测试任务,测试结果分析,调试测试脚本等。

自动化测试与测试自动化区别

严格来说,自动化测试与测试自动化之间存在区别,自动化测试是对手工测试步骤进行模拟,通过执行脚本自动化测试软件,并自动实施软件的单元测试,功能测试,负载测试及性能等。

一方面,强调实际测试执行过程的改变,即测试工具自动执行过程代替了传统的手工逐个运行测试用例的操作过程,另一方面,强调借助工具来帮助或辅助测试,该过程可能是全自动,也可能是半自动。

相比较而言,测试自动化则侧重自动化设计和实现测试的整个过程,即所有的测试任务全部都可以用计算机自动的完成,包括环境的自动搭建及设置(如:安装包上载到服务器),脚本的自动生成(根据结构图等生成可运行的测试脚本),测试数据(如,负载测试所需的大量数据)的自动产生,操作步骤(含执行过程的控制)的自动执行,结果(如,实际输出结果和预期输出结果)的自动分析,测试流程(如,测试计划复审和批准,测试任务安排和执行,缺陷生命周期等)的自动处理及实现,测试报告自动生成等。

在一般情况下,自动化测试与测试自动化之间并无严格区分,我们定义自动化测试为:使用测试工具或其他手段代替或辅助人工来验证各种软件测试的需求,包括测试活动的管理和实施,其目的是通过较少的开销,得到更彻底的测试,以提高工作效率和产品质量,而不是为了自动化而自动化,妄图做到完全百分之百的自动化测试,不仅不显示甚至可能会引起较大的代价,而且可能引起负面性,直接导致质量的降低。

自动化测试仅仅是测试工作的一部分,是对手工测试的一种补充,自动化测试和手工测试往往交织进行,相互补充。

工具执行过程往往需要人工分析,手工测试时也可借助工具处理及某些数据,日志等信息。

自动化测试决不能完全代替手工测试而应尊重手工测试的基础上,尽量采用自动化测试,根据各自的特点重返发挥各自的优势,使手工测试和自动化测试实现完美结合,从而达到高效测试的目的。

自动化测试的对象

1、重复的任务

重复的任务是自动化测试的主要候选对象,主要包括回归测试,冒烟测试,负载测试和性能测试等。

其中,冒烟测试可以看做回归测试的一个子集,其运行次数比其他测试的都多,因此,如果没有充足的时间实现整个回归测试的自动化,首先应该考虑实现冒烟测试的自动化,使用工具执行性能测试往往会容易很多,有些环境中,如果不使用工具将不能执行负载测试。

2.枯燥的任务

枯燥的任务也是自动化测试的主要候选对象,包括代码覆盖,数字计算,仿真和人力密集任务等。如果不使用工具,这些任务将不能在任何比较大的规模上进行。

3.各种复杂的任务

通常,软件测试的工作量很大(据统计,测试会占用到40%的开发时间,一些可靠性要求非常高的软件,甚至占到开发时间的60%),涉及面较广。

同时,测试中有许多重复性的,费智力型的和费创造性的并要求高准确细致的操作,这些任务最适合用计算机代替人工去完成,是自动化测试的主要候选对象,另外自动化测试还能够完成大量手工无法完成的工作,如并发用户测试,大数据测试,代码路径全覆盖测试,短时内大量测试,长时运行可靠性测试,与多线程等有关的测试等。

因此自动化测试引入是必然的。

自动化测试优势

更方便回归测试

提高测试质量

提高测试 效率,缩短测试时间

提高测试富高氯

易于执行手工测试困难或不能完成的测试任务

更好的利用资源

更好的重现软件缺陷

提高软件测试的准确度和精确度,增加软件信任度

增进测试人员与开发人员之间的合作关系运行更多更繁琐的测试

自动化测试局限性

虽然自动化测试可以提高测试效率,能够完成手工测试困难或无法胜任的工作,但它不是万能,不能完全代替手工测试,在实际应用中,自动化测试也存在一定的局限性

1)不能取代手工测试

测试很少进行

测试结果易于人验证

软件不稳定

涉及物理交互的测试

人体感官和易用性测试

定制型项目

周期短的项目

业务规则复杂的对象

2)发现故障的数量不及手工测试

3)不能提高测试的有效性

虽然自动化测试存在着上述种种局限,但是只要测试人员能够不断的提高测试技巧,测试理念以及被测系统的业务背景,合理配合使用手工测试和自动化测试,充分发挥各自的优势,那么可以极大的减轻工作量,提高测试质量,效率和可靠性等,达到预期的目的。

自动化测试和手工测试的范围

自动化测试决不能代替手工测试,它们各有各的特点,其测试对象和测试范围都不一样。

手工测试:在系统功能逻辑测试,验收测试,适用性测试i,涉及物理交互性测试时,多采用黑盒测试的手工测试方法。

自动化测试:单元测试,集成测试,系统负载测试,性能测试,稳定性测试,可靠性测试等比较适合采用自动化测试。

自动化测试工具在进行功能测试时,其准确的定义的回归测试,这时自动化测试不能发现更多的新问题,但可以保证对已经测试过部分的准确性和客观性。

自动化测试发展

  • 第一代自动化测试

第一代自动化测试,即自动化测试思想刚开始诞生时,依靠的是传 统的“录制-回放”思想不一样,其实就是一个模拟的过程,即模拟你对PC的操作而形成的的,其基于你对键盘的输入与对鼠标的操作,原理与按键精灵类似,这种机制对环境的依赖性太强,对变化性太过于敏感,因此不可能发展成一种规模。

  • 第二代自动化测试

第二代自动化测试,利用脚本进行结构化的自动化测试,此可以应用于CLI与API的自动化测试,在其就开始集成了模块化与库思想。

  • 第三代自动化测试

第三代自动化测试,开始产生了各种自动化思想,包括数据驱动与 关键字驱动思想,其伴随着对象化思想而产生,而且也造就了现在一系列的自动化测试软件,其实其中都集成了这些思想,才能够这时候开始。

自动化就开始实现了一定的规模,开始运用在各个行业,并且发展趋势越来越快。

自动化架构思想

1)所谓模块化思想,就是将一个测试用例中的几个不同的测试点拆分并且将单个点的测试步骤进行了封装,形成了一个模块。

例如:一个测试用例要对一个登陆程序进行测试,其中包括:用户名输入,密码输入,以及确定登陆;那么就可以将用户名输入,密码输入,确定登陆,取消登陆四个操作分别封装在四个不同的模块中,测试师们只需调用其模块即可,这样的话, 当一个模块发生变化,你只需单独维护那个模块即可,也可以根据模块 的不同组合成不同的测试用例

2)所谓测试库思想,就是模块化思想的升华,其为应用程序的测试创造库文件(可以是Apis,DLLs等),这些库文件为一系列的函数集合,其与模块化思想不同的是其拓展了接口思想,可以通过接口去传递参数,而不是封死一个模块,可以说是多了一个交互型模块。

3)所谓数据驱动思想,众说纷纭,很多人都觉得仅仅依靠excel表进行不同数据的读取仅是一个高级参数化,其实怎么理解并不重要,关键是其能够更好的运用到你的框架中。而对于变量不变,数据驱动结果,不同的数据导致了不同结果的产生。而对于数据的导入,可以通过很多方式,例如:excel表,xml,数据库(DB),csv文件,txt等都可以。

4)所谓关键字思想,这个思想,其实就是一种面向对象思想,例如:QTP中,队形可以作为一个数据或者一个关键字,对对象的抓取,可以 将其测试对象封装为一个关键字(即可以将gui元素封装成一个个关键 字),这样可以对其关键对象进行各种操作了,不同的对象可以驱动不 同的测试流向与结果。

简单的应用方式可以用一个excel表,里面包括对象类型,对象名称, 对象操作名称,判断方式,预期结果这样的话,可以通过导入不同的对象类型和名称,不同的对象操作来构建成了一个测试用例表了。

做好自动化测试,不是说你掌握一个框架,而是要掌握其自动化思想, 然后根据理解结合你不同的测试环境和流程来构建你自己的自动化测试框架。

自动化测试本质

单元测试自动化,调用被测试的类或方法,根据类或方法的参数,传入相应的数据,然后得到一个返回结果。最终断言返回的结果是否等于预期结果,如果相等,测试通过;如果不相等,测试失败。

所以,这里单元测试关注的是代码的实现与逻辑。

接口测试自动化,根据接口文档,到底是传get请求还是post请求呢?调用被测试的接口,构造相应的数据(id=1,name=zhangsan),得到返回值,是200成功,并返回查询结果。还是10021,用户名不能为空。不管输入的参数是怎样的,我们都将得到一个结果。最终断言返回的结果是否等于预期结果。如果相等,测试通过;如果不相等,测试失败。

所以,接口测试关注的是数据。只要数据正确了,功能就做成大半,剩下的无非是如何把这些数据展示在页面上。

web测试的自动化,这种测试更贴近用户的行为,模拟用户点击了某个按钮,向个输入框里输入了什么。但是用户可以看到登录成功了,但web自动化并不知道它刚才的点击有没有生效。所以,要找“证据”,比如,登录成功后页面右上角会显示“欢迎,xxx”,这就是登录成功的有力“证据”。于是,当web自动化登录成功后,就去获取这个数据进行断言,断言如果相等,测试通过;如果不相等,测试失败。

所以,web自动化的关注点用户操作行为,页面上真正的按钮和输入框是否可用 。

自动化测试框架是什么?

robot framework为什么它能叫框架?

就因为它带个"framework"?

当然不是,因为它实现的自动化测试的一整套东西。

如何编写用例

如何组织用例

如何运行测试用例

如何统计用例结果

如何生成测试报告

如何扩展测试库

那么,自动化测试框架是什么?

在我们测试人员口中说的,开发自动化测试框架大多情况是:

python & unittest & HTMLTestRunner & PO

python & pytest & allure & PO

开发人员:… ? 这不就是我用

python & django& pymysql & HTML &CSS &JavaScript 实现一个Web系统

这不是叫“项目开发”么?你只是拿一堆现成的东西整合到了一起,实现了自己的想要的某某功能,这叫项目开发,不叫框架开发,如果上面这些都是你自己设计和封装的,那么你也可以说自己开发了一个自动化测试框架,明明用着unittest/pytest却说自己开发的自动化测试框架!

要么被误导,要么理解有误。

开发框架能教么?

那么问题来了,有人能教你开发测试框架么?你问有大神教你怎么开发一个前端框架?

嗯,他可以给你讲一讲 Vue.js 在项目中的使用 ;或者你是前端开发大牛,你们可以坐一起聊聊 Vue.js 的设计思想;你也可以参与到vue.js 的项目维护当中。

你问debugtalk教你怎么开发一个接口自动化测试框架?

嗯,他可以给你讲一讲 HttpRunner 在项目中的使用技巧 ,如果你有多年的接口测试经验,也可以提一些意见交流交流

如果一个测试小白,上来就要 “开发测试框架” ,还要别人教你怎么开发?
在这里插入图片描述
上面是我收集的一些视频资源,在这个过程中帮到了我很多。如果你不想再体验一次自学时找不到资料,没人解答问题,坚持几天便放弃的感受的话,可以加入我们扣扣群【313782132 】,里面有各种软件测试资源和技术讨论。

软件测试是IT相关行业中最容易入门的学科~不需要开发人员烧脑的逻辑思维、不需要运维人员24小时的随时待命,需要的是细心认真的态度和IT相关知识点广度的了解,每个测试人员从入行到成为专业大牛的成长路线可划分为:软件测试、自动化测试、测试开发工程师 3个阶段。

如果你不想再体验一次自学时找不到资料,没人解答问题,坚持几天便放弃的感受的话,可以加我们的软件测试交流群,里面有各种软件测试资料和技术交流。

猜你喜欢

转载自blog.csdn.net/weixin_50271247/article/details/109185215
今日推荐