• 0
  • 0
分享

  一、自动化测试简介

  1、什么是自动化测试

  软件测试是软件产品开发过程中不可或缺的环节,众所周知,软件测试的分类方法非常多,根据不同的分类,测试可以分为很多种不同的测试方式。如果根据不同的测试点分类,可以将测试分类划分为功能测试、性能测试,这也是我们最常见的的软件测试范畴。而我们的自动化测试,一般意义上来说,是指对功能、性能进行脱离手工的自动化的测试。

  对于自动化测试,更广泛的意义,是对界面功能的自动化测试。因此,按照对软件测试的自动化程度,可以分为手工测试、自动化测试。再进一步细分,界面自动化测试,又可根据平台的不同,分为Web自动化测试、移动端自动化测试,而他们的测试工具及框架基本是大相径庭的。

  本文,我将依托WebUI自动化测试(网页界面功能自动化测试),简单谈谈我对几款常用的自动化工具及框架的看法。

  2、它可以做自动化测试么

  关于自动化测试的适用性,一定要明确一点,那就是:不是所有的系统都适合做自动化测试!甚至有的系统根本无法做自动化测试。那么什么样的系统适合做自动化测试呢?总结几点重要因素,如下图所示。

1-1.png

  二、工具篇

  1、UFT(QTP)

  UFT就是以前最常用的自动化测试工具QTP,用来进行WebUI自动化测试的。QTP实现的是独占屏幕操作,仿真实际用户操作,一般用于回归测试和新版本测试。

  它的特点是:支持Windows平台,使用VBScript编写测试脚本,相比Java/C#这类语言,显然更受测试人员欢迎。

  它的测试流程是:【制定测试计划】-【创建测试脚本】-【增强测试脚本】-【运行测试】-【分析测试结果】。QTP的脚本生成是通过轨迹录制,再进行增强优化,最后实现回放。因此VBScript脚本的逻辑比较松散,因此对于复杂页面情况的处理能力比较弱,脚本维护的成本就非常高。最重要的是,QTP是收费的,QTP11.5版本发布改名为UFT。下图是UFT的工作台界面。

1-2.png

  2、Selenium

  Selenium是目前最常用的一种Web自动化测试工具,是开源的,它可并行测试,模拟用户操作,贴近用户实际操作,测试效果直观。它的优势,首先,兼容性好,兼容多平台,多浏览器,多语言编写脚本,因此它从测试脚本开发,到部署运行,都比较稳定;其次,API丰富,可以实现对浏览器、页面元素、鼠标键盘、JS窗口等几乎所有的用户操作,执行效率较高。

  当前Selenium已发展到第3代,包含三大组件,SeleniumIDE+WebDriver+SeleniumGrid。

  SeleniumIDE是Firefox中的一个组件,可以录制操作轨迹,自动生成脚本并进行回放,但它的缺点是不稳定,生成的代码效率低,定位大多采用自动的xpath方式定位,定位繁琐,回放成功率低,且不适用于复杂系统。

  SeleniumGrid是用于实现分布式测试。

  WebDriver是Selenium核心组件,它就是实现页面操作的组件,利用浏览器原生的API,封装成一套更加面向对象的SeleniumWebDriverAPI,直接操作浏览器页面里的元素,执行效率更高,且稳定性依赖于浏览器厂商,显然更加稳定,因此各大常见浏览器都有对应的WebDriver,例如Chrome对应chromedriver,Firefox对应geckodriver,IE对应iedriver,甚至比较高版本的selenium还自带了部分常用浏览器的驱动,使用起来非常方便。它的优势显而易见,使用浏览器源厂的驱动来进行自动化控制,给我们带了更高的安全感。

  3、Appium

  Appium是目前最常用的一款移动端自动化测试工具,是开源的,它支持Android和iOS平台的原生应用、web应用和Hybrid应用。它的优势,支持跨平台,多语言脚本编写。因此,兼容性很好,开发便捷。

  Appium是C/S架构,提供了基于SeleniumWebDriver协议的统一接口。那么这里就需要说明一下Appium与Selenium的关系了。Appium封装了标准的Selenium客户端类库,Appium继承了Selenium中的WebDriver,因此也是通过WebDriver实现界面的定位及操作。而Appium实现的是PC端连接移动端的桥梁作用,这样才能通过PC端对移动端进行自动化测试。

  4、工具对比

  由于Selenium和Appium都是使用的WebDriver实现操作的,因此这里只对比UFT和Selenium。下面这个表格,充分体现了两者之间的优势与劣势,测试人员可以根据需要选择合适的测试工具,以实现最高的测试效率。

1-3.png

  三、框架篇

  时下比较主流的自动化测试框架,有TestNG、unittest、pytest、RobotFramework。第一个框架基于Java,后三者基于Python,Java和Python是编写自动化测试脚本最常用的两种语言。下面就简单介绍这四款框架。

  1、TestNG

  TestNG是一款基于Java的自动化测试框架。说到TestNG就不得不提到JUnit,两者都是基于Java的测试框架,功能差异不大,但是TestNG底层调用的是JUnit,因此TestNG的使用对于测试人员来说更友好。而JUnit更偏向白盒测试,所以开发人员用来做单元测试比较多,而且测试结果可读性对测试人员也有一定难度。TestNG使用更便捷,例如并发测试JUnit需要调用第三方库,TestNG则不需要。一般TestNG主要测试人员使用。

  TestNG的主要特点有:(1)涵盖单元测试、功能测试、集成测试等;(2)基于Annotation(注解)机制,测试方法更灵活,当我们想执行一部分测试脚本的时候,就可以使用xml配置文件进行配置,在xml配置文件里,可以选择某些需要执行的测试脚本,排除不需要运行的测试脚本;(3)支持多线程测试,这一点很重要,可以大大提高执行效率。

  TestNG还可以自动生成html、xml格式的测试报告。测试报告位于"test-output"目录下,只需要执行测试用例时使用TestNG执行即可自动生成,无需配置,使用便捷。同时还可以对报告内容的详细程度进行设置,可以说是比较完善的测试报告了,测试报告的样式如下图所示,展示比较直观、简明,可以直接看到共执行了多少个用例,成功/失败分别是多少个,设置级别更高的报告,还可以查看具体的失败情况。

  TestNG的使用方法,是将测试用例生成测试套件,通过执行测试套件来执行测试用例,常用的组件如下图所示:

1-4.png

  @Test表示一个测试用例;

  @BeforeMethod/@AfterMethod表示在每一个方法执行前/后执行一次;

  @BeforeTest/@AfterMethos表示在每个测试用例执行前/后执行一次;

  例如,在使用TestNG框架时,就可以将“启动浏览器”的操作步骤封装在@BeforeTest中,“关闭浏览器进程”的操作封装在@AfterTest中,这样就提高了代码复用性。

1-5.png

  2、unittest

  unittest是一款常用的单元测试框架。它更偏向底层,二次开发方便,因此对于测试人员来说,就具备一定的难度了。它的优势是Python自带框架,可生成HTML测试报告,使用的是HTMLTestRunnerNew库。由此,若基于Python开发的测试代码,就非常适合采用unittest测试框架。只需要使用自带的方法生成测试套件,执行测试套件,即可完成多种组合方式的测试。因此,针对Python的自动化测试,unittest可谓是最佳拍档,可以轻松完成大部分的测试功能。

  unittest也可以将浏览器启动、关闭等通用方法封装,生成测试用例,再将测试用例生成测试套件来执行,如下图所示。

1-6.png

1-7.png

  unittest也可以自动生成测试报告,报告形式如下图所示,报告的内容与TestNG生成的报告内容相似,展势执行用例的数量、结果等信息,也可以设置详细等级、标题等信息。

1-8.png

  3、pytest

  pytest是基于unittest扩展的第三方测试框架,比unittest更简洁高效。pytest可以执行unittest风格的测试用例,无须修改unittest用例的任何代码,有较好的兼容性。pytest插件丰富,比如returnfailures插件,可用于用例出错重跑;还有xdist插件,可用于设备并行执行测试用例。可使用pytest-HTML插件生成测试报告。pytest也可用来进行验收测试,适合复杂度不是很高的系统。

  4、RobotFramework

  RobotFramework也是一款功能强大的自动化测试框架,基于Python的关键字驱动测试框架,自带报告生成,功能完善。因此它易用性更高,测试人员使用成本低,但灵活性就偏低了。一般多用于验收测试和验收测试驱动开发的自动化测试框架。支持跨平台(Windows/Linux/MacOS)。

  它的特点,关键字驱动测试(KDT),简化自动化过程,对测试人员来说更易读,测试数据语法也简单易用,扩展性高,例如支持Selenium第三方类库可进行WebUI自动化测试,支持SeleniumGrid执行并发测试,并且可生成html测试报告但操作较麻烦。表格式的测试数据语法和关键词驱动测试使得易用性较高。

  5、框架对比

  TestNG是基于Java的测试框架,unittest、pytest、RobotFramework是基于Python的测试框架。其实测试框架的选择,更主要还是根据系统的特性,选择适合的框架。

  对于unittest、pytest、RobotFramework这三个测试框架,都可支持跨平台,语言单一支持Python,差别并不大,主要如下表所示,而实际选用,可结合系统、框架的优势对号入座,以带来更高的自动化测试开发效率。

1-9.png

  四、如何选择

  这篇文章对比了一些具有相似性的工具、框架,主要是为了大家在做自动化测试时,选择具体的工具、框架做准备。但这里并不存在绝对的优劣,主要还是取决于项目的测试需求及系统的特点。

  业内常传说,不会编程,有钱,就用UFT,会编程,没钱,就用Selenium,其实总结的很通俗了。UFT很强大,通过录制就能实现自动化测试,不需要会编程,你只需要有输入、输出值,就可以做自动化测试,听起来当然很好,但它的维护是需要费用的。而Selenium和Appium其实底层是一样的,API的使用也基本相同,只是针对Web和移动端APP做了不同程度的二次封装,但是Selenium和Appium的使用当然需要一定的代码基础,这样可以针对庞大的复杂系统,做PageObject页面封装设计的自动化测试,可以降低维护成本,但可以做到一定程度上的“一劳永逸“。

  而对于框架,其实原理是相同的,都是将测试用例封装成测试套件,通过设定用例的执行方式,来执行测试套件,实现一定程度的“封装“。除此之外,框架还有一些其他复苏功能,例如很实用的自动生成测试报告,不同的框架测试报告的风格也不同,这就根据自己的需求和喜好来选择就可以了。

  自动化测试的目的是为了一定程度上的解放人工测试,提高测试的效率,避免人工反复进行同样的操作测试。虽然如此,人工测试仍然是不可替代的重要的软件测试手段之一,不要盲目地进行自动化测试。因此,在选择自动化工具及框架时,一定要根据被测系统的特点,充分利用工具及框架的优势,这样才能真正达到节省人力、提高效率的目的。


作者:cai.ruiying[ZSK]    

来源:http://www.51testing.com/html/93/n-7792193.html

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 摘要当前大型top企业都有非常成熟的开放平台业务,比如微信开放平台、新浪微博开放平台、支付宝开放平台等。开放平台的发展为第三方个人或企业提供了巨大的机遇。开发者想要接入各大开放平台,必须要遵从开放平台的安全机制,实现业务逻辑的前提,首先就是要实现签名验签、加密解密以及授权认证机制。本文介绍基于python的开放平台签名、认证测试体系,可以用于第三方应用的沙盒测试,同时可以应用于服务提供方相关系统的全面测试。一、引言开放平台是指大型企业将自身的数据能力、计算能力、用户体系、产品能力等资源以业务+场景+解决方案+技术的优势包装出来,通过openAPI、openSDK、openH5等形式开放给第三方...
            0 0 1801
            分享
          •   在日常的测试工作中,其中最重要的一步就是编写测试用例,那么我们如果编写一份高质量的测试用例的?选对编写测试用例的方法很重要。针对不同功能我们要选择合适的方法。比如说一个注册页面,我们该怎样设计测试用例呢?  针对这种有较多输入框且长度有限制的功能模块,我们一般采用等价类划分和边界值分析法来设计测试用例。  等价类划分  等价类划分是将所有的输入条件分为若干等价类,然后从所有等价类中抽取其中有代表意义的数据进行测试的方法。  ·有效等价类:对程序来说合理的、有意义的输入  ·无效等价类:对程序来说无效的输入  这里我们假设:  ·用户名的限制是8-16位数字和大小写字母的组合  ·手机号的限...
            11 11 2568
            分享
          •   本次上线的项目属于OA系统中的一个子模块。OA系统,百度百科上解释,Office Automation(简称OA),即办公自动化,是将计算机、通信等现代化技术运用到传统办公方式,进而形成的一种新型办公方式。办公自动化利用现代化设备和信息化技术,代替办公人员传统的部分手动或重复性业务活动,优质而高效地处理办公事务和业务信息,实现对信息资源的高效利用,进而达到提高生产率、辅助决策的目的,最大限度地提高工作效率和质量、改善工作环境。笔者所在公司的OA项目提供已授权的同事浏览各家公司首页、申请单据、审批单据等功能。本次谈及的项目模块即包含给公司首页浏览、公司专题配置以及模块编码功能。  产品提出的...
            0 0 476
            分享
          •   对于产品经理来说,产品需求文档(PRD文档)是工作的核心产出。一份严谨、优秀的产品需求文档能够给项目的其他人员,包括设计师,开发工程师,测试工程师,运营人员等带来很大的帮助。但对于产品经理来说,撰写一份完整的产品需求文档往往需要花费相当多的时间和精力。  今天我们一起来看看,如何提升产品需求文档的撰写效率。  为什么要写产品需求文档?  对于稍微大一点的产品开发团队来说,产品经理未必能向所有团队成员准确传达产品开发需求,这时就需要一份完整的产品需求文档供项目参与人员阅读。  首先,产品经理可以根据项目的阶段运营目标提出合理需求,通过PRD文档阐述产品整体设计需求背景,设计思路,功能范围,交...
            0 0 762
            分享
          •   51Testing软件测试网正在收集测试行业问卷结果,如果你也想为测试行业的前景助力,就点击下方的链接提交答案吧,还有精美礼品等你拿(测试课程五选二)。链接:http://vote.51testing.com/  前言  作为一个测试新人,刚开始接触测试,对于怎么写测试用例很头疼,无法接触需求,只能根据站在用户的角度去做测试,但是这样情况会导致不能全方位的测试APP,这种情况就需要一份测试用例了。  在介绍如何编写测试用例之前,先看一个软件系统登录功能的测试(如下截图所示):  要做这个登录页面的测试用例,你会从哪些方面思考进行测试呢?  看似简单的页面功能能够设计多少条测试用例完成较全面...
            2 2 2114
            分享
      • 51testing软件测试圈微信