互联网金融Web自动化--石器时代

我想,自动化测试现在在软件测试中的重要性已经不需要再多说了。但是大家讨论的重点往往是一些高大上的自动化技术,很少涉及到如何从项目、资源等方面综合来分析是否需要自动化、如何进行自动化。但是对于大部分公司,特别是初创公司,如何合理地使用自动化可能比一些牛逼的自动化技术更重要。
公司产品的自动化从1.0上线初期开始搭建,这3年多来,随着产品的不断变化,自动化的框架也在不断的进化。总的来说,我们公司自动化体系可以分为3个阶段:
  1. 石器时代:在公司创业初期,测试资源及其匮乏(只有1个正式员工,加上2个外包),人员能力有限。该阶段的自动化主要是考虑到简单、实用。
  2. 青铜时代:公司测试团队逐步成型,基于自动化的效率、可维护性及业务需求,进行一次自动化的重构。
  3. 黑铁时代:随着产品复杂度提升,测试用例执行时间的快速增长,以及团队能力提升的目的,在原有的基础上,对自动化执行流程进行创造性的改造,提高了执行的效率和效果。
下面我就重点和给位一起回顾下自动化的石器时代的相关细节。


首先,自动化应该也要当做一个项目也运作,所以在项目启动时,一定要搞清楚项目的目的和相关背景:
  • 创业初期:人少,能力相对较弱,目的是先保证业务正常,不追求技术的复杂度
  • 快速开发:要能够快速构建出自动化框架,尽快的把主要业务流程的用例自动化,保证核心业务
  • 全民测试:降低自动化用例的编写难度,考虑利用一切可利用的资源(开发、测试)
搞清楚了自动化的目的后,下面该考虑的就是哪些东西要做自动化。不知道大家怎么理解所谓的自动化?是不是把手动执行的用例脚本化,能够自动执行、获取期望结果并进行比对就算自动化?答案是不。自动化是一项系统化的工作,手工用例脚本化仅仅是整个自动化测试中很少的一部分,除此之外,还包括测试环境的自动部署、测试结果的自动评估、失败用例的自动分析、测试报告的自动生成等等。我们在第一版自动化构建时,主要针对以下工作做了评估。

到目前为止,我们已经确定了自动化要做哪些工作,接下来我们要确定的就是该采用何种方式来做自动化。所谓万变不离其宗,从自动化实现的方式来看,基本都可以归属到以下3类:
  1. 单元测试:测试粒度最小,覆盖逻辑更全,但是通常主要依赖开发来做,而且此时项目已完成,不适合再补充单元测试
  2. 接口测试:执行速度快,执行稳定性高,能够覆盖后台服务功能,但是前台页面功能无法覆盖
  3. Web页面自动化测试:能够覆盖前端页面及后台服务,并且最大程度的模拟用户的行为,做到端到端的全流程覆盖
从上面每种自动化方式的优缺点,不难看出,在创业初期我们会选择Web页面自动化测试的方式。

大家其实可以看到,到目前为止,大部分考虑的因素和决定的标准都不是技术方面的考量,所以说自动化绝不是简单的技术活。好了,程序猿通常还是对技术更感兴趣,接下来,我们就来谈谈技术层面的问题。
首先,面临的问题是技术、工具选型。这个阶段其实也没有那么纠结,业界主流的Web页面自动化工具也就那么几个,Selenium,QTP等等。比较一下这些工具支持的语言、浏览器支持种类、活跃度、资源是否丰富,我们最终选择了Selenium。


下面我们简单看一下如何使用Selenium。
  1. 最常见的,使用Selenium打开一个网页
    from selenium import webdriver
    from selenium.commmon.exceptions import NoSuchElementException
    from selenium.webdriver.support.ui import Select
    from selenium import selenium
    from selenium.webdriver.commmon.alert import Alert
    
    driver = webdriver.Ie()
    driver.implicitly_wait(20)
    driver.get("http://www.google.com.hk")

  2. 网页简单操作
    • 关闭窗口 driver.close()
    • 关闭IEDriver driver.quit()
    • 获取页面元素                                                                                                                                 

    • 填写文本框 send_keys()
    • 点击按钮 click()
    • 清空输入框 clear()
    • 选择下拉框 Select(下拉框元素).select_by_value(value)
    • 验证页面元素 verifyTextPresent,verifyElementPresent,verifyText
  3. Iframe的处理
    • 页面如果使用多个iframe来组织,无法在一个iframe中查找另外一个iframe中的元素
    • 切换iframe:                                                                                                             
    • 建议开发尽量不要用iframe组织页面
  4. 弹窗的处理
    • driver.current_window_handle()
    • driver.window_handles()
    • driver.switch_to_windows(window_name)
    • Alert,confirm,prompt的处理
  5. 控制等待时间
    • 不要用sleep
    •  
  6. from selenium.webdriver.support.ui import WebDriverWaitWebDriverWait(driver,10).untile(lambda x:x.find_element_by_id("someId"))

做过UI页面自动化的同学肯定知道,UI的页面改动是自动化后期维护最大的问题。为了减少后期维护的代价,我们通过以下方式来解决:
  1. Page Object模式:
    • 将每一个页面抽象封装出一个Page类
    • 将每个页面上的主要元素对象的操作封装成一个方法
  2. 业务流程封装:在Page Object基础上,对那些涉及多个页面操作的常用业务流程进行再次封装。比如发布借款,标的投资,订立合同等等。

为了更快速的搭建起自动化测试,我们选择使用现成的开源自动化框架,而不是自己从头开发一套。经过对常用自动化测试框架的考量,最终选择使用Robot framework:
  1. 轻量级的自动化测试平台
  2. 支持多种语言,多种格式
  3. 第三方开源测试库丰富
  4. 测试关键字和自动化用例可以并行开发
最终,公司第一代自动化整体架构如下



上面谈到的是自动化初期的技术选型和范围选择,下面我们来看看整个自动化投入和后期效果:
  1. 自动化测试开发阶段
    • 初期自动化范围评估,技术选型,自动化从0开始的底层代码编写,以及最终完成的一个用户注册登录的Demo用例,一共花了差不多2人周的时间。
    • 然后针对产品主要的业务流程,完成Web UI相关关键字的编写+每个场景一个示例,花了1人周
    • 对团队进行如何编写自动化用例培训,2个测试全职编写自动化用例,编写并单个调试完成了部分P1,P2优先级的主流程用例,花了差不多1周的时间
  2. 自动化优化阶段,差不多花了3个人1周的时间,完成以下工作
    • P3用例自动化
    • 用例集成联调+稳定性(90%以上)
    • 集成CI环境
在后期的自动化使用和维护中,主要的投入包括
  1. 自动化测试报告分析
    • 错误用例的分析和调试,差不多平均一个用例5分钟
  2. 新功能+旧功能改造
    • 就用例的改造,基本上平均10分钟一个用例
    • 新增关键字+新增加测试用例自动化,每个用例需要30分钟。具体开销随着关键字复杂度和用例场景的复杂度不同有所区别

我们做自动化的目的绝不是为了自动化而自动化,也不是为了提高测试的编码能力而自动化。就上产品上线后要统计相关业务指标,我们自动化做好之后也要统计相关的ROI,看看到底这个自动化做的值不值。下面我们来粗略的分析下自动化的ROI:
  1. 已有用例:以P1用例50个,全部用例180个为例来统计。
    • 初期总投入8人周
    • 每个版本都执行的用例,平均每周投入50*4*90%*5=100分钟
    • 所有用例每周投入180*90*5=90分钟
    • 每周节约时间10人天(1.5人天*4+4人天)
    • 收回成本周期
      • 按照执行相同次数的手工测试,大约5周后收回成本(8*5+0.5*N<10N,N>4)
      • 按照纯手工每周花费2人天测试回归用例,自动化投入人力0.5人天,每周节省1.5天,那么大概25周(半年)后收回成本
  2. 新增用例
    • 每个新用例投入30分钟,按照每个用例平均执行5分钟,大概执行7轮后(2周)收回成本(5*90%*N=30,N≈7)
    • 按照每周手动执行一次手动回归计算,7周(2个月)后收回成本
从上述数据分析,公司第一代的自动化应该算是比较好的达到了项目开始预期的目标。
最后,说些在做自动化过程中,对于整个团队的一些想法:
  1. 测试在项目初期评审系统设计文档的时候,就要考虑到相关功能自动化实现的问题,要和开发协商好相关的接口,是否需要开发帮助开发测试桩等等。这些虽然是老生常谈,但是在实际项目中,我觉得要做好这些并不是那么容易,而且可能比自动化的技术更重要
  2. 开发,特别是前端开发,要有统一的页面编码规范,后台日志也要规范。这可以极大的提高页面自动化开发、调试的效率
石器时代的自动化其实一共使用了大概1年的时间,应该算那个特殊时期的产物。虽然看在看来,技术上应该是很low,没有什么特别的地方,但是我觉得对于早期创业团队,以及团队自动化开发能力相对低下的时候,不失为一种快速构建自动化的方式。而且可以在构建过程中祈祷锻炼团队的作用,为今后开发高大上的自动化打下基础。

--未完待续,石器时代就介绍到这里,也算抛砖引玉,敬请大家期待后续XX时代的精彩介绍。


有任何问题,欢迎大家和我联系。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值