互联网金融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时代的精彩介绍。


有任何问题,欢迎大家和我联系。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
水资源是人类社会的宝贵财富,在生活、工农业生产中是不可缺少的。随着世界人口的增长及工农业生产的发展,需水量也在日益增长,水已经变得比以往任何时候都要珍贵。但是,由于人类的生产和生活,导致水体的污染,水质恶化,使有限的水资源更加紧张。长期以来,油类物质(石油类物质和动植物油)一直是水和土壤中的重要污染源。它不仅对人的身体健康带来极大危害,而且使水质恶化,严重破坏水体生态平衡。因此各国都加强了油类物质对水体和土壤的污染的治理。对于水中油含量的检测,我国处于落后阶段,与国际先进水平存在差距,所以难以满足当今技术水平的要求。为了取得具有代表性的正确数据,使分析数据具有与现代测试技术水平相应的准确性和先进性,不断提高分析成果的可比性和应用效果,检测的方法和仪器是非常重要的。只有保证了这两方面才能保证快速和准确地测量出水中油类污染物含量,以达到保护和治理水污染的目的。开展水中油污染检测方法、技术和检测设备的研究,是提高水污染检测的一条重要措施。通过本课题的研究,探索出一套适合我国国情的水质污染现场检测技术和检测设备,具有广泛的应用前景和科学研究价值。 本课题针对我国水体的油污染,探索一套检测油污染的可行方案和方法,利用非分散红外光度法技术,开发研制具有自主知识产权的适合国情的适于野外便携式的测油仪。利用此仪器,可以检测出被测水样中亚甲基、甲基物质和动植物油脂的污染物含量,为我国众多的环境检测站点监测水体的油污染状况提供依据。
### 内容概要 《计算机试卷1》是一份综合性的计算机基础和应用测试卷,涵盖了计算机硬件、软件、操作系统、网络、多媒体技术等多个领域的知识点。试卷包括单选题和操作应用两大类,单选题部分测试学生对计算机基础知识的掌握,操作应用部分则评估学生对计算机应用软件的实际操作能力。 ### 适用人群 本试卷适用于: - 计算机专业或信息技术相关专业的学生,用于课程学习或考试复习。 - 准备计算机等级考试或职业资格认证的人士,作为实战演练材料。 - 对计算机操作有兴趣的自学者,用于提升个人计算机应用技能。 - 计算机基础教育工作者,作为教学资源或出题参考。 ### 使用场景及目标 1. **学习评估**:作为学校或教育机构对学生计算机基础知识和应用技能的评估工具。 2. **自学测试**:供个人自学者检验自己对计算机知识的掌握程度和操作熟练度。 3. **职业发展**:帮助职场人士通过实际操作练习,提升计算机应用能力,增强工作竞争力。 4. **教学资源**:教师可以用于课堂教学,作为教学内容的补充或学生的课后练习。 5. **竞赛准备**:适合准备计算机相关竞赛的学生,作为强化训练和技能检测的材料。 试卷的目标是通过系统性的题目设计,帮助学生全面复习和巩固计算机基础知识,同时通过实际操作题目,提高学生解决实际问题的能力。通过本试卷的学习与练习,学生将能够更加深入地理解计算机的工作原理,掌握常用软件的使用方法,为未来的学术或职业生涯打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值