zoukankan      html  css  js  c++  java
  • 常见自动化测试工具及框架的选用

    作者:cai.ruiying[ZSK]

    一、自动化测试简介

    1、什么是自动化测试

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

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

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

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

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

    二、工具篇

    1、UFT(QTP)

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

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

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

    2、Selenium

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

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

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

            Selenium Grid是用于实现分布式测试。

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

    3、Appium

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

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

    4、工具对比

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

    三、框架篇

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

    1、TestNG

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

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

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

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

            @Test表示一个测试用例;

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

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

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

    2、unittest

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

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

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

    3、pytest

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

    4、Robot Framework

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

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

    5、框架对比

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

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

    四、如何选择

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

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

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

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

  • 相关阅读:
    html 上传图片前预览
    php获取当月天数及当月第一天及最后一天、上月第一天及最后一天实现方法
    php 计算 pdf文件页数
    php 获取半年内每个月的订单数量, 总价, 月份
    php 获取两个数组之间不同的值
    小程序支付功能
    关于nginx的Job for nginx.service failed because the control process exited with error code.错误
    linux 安装 Apollo
    MongoDB待续。。。
    ABP vNext...待续
  • 原文地址:https://www.cnblogs.com/ustcinfo-qc/p/12124174.html
Copyright © 2011-2022 走看看