当前位置: 首页 > 编程日记 > 正文

第一章 软件自动化测试的基础知识

测试工具以及测试方法并不能代表自动化测试,大多数人提到自动化测试,都会说会使用什么工具或者什么技术,这完全是错误的,和我在刚接触的时候一样,以为掌握了Selenium/QTP就以为自己是一名自动化测试工程师了,现在想想几年前的自己,还会笑笑。在开始学习测试工具之前,必须先了解一下自动化测试相关的基础知识,对自动化测试有个一个正确的认识。

1.1   什么是自动化测试?

首先理清自动化测试的概念,广义上来讲,自动化包括一切通过工具(程序)的方式来代替或辅助手工测试的行为都可以看做自动化,包括性能测试工具(loadrunner、jmeter)或自己所写的程序代码,用于生成多个测试数据。狭义上来讲,就是通过工具记录或编写脚本的方式模拟手工测试的过程,通过回放或运行脚本来执行测试用例,从而代替人工对系统的功能进行验证。

总结一下自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程。通常,在设计了测试用例并通过评审之后,由测试人员根据测试用例中描述的规程一步步执行测试,得到实际结果与期望结果的比较。在此过程中,为了节省人力、时间或硬件资源,提高测试效率,便引入了自动化测试的概念。

当然,我们更普遍的认识把“自动化测试”看做“ 基于产品或项目UI层的自动化测试”。这种观念是错误的,因为现在国内的自动化测试大多数停留在UI层,所以造成我们的认知误区,我在华为项目时接触自动化时的前半年,很多“前辈”把我也带进了误区,其实我本身也那时在工作时丢失了大学时的学习方式,导致很长一段时间停留在这个误区,把自己的眼光放在一个小圈子里,所以我希望后面学习的人不要进入这个误区,其实自动化测试在国外很早就提出了分层的概念。

1.2 测试金字塔

传统的自动化测试更关注产品UI 层的自动化测试,而分层的自动化测试倡导产品开发的不同阶段(层次)都需要自动化测试。

相信很多测试同学对上面的测试金字塔并不陌生,这个不仅对应产品开发各个同阶段所对应的测试!而且经常被各种测试书中或者测试培训中提到,但实际生产中,大多公司与开发团队其实是忽略了单元测试与集成测试阶段的自动化测试工作,并且投入的比重以及自动化实现与其完全不相符,当然这也与每个公司文化并且人员能力有关,所以,在分层的自动化测试中,我们只需要对这些定义重新理解和定义。

单元测试:

 

单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Java里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。总的来说,单元就是人为规定的最小的被测功能模块。单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。

通常单元测试由开发人员编写,测试人员很少参与进去,归根结底是因为测试人员编码能力不足。

集成、接口、API测试

接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等

例子1:例如,我定义一个add()函数用于计算两个参数的结果并返回,那么我需要调用add()并传参,并比较返回值是否两个参数相加。

例子2: 接口测试也可以是url 的形式进行传递。例如,我们通过get 方式向服务器发送请求,那么我们发送的内容做为URL 的一部分传递到服务器端。但比如Web service 技术对外提供的一个公共接口,可以通过postman/soapUI 等工具对其进行测试。

UI 层的自动化测试:

 

大部分测试现在的大部分工作都是对UI层的功能进行测试。例如,我们不断重复的对一个表单提交,结果查询等功能进行测试,我们可以通过相应的自动化测试工具来模拟这些操作,从而解放重复的劳动。UI 层的自动化测试工具非常多,比较主流的是QTP,Robot Framework、watir、Selenium 等。

1.3 为什么要自动化测试?

了解自动化基本概念后,那么要思考的是什么原因让一家公司或者一个团队决定要在公司推行自动化测试?并且要采用什么自动化方法?

说到这里,我想说很多小团队在决定引入自动化测试都是很茫然的,如朋友a说领导让做他就试试,朋友b说不知道看别人他们也试试,朋友c说可以提高年终绩效。。等等

其实这个问题真的很重要,因为最起码我可以知道我到底需要什么解决什么问题以及什么样目标对自动化来说是合理和最好的。有时,因为测试人力不足却大量需要回归测试保证产品质量,我们需要引入自动化来进行会测试,有时因为需要对一些测试数据进行定期维护,我们需要引入自动化测试,在你想做自动化测试之前,最好想想引入自动化能帮你解决目前需要解决的问题吗?由于这个问题具有发散性,所以为了找出最佳的答案,我们可以通过下面的问题思考:

  1. 什么能够进行自动化测试?
  2. 什么应该进行自动化测试?
  3. 什么必须进行自动化测试?
  4. 什么无需进行自动化测试?
  5. 自动化测试能帮助解决这个问题吗?

1.3 什么样的项目适合自动化测试

当决定引入自动化测试时,我们需要知道引入自动化测试的时机和项目的可测试性,以下是很多项目以及测试前辈总结的实践经验以及我的一些修改,因为不是什么所有项目的都适合实施自动化测试,并且能够取得成功,往往,浪费了大量的人力和时间而没有得到应有的收益。所以在你要对一个项目/或者需求实施自动化前,请认真思考下面的总结:

1、任务测试明确,不会频繁变动,

2、是否需要每日构建后的测试验证

3、是否存在比较频繁的回归测试

4、软件系统界面稳定变动少,是否有重构的计划

5、需不需要在多平台上运行的相同测试案例、组合遍历型的测试、大量的重复任务

6、软件维护周期

7、项目进度压力不太大

8、被测软件系统开发比较规范,能够保证系统的可测试性

9、对于UI项目需要进行demo评估产品的可测试性(大量的第三的插件或者难维护的UI元素)

10、对于API项目了解APi是否独立,是否太过于依赖数据等等、

1.4 技术提升(自动化测试方向)

认为比较好技术岗的学习步骤如下(当然你也可以选择偏测试顾问岗位,可能需要大量的项目经验,并且多实践/总结/产出落地,我个人比较喜欢,只是一直没机会):

à做好手工测试(了解各种测试的知识/不同测试产品的测试方法,提高测试分析能力)

à学习编程语言(了解一门主流的编程语言,并且能够在后面的工作中不断深入学习)

à学习Web基础(了解HTML,HTTP,CSS,DOM,Javascript,UI层自动化必须掌握的)

à学习自动化测试工具 (熟练掌握Selenium/Appnium/Httpclient)

à学习自动化测试框架 (熟练掌握testng/junit)

à实现自动化测试用例 (最好能够接触不同的项目,不断总结用例转换的经验以及难点分析,这将成为你设计测试框架的最用力的需求)

à开发自动化测试工具(能够根据需求编写的符合项目需求的工具)

à开发自动化测试框架(能够独立完成框架实现)

自动化测试技术方向的最高境界是:  开发测试工具,设计自动化测试框架, 让别人用(但是需要真正了解测试的需求)

通过上面简单的学习初步对自动化测试有一定了解,你可以尝试用正确的方式把自动化引入到项目,并且树立自己学习的目标顺序。后面内容再提到自动化测试就是指分层模型的UI层自动化测试,并且测试方法针对的是Web  B/S类型的产品。

转载于:https://www.cnblogs.com/hylinux/p/7444391.html

相关文章:

Request.ServerVariables获取环境变量

Request.ServerVariables("HTTP_X_FORWARDED_FOR") 透过代理服务器取得客户端的真实IP地址,有些用此方法读取到的仍然是代理服务器的IP。还有一点需要注意的是:如果客户端没有通过代理服务器来访问,那么取到的值将是空的。 Request…

Java虚拟机JVM学习06 自定义类加载器 父委托机制和命名空间的再讨论

Java虚拟机JVM学习06 自定义类加载器 父委托机制和命名空间的再讨论 创建用户自定义的类加载器 要创建用户自定义的类加载器,只需要扩展java.lang.ClassLoader类,然后覆盖它的findClass(String name)方法即可,该方法根据参数指定的类的名字&a…

腾讯千帆战略升级,推出企业应用连接器

4月26日,腾讯在北京举行“2021腾讯千帆战略发布会”,解读其SaaS生态战略,并面向行业和客户发布了“企业应用连接器”。 2019年,腾讯发布千帆计划1.0,两年之后,这个涵盖腾讯SaaS生态的计划已经进化到2.0。与…

游戏角度分析产品

2019独角兽企业重金招聘Python工程师标准>>> 游戏角度分析 1:减少用户时间成本 - 碎片化的时间可玩 2:减少用户学习成本 - 操作够简单 3:增强用户的范围 - 操作够简单 -> 儿童,女生大量增加 4:增强用户骚浪体验 - 炫耀的快感 5:增强游戏物品的稀确性 - 花钱也买不…

EXCEL数据导入数据库

1、类设计&#xff0c;EXCEL要据配置读入DATASET using System;using System.Data;using System.Collections;using System.Data.OleDb; namespace HKH.Common{ /// <summary> /// Excel 表格中 列标头 与 列索引 的对应转换 /// </summary> /// <remarks>…

免费正则表达式辅助工具(转)

免费正则表达式辅助工具 前段时间由于工作需要&#xff0c;学了一天的正则表达式&#xff0c;发现正则表达式功能实在是强大&#xff0c;但是也很奇怪&#xff0c;刚接触会很不习惯。我不需要很深入地了解&#xff0c;所以也没学多久&#xff0c;不过找了几款很不错的免费的正则…

@所有人,CSDN 粉丝专属福利来啦!

属于CSDN粉丝专属福利来了&#xff01;不一样的专属福利&#xff0c;只属于少数人的免费计算资源&#xff01;即日起&#xff0c;并行科技联袂CSDN针对社区粉丝&#xff0c;推出“免费算力限时领”活动&#xff0c;新用户填写表单&#xff0c;即可获得“5000核时CPU或500元卡时…

算法:快速排序实现 定制比较函数

1. 快速排序基本算法 1 #include<stdio.h>2 const static int NUM 47; 3 4 int quick_sort(int *a, int start, int end){5 if (start > end) 6 return 0; 7 8 int partition a[start]; //分割点value, 设置为第一个点.最后patition点设置为这个…

人民币大小写转换

using System;using System.Text;using System.Text.RegularExpressions; namespace HKH.Common{ /// <summary> /// 人民币大小写格式转换 /// </summary> /// <remarks> Create By Lwt on 2006/09/23 /// </remarks> public class clsRMB { privat…

冒泡排序(java实现)

冒泡排序&#xff0c;就是每次遍历都会把最小(或者最大)的数放在前面。比如要升序{A1,........An} 第一次排序要取出整个数组中最小放在A1的位置&#xff0c;从An开始往前遍历&#xff0c;相邻两个数比较&#xff0c;如果Aj < Aj-1 则换位。知道比较到A1 这一趟完事之后 A…

好看又好用的 GUI,你需要这七个 Python 必备库,

来源 | 法纳斯特头图 | 下载于ICphotoGUI(图形用户界面)&#xff0c;顾名思义就是用图形的方式&#xff0c;来显示计算机操作的界面&#xff0c;更加方便且直观。与之相对应的则是CUI(命令行用户交互)&#xff0c;就是常见的Dos命令行操作&#xff0c;需要记忆一些常用的命令&a…

总结PHP 7新增加的特性

?? 运算符&#xff08;NULL 合并运算符&#xff09; 把这个放在第一个说是因为我觉得它很有用。用法&#xff1a; $a $_GET[a] ?? 1;它相当于&#xff1a; <?PHP $a isset($_GET[a]) ? $_GET[a] : 1; 我们知道三元运算符是可以这样用的&#xff1a; $a ?: 1但是这是…

谈“云”色变?近80%企业曾遭受数据泄露

出品 | 《大咖来了》 一边是企业上云这一毋庸置疑的发展趋势&#xff0c;但另一边&#xff0c;云数据泄露事件的频繁&#xff0c;却让不少企业谈“云”色变。 2020年2月&#xff0c;万豪酒店520万客人信息被泄露&#xff0c;英国信息专员办公室(ICO)对其进行了1840万英镑(约1.…

C语言的32个关键字

C语言的关键字共有32个&#xff0c;根据关键字的作用&#xff0c;可分其为数据类型关键字、控制语句关键字、存储类型关键字和其它关键字四类。1 数据类型关键字&#xff08;12个&#xff09;&#xff1a; (1) char &#xff1a;声明字符型变量或函数 (2) double &#xff1a;声…

Python中线程Timeout的使用

Python中关于Timeout有另一种用起来更简便的方法&#xff0c;即使用装饰器。这种方式是使用sys模块的settrace等方法重构了python的threading类&#xff1a;#!/usr/bin/python import threading import sys class KThread(threading.Thread):"""Subclass of thr…

Vue的模板语法学习

模板语法 1、插值 a、文本 数据绑定最常见的形式就是使用 “Mustache” 语法&#xff08;双大括号&#xff09;的文本插值 我们在普通插值的时候无论何时&#xff0c;绑定的数据对象上 msg 属性发生了改变&#xff0c;插值处的内容都会更新 【案例】 <div id"app"…

求二维数组中最大子数组的和

任国庆 张博 之前我们讨论了在一维数组中求最大子数组的和&#xff0c;在此基础上我们开始讨论二维数组的最大子数组。 求二维数组的最大子数组思想是建立在以为数组。首先将数组的第一列看成一个一维数组&#xff0c;找到该列的最大子数组的值&#xff0c;然后将第二列与第一…

赠书 | 详解 4 种爬虫技术

作者 | 赵国生 王健来源 | 大数据DT头图 | 下载于视觉中国前言&#xff1a;聚焦网络爬虫是“面向特定主题需求”的一种爬虫程序&#xff0c;而通用网络爬虫则是捜索引擎抓取系统&#xff08;Baidu、Google、Yahoo等&#xff09;的重要组成部分&#xff0c;主要目的是将互联网上…

nginx 通过proxy_next_upstream实现容灾和重复处理问题

proxy_next_upstream指令语法: proxy_next_upstream error | timeout | invalid_header | http_500 | http_502 | http_503 |http_504 |http_404 | off ...; 默认值: proxy_next_upstream error timeout; 上下文: http, server, locationerror # 和后端服务器建立连接时&…

javascript身份证号码验证函数支持带x

//--身份证号码验证-支持新的带x身份证functionisIdCardNo(num) { varfactorArr newArray(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1); varerror; varvarArray newArray(); varintValue; varlngProduct 0; varintCheckDigit; varintStrLen num.length; v…

「AI 质检员」在富士通上岗,效率比人工高 25%

日本第一 IT 厂商富士通&#xff0c;于近日宣布开发了用于检测产品外观异常的 AI 技术&#xff0c;从而节省人力成本、材料成本等&#xff0c;同时也可节省声誉损失和退货/召回相关的成本&#xff0c;「无人工厂」已来。来源 | Hyper超神经责编 | 寇雪芹头图 | 下载于视觉中国去…

asp在线压缩和解压缩文件(文件夹)

asp在线压缩和解压缩文件&#xff08;文件夹&#xff09; <%\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ 1. c:\windows\system32\cmd.exe\\ 拷贝把本文件所在的路径\\\\ 2. 把 c:\program\winrar\rar.exe\\ 拷贝把本文件所在的路径 并改名为WinRAR.e…

SpringMVC + Hibernate-Validator 参数校验

2019独角兽企业重金招聘Python工程师标准>>> 前言&#xff1a; Web开发中&#xff0c;最为常见的场景就是前端表单数据、Json数据与后端实体类的绑定&#xff0c;即使JS能校验并阻止大部分的必填漏填的风险&#xff0c;但并不能防止恶意破坏者修改脚本。因此后端参数…

深入浅出,机器学习该怎么入门?

来源 | 算法进阶责编 | 寇雪芹头图 | 下载于视觉中国前言&#xff1a;机器学习作为人工智能领域的核心组成&#xff0c;是计算机程序学习数据经验以优化自身算法&#xff0c;并产生相应的“智能化的”建议与决策的过程。一个经典的机器学习的定义是&#xff1a;A computer prog…

防止SQL注入式攻击

1将sql中使用的一些特殊符号&#xff0c;如 -- /* ; %等用Replace()过滤&#xff1b;2限制文本框输入字符的长度&#xff1b;3检查用户输入的合法性&#xff1b;客户端与服务器端都要执行&#xff0c;可以使用正则。4使用带参数的SQL语句形式。 尽量用存储过程

js中document.write的那点事

document.write()方法可以用在两个方面&#xff1a;页面载入过程中用实时脚本创建页面内容&#xff0c;以及用延时脚本创建本窗口或新窗口的内容。该方法需要一个字符串参数&#xff0c;它是写到窗口或框架中的HTML内容。这些字符串参数可以是变量或值为字符串的表达式&#xf…

SVN提示被锁定的解决方法(转)

1、&#xff08;常用&#xff09;出现这个问题后使用“清理”即"Clean up"功能&#xff0c;如果还不行&#xff0c;就直接到上一级目录&#xff0c;再执行“清理”&#xff0c;然后再“更新”。 2、&#xff08;没试过&#xff09;有时候如果看到某个包里面的文件夹没…

征集佳句-精妙SQL语句收集

征集佳句-精妙SQL语句收集 SQL语句先前写的时候&#xff0c;很容易把一些特殊的用法忘记&#xff0c;我特此整理了一下SQL语句操作&#xff0c;方便自己写SQL时方便一点&#xff0c;想贴上来&#xff0c;一起看看&#xff0c;同时希望大家能共同多多提意见&#xff0c;也给我…

【WP8】ResourceDictionary

WP8中引用资源字典 当我们定义的样式太多的时候&#xff0c;我们可以把样式分别定义在不同的文件中&#xff0c;然后通过 MergedDictionaries 应用到其他资源字典中&#xff0c;看下面Demo 我们可以把样式定义在多个文件中&#xff0c;然后再App.xaml中引用 我们先定义三个文件…

拿来就能用! CTO 创业技术栈指南!

作者 | Nitin Aggarwal译者 | 弯月出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;随着开发运维概念的诞生&#xff0c;以及“You build it, you run it.”&#xff08;谁构建&#xff0c;谁运维&#xff09;理念的盛行&#xff0c;现代创业公司的技术栈也发生了许…