• 自动化测试框架不难,难的是细节(总结片)


    一、自动化测试

    1、自动化测试脚本大致可划分为:

      |、线性脚本:通过录制直接产生的线性可执行的脚本

      |、结构化脚本:具有顺序、循环、分支等结构的脚本

      |、可共享脚本:可以被多个用例使用,被其他脚本调用的脚本(即模块化脚本)

      |、数据驱动脚本:测试数据跟业务流程控制分离的脚本,通过读入数据文件驱动流程进行的脚本

      |、关键词驱动脚本:脚本、数据、业务分离、数据和关键词在不同的数据表中,通过关键词来驱动测试业务逻辑,关键词的特点是,它更像是描述一个测试用例在做什么,而不是如何做

      |、混合型脚本:以上任意两种及以上

      |、敏捷自动化测试脚本/框架:这一块等我有了成功经验再补充=。=

    2、自动化测试执行:

      (1)无人值守的测试:环境搭建,部署与配置;自动化测试用例与测试脚本相互绑定;自动化测试用例执行顺序排列与组合

      (2)异常处理与场景恢复

     

    3、自动化测试的难点(界面的变动性和脚本的维护性):

    ①公共自动化用例的维护

    ②公共UI方法维护

    ③稳定性和效率提升:

      |、异常处理封装

      |、分层测试

      |、建立共享对象库/测试库

      |、第三方插件引入

      |、GUI业务流程解耦拆分、尽量避免太长的端到端UI测试(例如web到移动端的业务流测试)

      |、引入mock/接口测试代替部分环节的测试,从而衔接到要执行自动化测试,提高自动化测试稳定和效率

      |、web处理一些不可识别第三方控件。尽可能采用js来处理,更显示稳定和高效

      |、uiautomator监听处理android系统不确定的系统级别弹窗

    ④自动化测试实施项目选取策略:

      |、重复性高且有必要的测试流程

      |、项目周期长,系统版本不断,并且需求不会频繁变更项目

    ⑤自动化测试框架包括:

      |、测试用例分布式执行:seleniumGrid

      |、脚本模块化:分层

      |、数据驱动:mysql存储数据,testng的数据提供者

      |、日志分析:本地log4用例执行信息

      |、错误截图:监听截图

      |、报表回收:测试数据存储mysql数据库等

      |、共享对象库/公共函数库:UI元素信息管理/UI元素操作方法维护

      |、环境配置:chromedriver/adb/IEdrver/Firefoxdriver

      |、用例统一设计模式:基类(测试用例beforeclass/afterclass),多用例集中于一个需求/模块里

      |、异常处理:testngListenter监听,UIwater处理系统级弹窗

      |、接口和mock结合介入

      |、第三方工具引入:adb/shell/redis

      |、用例执行方式(分布式测试seleniumGrid、device多并发测试)

    自动化广义总结:
    1、自动化测试工作不复杂但也不简单,其需要自动化测试人员既懂业务也懂技术。
    2、对自动化测试看法过低以及对自动化测试要求太高,都是因为其盲目性,一个懂产品技术和自动化测试技术的工程师,是很快能定位其自动化测试需求和开展的方法。
    3、每个公司有每个公司自己的特点,调研和需求分析很重要。
    4、自动化测试框架不难,难的是细节。
    5、自动化平台很重要,没有一个平台,不方便推广,其自动化测试只能流于形式。

     补充:

    自动化测试框架找对象:

    通常每种框架都应该支持动态跟静态两种找对象的方式,静态找就涉及到对象库,包括对象库的读、写、合并、维护等一系列问题,这些都可以交给框架做;

    关于动态查找,我举个RFT的例子,你们意会一下:

    Two types of find API in Rational Functional Tester:

    • find(Subitem Properties).
    • find(Subitem Properties, Boolean mappableOnly).

           Subitems can be either atChild() or atDescendant() or atList().

    • atChild: One or more properties that must be matched against the direct child of the starting TestObject.
    • atDescendant: One or more properties that can be matched against any child of the starting TestObject
    • atList: A sequential list of properties to match against. Valid subitems for atList are atChild, atDescendant, and atProperty.
    • mappableOnly: Arguments that limit the search. If it is set to true, the search for children will be limited to those test objects that are mappable, otherwise non-mappable test objects are also searched.

    先测试工具会提供动态查找的接口或者方法,RFT里面提供的是find方法,调用这些接口或者方法即可实现动态查找。

    动态查找的好处是可以采用“相对路径”来定位对象,而相对的,对象库则采用的是“绝对路径”。如果一旦对象的一些属性改变,静态查找的方式可能会找不到对象,当然了,现在的自动化测试越来越智能,已经可以做到选取匹配度最高的对象返回。动态查找还有个好处是它找到的对象是“代码”,你可以进一步在框架里去对这些对象进行处理,而对象库里的每一个对象都是一个独立的对象,你可以使用它们,但是很难改变它们。

    通常现在的自动化测试框架都是采用动静结合的方式,即两种找对象的方式都会兼顾,因为一般来说,静态查找的方式速度更快,效率更高。但是静态查找带来的问题也是显著的,主要集中在对象的维护管理以及合并上,如何共享对象,避免重复加对象等。此时,规范对象命名就显得很重要了。以往我做的自动化测试项目中,这些都是坑。

  • 相关阅读:
    20172319 实验五 《网络编程与安全》实验报告
    20172319 《程序设计与数据结构》第11周学习总结
    20172319 实验四 《Android程序设计》实验报告
    20172312 2018-2019-1 《程序设计与数据结构》第八周学习总结
    20172312 2018-2019-1 《程序设计与数据结构》第七周学习总结
    20172312 2018-2019-1 《程序设计与数据结构》第六周学习总结
    20172312 2018-2019-1 《程序设计与数据结构》第五学习总结
    20172312 2018-2019-1 《程序设计与数据结构》第四周学习总结
    20172312 2018-2019-1 《程序设计与数据结构》实验一报告
    20172312 2018-2019-1 《程序设计与数据结构》第3周学习总结
  • 原文地址:https://www.cnblogs.com/dayiran1222/p/8732511.html
Copyright © 2020-2023  润新知