Testing - 软件测试知识梳理 - 自动化测试

软件开发的过程是一个持续集成和改进的过程,而每一次的改进都可能引进新bug,因此当软件的一部,或者全部修改时,都需要对软件产品重新进行测试。
其目的是要验证修改后的产品是符合需求的,而当没有自动化测试代码时,往往会由于各种各样的原因,回归不充分,导致bug遗漏。

自动化测试模型

一个自动化测试框架就是一个集成体系,在这一体系中包含测试功能的函数库、测试数据源、测试对象识别标准,以及种可重用的模块。
自动化测试框架在发展的过程中,不断有新的模型(概念)被提出,目前经历了几个阶段:模块驱动测试、数据驱动测试、对象驱动测试。
自动化测试模型是自动化测试架构的基础。

线性测试
通过录制或编写脚本,一个脚本完成一个场景(一组完整功能操作) ,通过对脚本的回放来进行自动化测试;
优势就是每一个脚本都是独立的,任何一个脚本文件拿出来就能单独运行;
缺点也很明显,用例的开发与维护成本很高;
这种模式下数据和脚本是混在一起的,如果数据发生变也需要对脚本进行修改。这种模式下的脚本没有可重复使用的概念;

模块化与类库
把脚本中重复使用的部分代码独立出来,形成公共的模块或库,需要的时候进行调用;
优点:提高了开发效率,不用重复的编写相同的脚本;方便了代码的维护,代码的更改限制在模块之内;

数据驱动
数据的改变(更新)驱动测试自动化的执行,从而引起测试结果的改变;
可以直白地理解成“输入数据的不同从而引起输出结果的变化”;
优点是实现了数据与脚本的分离(参数化),增强的脚本的复用性;
在开发层面,易于实现;

关键字驱动
理解了数据驱动,无非是把“数据”换成“关键字”,通过关键字的改变引起测试结果的改变;
独立以编程方式实现关键字驱动似乎不太容易,一般是利用现有工具和框架;
在QTP、robot framework 等此类型的测试工具中, “填表格”式的关键字驱动封装了很多底层的东西,易用性强;
测试人员只要考虑三个问题:要做什么? 对谁做?怎么做?

自动化测试用例

自动化测试用例手工测试用例
执行对象是脚本,任何一个判断都需要编码定义。较好的异常处理能力,能通过人为的逻辑判断校验当前步骤的功能实现正确与否
用例步骤之间关联性强。人工执行用例具有一定的步骤跳跃性。
主要用来保证产品主体功能正确完整和让测试人员从繁琐重复的工作中解脱出来。人工测试步步跟踪,能够细致的定位问题。
主要定位在冒烟测试和回归测试主要用来发现功能缺陷

自动化测试替代不了手工测试,目的仅仅在于让测试人员从繁琐重复的机械式测试过程解脱出来,把时间和精力突入到更有价值的地方,从而挖掘更多的产品缺陷。

  • 冒烟测试执行的是主体功能点的用例。
  • 回归测试执行全部或部分的测试用例。

自动化测试用例设计

一些注意事项:

  1. 不是所有的手工用例都要转为自动化测试用例。
  2. 考虑到脚本开发的成本,不要选择流程太复杂的用例。如果有必要,可以考虑把流程拆分多个用例来实现脚本。
  3. 选择的用例最好可以构建成场景。例如一个功能模块,分 n 个用例,这 n 个用例使用同一个场景。这样的好处在于方便构建关键字测试模型。
  4. 选择的用例可以带有目的性,例如这部分用例是用例做冒烟测试,那部分是回归测试等,当然会存在重叠的关系。如果当前用例不能满足需求,那么唯有修改用例来适应脚本和需求。
  5. 选取的用例可以是你认为是重复执行,很繁琐的部分,例如字段验证,提示信息验证这类。这部分适用回归测试。
  6. 选取的用例可以是主体流程,这部分适用冒烟测试。
  7. 自动化测试也可以用来做配置检查,数据库检查。这些可能超越了手工用例,但是也算用例拓展的一部分。项目负责人可以有选择地增加。
  8. 如果平时在手工测试时,需要构造一些复杂数据,或重复一些简单机械式动作,告诉自动化脚本,让他来帮你。或许你的效率因此又提高了

一些原则:

  • 一个脚本是一个完整的场景
  • 一个脚本只验证一个功能点
  • 遵循用户正常使用原则编写脚本,尽量只做功能中正向逻辑的验证。不要考虑太多逆向逻辑的验证(逆向逻辑的情况会很多,需要编写大量的脚本,而且非正常的逻辑难以被自动化脚本所验证)
  • 在整个脚本中只对验证点进行验证,不要对整个脚本每一步都做验证。
  • 如果对数据进行了修改,需要对数据进行还原。
  • 脚本之间不产生关联性,也就是说编写的每一个脚本都是独立的,不能依赖或影响其他脚本。

软件过程自动化

  • 构建自动化:自动化从各个模块的源码构建组装成一个完整的产品
  • 测试自动化:构建前自动完成相应的测试工作
  • 部署自动化:对于通过测试的构建好的产品,做好成品测试后,自动化部署到生产服务器
  • 自动化场合选取:尽量对稳定的对象做自动化,如API接口;GUI不建议使用自动化,投资回报比太低,变更大
  • 自动化比例:基于稳定的测试环境和测试计划;在效率和质量上寻求平衡点

自动化测试的实施

适合做自动化测试的项目

  • 软件需求变动不频繁
    测试脚本的稳定性决定了自动化测试的维护成本。
    如果软件需求变动过于频繁,测试人员需要根据变动的需求来更新测试用例以及相关的测试脚本。
    而脚本的维护本身就是一个代码开发的过程,需要修改、调试,必要的时候还要修改自动化测试的框架,如果所花费的成本不低于利用其节省的测试成本,那么自动化测试便是失败的。
    项目中的某些模块相对稳定,而某些模块需求变动性很大。我们便可对相对稳定的模块进行自动化测试,而变动较大的仍是用手工测试。

  • 项目周期较长
    自动化测试需求的确定、框架的设计、脚本的编写与调试,这样的过程本身就是一个测试软件的开发过程,需要较长的时间来完成。
    如果项目的周期比较短,没有足够的时间去支持这样一个过程,那么自动化测试便成为笑谈。

  • 自动化测试脚本可重复使用
    所测试的项目之间是否很大的差异性(如C/S系统和B/S系统的差异);
    所选择的测试工具是否适应这种差异;
    测试人员是否有能力开发出适应这种差异的自动化测试框架。

不同阶段对应的自动化测试

  • 单元测试
    关注代码的实现逻辑,例如一个if 分支或一个for循环的实现;
    利用相应的单元测试框架,几乎所有的主流语言,都会有其对应的单元测试框架。

  • 集成、接口测试
    关注函数、类(方法)所提供的接口是否可靠。

  • UI层的功能测试
    通过相应的自动化测试工具来模拟UI层的功能测试,从而解放重复的劳动。

自动化测试应该侧重于单元测试与接口测试。然后有选择有必要地通过自动化方式“部分解放”UI层的重复劳动。
三种测试的比例要根据实际的项目需求来划分。
以google为例,70%的投入为单元测试,20%为集成、接口测试,10% 为UI层的自动化测试(《google 测试之道》)。

参考信息

  • 测试自动化后,我们需要怎样的QA?
  • 聊聊自动化测试框架

转载于:https://www.cnblogs.com/anliven/p/6076044.html

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

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

相关文章

Virtual script not found, may missing <script lang=“ts“> / “allowJs“: true / jsconfig.json.volar

解决办法: 在 jsconfig.json 配置文件中设置 "allowJs": true 如果没有jsconfig.json文件,直接在项目要目录创建一个,添加如下配置内容即可: /** Title: This is a file for ……* Author: JackieZheng* Date: 2022…

协鑫集成“熄灯工厂”装上ET工业大脑,验证订单命中率可提高3.99%

4月26日的云栖大会南京峰会,协鑫集成宣布,与阿里云ET工业大脑合作后,通过人工智能验证的订单命中率可提高3.99%。 协鑫集成是全球一线组件制造商,积极致力于推进自主创新与智能制造,综合运用信息通讯、物联网、大数据决…

pip install mysql-connector 安装出错

一、MySQL Connector/Python 2.2.3 的变化: 之前 mysql 官方说MySQL Connector/Python 是纯python语言写的,但是呢! 这个问题在2.2.3中变天了; 以下是MySQL Connector/Python 2.2.3 是变更记录 Changes in MySQL Connector/Python…

2022世界传感器大会 | 龙芯中科发布龙芯2K0500多功能SoC芯片及解决方案

8月21日,由工业和信息化部、中国科学技术协会、河南省人民政府共同主办的2022世界传感器大会在郑州开幕,众多诺奖、图灵奖获得者、海内外院士和专家学者出席,全球传感器领域最具影响力的相关企业参加。龙芯中科董事长胡伟武在大会开幕式发表主…

Vue3 配置config文件,打包后随意修改配置,无需重新打包和重启

在public目录创建config.json文件,名字随便起。 {"AppVersion": "1.0","AppTitle": "这里是程序名称" } 修改AppTitle: {"AppVersion": "1.0","AppTitle": "这里是修改后的…

TypeError: pyqtSignal must be bound to a QObject

super(MyQObject, self).__init__() #如果写了__init__()函数,这一行一定要有,否则会出现 #TypeError: pyqtSignal must be bound to a QObject, not MyQObject转载于:https://www.cnblogs.com/CGAlpha/p/6971527.html

Jmeter-3.0的源码导入eclipse并执行

最近在研究jmeter二次开发,所以需要先jmeter导入Eclipse,后续还需要学习jmeter源码以及二次开发的相关知识,到时候也会分享出来,下面是jmeter导入Eclipse的过程首先去官网下载apache-jmeter-3.0的源码包和release包(二…

在Vue3中使用Element Plus Icon图标的几种方式

安装 Element Plus $ npm install element-plus/icons在main.js 引入 import * as ElIcon from element-plus/icons-vueObject.keys(ElIcon).forEach((key) > {app.component(key, ElIcon[key]) }) 方式一&#xff1a;通过 icon"el-icon-plus" 使用 <!-- …

Qt 打印机操作

2019独角兽企业重金招聘Python工程师标准>>> 配置文件加入打印机支持&#xff1a; QT printsupport 1、打印图片 打印图片所需头文件&#xff1a; #include <QPixmap> #include <QPrinter> #include <QPainter> 打印图片代码&#xff1a; QStrin…

centOS7 安装mysql 设置远程访问

CentOS 7的yum源中貌似没有正常安装mysql时的mysql-sever文件&#xff0c;需要去官网上下载 # wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm# rpm -ivh mysql-community-release-el7-5.noarch.rpm# yum install mysql-community-server成功安装之后…

spark集群详细搭建过程及遇到的问题解决(四)

在spark集群详细搭建过程及遇到的问题解决&#xff08;三&#xff09;中&#xff0c;我们将讲述了hadoop的安装过程&#xff0c;在本文中将主要讲述spark的安装配置过程。sparkmaster:~/spark$ cd hadoop sparkmaster:~/spark/hadoop$ cd $SPARK_HOME/conf sparkmaster:~/spark…

k8s 读书笔记 - 深入掌握 Pod

什么是 PodPod 是可以在 Kubernetes 中创建和管理的、最小的可部署的计算单元。在同一个 context 下&#xff0c;应用可能还会有独立的 cgroup 隔离机制&#xff0c;一个 Pod 是一个容器环境下的 “逻辑主机”。Pod 是一组容器单元&#xff0c; 这些容器共享存储、网络、以及怎…

Net core 报 Could not load file or assembly ‘System.Security.Permissions 错误

完整错误提示 System.IO.FileNotFoundException:“Could not load file or assembly System.Security.Permissions, Version4.0.3.0, Cultureneutral, PublicKeyTokencc7b13ffcd2ddd51. 系统找不到指定的文件。” 控制台 错误提示&#xff1a; 根据提示可知&#xff1a;这是由…

“芯”痛痛在系统与芯片 转型升级是历史趋势

2019独角兽企业重金招聘Python工程师标准>>> 4月23号&#xff0c;中共中央政治局召开会议&#xff0c;分析研究当前一系列经济工作形势&#xff0c;并且强调完成今年的目标任务&#xff0c;需要付出艰苦努力&#xff0c;关键是要同高质量发展的要求对表&#xff0c;…

如何让Vuex刷新页面数据不丢失?实现方法和原理 vuex-persistedstate 和 vuex-persist的使用

如题&#xff1a;由于vue自身特性的原因&#xff0c;vuex中的数据在页面刷新之后其中的数据会初始化&#xff0c;这就导致组件之间通过vuex传递的数据在用户f5刷新页面之后会丢失 页面刷新后&#xff0c;想保存页面未保存的数据。我们总是习惯于放在浏览器的sessionStorage和l…

linux系统中如何查看日志 (常用命令)

2019独角兽企业重金招聘Python工程师标准>>> linux系统中如何查看日志 (常用命令) cat tail -f 日 志 文 件 说 明 /var/log/message 系统启动后的信息和错误日志&#xff0c;是Red Hat Linux中最常用的日志之一 /var/log/secure 与安全相关的日志信息 /var/log/…

C语言之基本算法26—佩尔方程求解

//穷举法&#xff01;/*题目&#xff1a;求佩尔方程x*x-73*y*y1的解。 */ #include<stdio.h> #include<math.h> int main(void) {int x,y;double t;for(y1;y<10000000;y){t1.073.0*y*y;x(int)sqrt(t);if((x<10000000)&&(1.0*x*xt))printf("x%8d…

刚刚 Kubernetes 1.25 正式发布,所有变化都在这儿了

此版本带来了 40 项增强功能&#xff0c;略少于Kubernetes 1.24 中的 46 项。在这 40 项增强功能中&#xff0c;13 项正在升级到稳定版&#xff0c;10 项是对现有功能的不断改进&#xff0c;15 项是全新的&#xff0c;2 项是已弃用的功能。此版本的亮点是 PodSecurityPolicies …

vue经验 - 细节小知识点汇总(更新中...)

1. $refs 数据这么绑定的&#xff1a; 然后在created中抛出来&#xff0c;猜猜看看打印的是两个什么&#xff1f; 结果如下&#xff1a; 第一个跑出来了&#xff0c;第二个&#xff0c;却undefiend&#xff0c;没有东西&#xff1f;&#xff01;。。。 后来去官网查看$refs的解…

Jquery打叉怎么办

选中报错文件右键MyEclipse>Exclude From xxxx