1、自动化测试概念
自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程。通常,在设计了测试用例并通过评审之后,由测试人员根据测试用例中描述的规程一步步执行测试,得到实际结果与期望结果的比较。简言之,自动化测试就是让被测试的软件自己运行起来,执行软件的功能,或者就是让其他的工具自己运行起来,去检查软件的内部和外部。自动化测试包含自动化和测试两个概念:
自动化:由程序(或机器、设备等)代替人工自动完成指定目标的过程。
测试:校验系统是否满足规定的需求。
自动化测试:让程序(或机器、设备等)代替人工自动完成系统校验的过程。
那么,机器人怎么知道人类的要求?关键点是编程语言。
机器学习一个编程语言,轻松和简单到令人发指的地步:安装上去,机器就学会了。好在人类学习编程语言也不是特别难的事情。有了编程语言,就有了人机交流的桥梁,剩下的事情,就是帮机器挑选工具。做对应的测试,找到对应的工具,这样自动化就自动起来了。
总之,自动化测试引入的原因是把软件测试人员从枯燥乏味的机械性手工测试劳动中解放出来,以自动化测试工具取而代之,使测试人员的精力真正花在提高软件产品质量本身。尽管自动化测试可以降低人工测试的工作量,但并不能完全取代手工测试,一味追求测试自动化只会给企业带来运作成本的急剧上升。
自动化测试的优缺点
◆优点:
(1)提高测试执行效率,节约时间成本;
(2)解放人力去做更重要的工作;
(3)可重复利用,建设对人的依赖;
(4)提升客户满意度;
(5)提升测试团队的整体水平;
(6)可大幅度减少兼容性测试的工作量;
(7)有些测试工作必须依靠自动化实现来完成。
◆缺点:
(1)开发测试脚本需要花费较大的时间成本,拉长周期;
(2)产品的快速迭代,自动化脚本也将不断迭代,时间成本很高;
(3)不同的项目之间自动化脚本的复用度很低;
(4)对短期型项目产品实现自动化价值不高;
(5)自动化无法完全代替手工测试找到bug,实现%覆盖;
(6)自动化更多地适用于回归测试;
(7)自动化开发过程对软件测试团队的技术有更高的要求。
手工测试与自动化测试
手工测试:手工测试就是由测试人员一个一个地执行用例,然后观察测试结果是否符合预期,手工测试一般是基于两个原因:(1)时间资源不足;(2)技术水平不足。在这些情况下,手工测试能够发挥重要的作用。利用手工测试,我们可以定义测试,还可以跟踪测试。
自动化测试:自动化测试分为功能自动化和性能自动化,前者是通过测试工具(或框架)录制/编写测试脚本,对软件的功能进行测试,并验证测试结果是否正确,从而代替部分的手工测试工作,达到节约人力成本和时间成本的目的。后者是通过性能工具来模拟成千上万的虚拟用户向系统发送请求,从而验证系统的处理能力。
2、自动化测试适用场合
自动化测试的前提条件
(1)软件需求变动不频繁
测试脚本的稳定性决定了自动化测试的维护成本。如果软件需求变动过于频繁,测试人员需要根据变动的需求来更新测试用例以及相关的测试脚本,而脚本的维护本身就是一个代码开发的过程,需要修改、调试,必要的时候还要修改自动化测试的框架,如果所花费的成本不低于利用其节省的测试成本,那么自动化测试便是失败的。项目中的某些模块相对稳定,而某些模块的需求变动性很大。我们便可对相对稳定的模块进行自动化测试,而变动较大的仍使用手工测试。
(2)项目周期足够长
自动化测试需求的确定、自动化测试框架的设计、测试脚本的编写与调试均需要相当长的时间来完成,这样的过程本身就是一个测试软件的开发过程,需要较长的时间来完成。如果项目的周期比较短,没有足够的时间去支持这样一个过程,那么自动化测试便成为笑谈。
(3)自动化测试脚本可重复使用
如果费尽心思开发了一套近乎完美的自动化测试脚本,但是脚本的重复使用率很低,致使其间所耗费的成本大于所创造的经济价值,自动化测试便成为了测试人员的练手之作,而并非是真正可产生效益的测试手段了。
自动化测试使用场景
(1)比较频繁地回归测试;
(2)任务测试明确,不会频繁变动;
(3)每日构建后的测试验证;
(4)需要在多平台上运行的相同测试案例、组合遍历型的测试,大量的重复任务;
(5)软件维护周期长;
(6)项目进度压力不大;
(7)被测软件系统开发较为规范,能够保证系统的可测试性;
(8)具备大量的自动化测试平台;
(9)测试人员具备较强的编程能力;
(10)软件系统界面稳定,变动少。
3、自动化测试工具介绍
自动化测试主流工具介绍
目前市面上自动化工具非常多,我们可以根据测试需求的不同级别来酌情选择,大体上,有三种级别:代码级别、接口/协议级别、界面级别,以下是根据不同级别对应常用工具及特性。
(1)代码级别:
◆XUnit:为每个测试方法产生一个对象实例,可扩展的断言、测试方法和测试类
◆XMock:仅能适用于纯粹的面向对象的语言,使用多态来实现细节的模拟
◆Coverage:覆盖率测试工具
(2)接口/协议级别:
◆LoadRunner:支持全协议,重点是支持HTTP等
◆SoapUI:支持WebService协议SOAP
◆WebLoad:支持HTTP协议
◆RPT:重点支持HTTP和TCP/UDP协议
◆SilkPerformance:重点支持HTTP和TCP/UDP协议
◆HTTPClient,JsOUP:HTTP协议和HTML元素处理
◆JMeter:支持HTTP,JMS协议
(3)界面(UI)级别:
◆QTP/UFT:支持Windows,web,java,.NET应用程序
◆RFT:支持Windows,web,java,.NET应用程序等
◆TestComplete:支持各类应用程序及第三方组件,对象识别能力强
◆Selenium/Watir:支持Web应用,支持多平台、多语言、多浏览器
◆SikuliIDE:基于图像识别自动化测试工具,支持所有应用
◆Appium/MonkeyRunner:Android,IOS移动应用
Selenium工具介绍
(1)Selenium特点:
◆开源,免费;
◆多浏览器支持:FireFox、Chrome、IE、Opera、Edge;
◆多平台支持:Linux、Windows、MAC;
◆多语言支持:Java、Python、Ruby、C#、JavaScript、C++;
◆对Web页面有良好的支持;
◆简单(API简单)、灵活(用开发语言驱动);
◆支持分布式测试用例执行。
(2)Selenium版本:
Selenium经历了两个版本,Selenium1.0和Selenium2.0,Selenium不是由单独一个工具构成的,而是由一些插件、类库组成,每个部分都有其特点和应用场景。
(3)Selenium的构成:
◆SeleniumIDE:嵌入到Firefox浏览器中的一个插件,实现简单的浏览器操作的录制与回放功能。官方给出了它自身作用的定位:快速地创建bug重现脚本,在测试人员测试过程中,发现bug之后可以通过IDE将重现的步骤录制下来,以帮助开发人员更容易地重现bug。IDE录制的脚本可以转换成多种语言,从而帮助我们快速地开发脚本。
◆SeleniumGrid:自动化的测试辅助工具,Grid通过利用现有的计算机基础设施,能加快Web-App的功能测试。利用Grid可以很方便地实现在多台机器上和异构环境中运行测试用例。
◆SeleniumRC远程控制:SeleniumRC(RemoteControl远程控制)是Selenium家族的核心部分。SeleniumRC支持多种不同的语言编写自动化测试脚本,通过SeleniumRC的服务器作为代理服务器去访问应用,从而达到测试的目的。
◆ClientLibraries:主要用于编写测试脚本的库,用来控制SeleniumServer。
◆SeleniumServer:负责控制浏览器行为。
◆SeleniumCore:是被SeleniumServer嵌入到浏览器页面中的。其实SeleniumCore就是一堆JavaScript函数的集合,即通过这些JavaScript函数,我们才可以实现用程序对浏览器进行操作。
◆Launcher:用于启动浏览器,把SeleniumCore加载到浏览器页面当中,并把浏览器的代理设置为SeleniumServer的HttpProxy。
SeleniumRC与WebDriver的区别
确切的说,在Selenium2.0中,可以将WebDriver看作SeleniumRC的替代品。因为Selenium为了保持向下的兼容性,所以在Selenium2.0中并没有彻底地抛弃SeleniumRC。如果是初次使用Selenium开发一个新的自动化测试项目,那么可以直接使用WebDriver。那SeleniumRC与WebDriver的区别是什么呢?SeleniumRC是在浏览器中运行JavaScript应用,使用浏览器内置的JavaScript翻译器来翻译和执行selenese命令(selenese是Selenium命令集合)。
WebDriver是通过原生浏览器支持或者浏览器扩展来直接控制浏览器。WebDriver针对各个浏览器而开发,取代了嵌入到被测Web应用中的JavaScript。与浏览器的紧密集成,因此支持创建更高级的测试,避免了JavaScript安全模型导致的限制。除了来自浏览器厂商的支持之外,WebDriver还利用操作系统级的调用,模拟用户输入。
特别说明:Selenium与WebDriver原先属于两个不同的项目,现在两个项目已合并,合并的部分原因是WebDriver解决了Selenium存在的缺点(例如能够绕过JavaScript沙箱,我们有出色的API),部分原因是Selenium解决了WebDriver存在的问题(例如支持广泛的浏览器)。
4、Python脚本语言介绍
(1)Python语言简介:
Python是一种计算机程序设计语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的、大型项目的开发。有人说我们公司的软件是用某语言开发的,所以自动化测试也要选某语言;其实软件开发语言和软件自动化测试语言没有必然联系。也就是说,基于Python(+Selenium)编写的自动化测试脚本既可以测试基于Java开发的Web项目,也可以测试基于PHP开发的Web项目。所以,在选择Selenium自动化测试语言时不需要考虑与开发语言的一致性。
(2)为什么选择Python?既然Selenium可以支持多语言,如Java、C#、Ruby、PHP等,那我们为什么会选择Pyhton呢?主要有以下几点原因:
◆第一:简单易学,对编程能力较弱的初学者来说,通过自动化测试技术的实践,不仅可以掌握自动化测试技术,还能掌握一门语法简单且功能强大的编程语言。
第二:通用性强,Python可以应对很多不同的项目需求,根据不同场景需要选择相应的工具可以大大提高工作效率,例如:
◆UI自动化测试/兼容性测试(Python+Selenium)
◆接口测试(Python+requests)
◆性能测试(Python+Locust)
◆安全性测试(Python+Scapy)