也谈自动化测试开发

简介:

题记:今晚一个人跑到杭州窝在宾馆无所事事,也睡不着,就把这几天来关于自动化测试的探讨记录下来,也给自己一个机会,逼着自己好好反思这一年多来关于自动化测试的点滴。其实,我也只是接触过两套自动化框架,一是项目组开发、设计出来的,在这个从无到有的过程中,我学到了很多。其二便是学习的Robot Framework,它告诉我一个优秀的自动化框架应该具备些什么。

  都讲自动化测试开发,当然要把开发自动化测试框架也当做一个项目来做。这时候,就需要考虑应该选择何种类型的自动化测试框架:数据驱动、关键字驱动、还是Junit,TestNG ? 抑或直接利用现有的开源自动化测试框架,如Robot Framework 。无法讲这几种类型的框架,孰优孰劣,关键是认清项目实际,选择最适合的。讲一些题外话,就Java学习者而言,Junit3.x的源码是再好不过的教材了,JUnit框架运用到了大量的设计模式,反射机制。

  在决定了选用何种自动化框架类型后,下面你需要抉择的就是:应该选择何种编程语言呢?编程语言的选择和开发者的技术背景有很大关系,一般都会选择自己熟悉的编程语言,但这也往往是个局限。另一方面,也受到SUT的影响。一般而言,很少见有选择C,C++作为自动化框架开发语言的,虽然这两种语言的执行效率要高,但开发效率要低一些。我们项目的自动化框架是Java语言编写的,关键字也是由Java实现的。关键字的实现选择Java,是由于SUT - 即Domino服务器提供的API是有Java ,C++。所以自然选择了Java。而自动化框架开发语言的选择,其实可以有别的选择,如脚本语言Python ,Perl。脚本语言Python,或Perl,作为超高级开发语言,解释执行的特性,在开发效率上可能会高一点。

  下面就是关键字实现方式的选择了。关键字就相当于手动执行测试用例当中的一个步骤,比如现在的项目,即一个关键字就是修改产品的一个配置选项,也可以是发一封带有特定附件的邮件。就我们的产品而言,Domino提供的操作数据库的方式有三种,即DIIOP、Web Services和本地调用。刚开始选择的是DIIOP,这种方式实现起来比较简单,后来发现通过这种方式实现的自动化脚本,即包含十几个关键字脚本,其执行时间大概要35s – 40s。而Web Services的执行时间就要效率就要高得多,差不多一个自动化脚本的执行时间可以缩短10s, 但其实现需要分为服务器端Web Service的发布,和客户端的调用,通过这种方式实现,测试环境的部署也要复杂些。讲这些,主要是告诉我们,一开始就需要对这些做出评估,选择合适的方案,不然中途改变,影响是很大的。

  自动化框架,说白了就是流程的封装啦。那么一个自动化框架应该包括哪些流程呢?来看看下面这两幅框架图吧。

  第一幅图讲解了一套自动化测试是由自动化框架,自动化脚本,关键字组成的。第二幅图描述了自动化框架的流程:根据配置挑选要执行的测试用例,解析自动化执行脚本,将自动化执行脚本送给自动化执行引擎,生成Log文件,最后生成Report。

  对比Robot Framework框架,这套简单的自动化框架有哪些地方可以提高呢?第一个,基于Test Suit的setup和teardown。一个自动化脚本的组成是这样的:清理、初始化测试环境(如,建立一些测试脚本需要用到的数据库), 执行自动化脚本,生成执行结果,最后清空环境。这些步骤我们的自动化脚本中也实现的,但如果想在执行一批测试用例之前,做一些动作,执行完以后,在清空,我们用得方式就是把这些自动化脚本的名字在要执行的一批测试脚本之前,我们的脚本是按字母排序的,这样确保的。其实应该有更好的方式。第二个,自动化脚本中有关键字Fail了,是否还需要接着执行下面的关键字呢。我们框架式会继续执行,但Robot Framework做到了可配置,它是通过listern来实现的。可以好好学习下。


 自动化框架、关键字的开发周期怎么安排,怎么预估effort ?项目自动化测试框架,自动化脚本开发也分成了两Iteration。 第一个迭代期间,完成自动化框架主要流程,完成主要关键字,构建SMOKE部分的自动化脚本。第二次迭代,进一步完善自动化框架,接着添加关键字,完成Regression部分自动化脚本。刚开始,effort的估计没有把握,因为有些关键字的实现可能比较困难,这时候需要及时sync风险。第二个阶段,effort的估计就有底了。

  如何协同开发?自然是加入版本控制。现在的自动化框架用的版本控制是Git,这个比较火哦!多人协同开发,提交代码,肯定会有conflict。我们的做法是这样的,除了master分支,每个人在自己本地建个开发分支,每次提交代码前,先从Git Server上checkout最新代码到master分支,然后,在本地的开发分支和master分支merge,最后commit代码。

  自动化脚本如何命名?我们的自动化脚本都是从手动测试用例挑选出来的,我们希望做到自动化脚本和手动脚本之间有个关联,但同时又要做到,只要看到这个自动化脚本的Title,就能知道这个自动化脚本的大概的测试意图。我们是这样做的,ModuleName_FilterName+ID, 这个ID便是手动测试用例的Define ID。

  Keyword的粒度怎么把握?关键字相当于手动执行的一个执行步骤,我们是这样做的,首先Review手动执行的测试用例,抽取出通用的步骤,实现关键字。但如果关键字的粒度做得太细,那么关键字的数量会比较庞大,但粗了的话,关键字参数的形式就会比较复杂,对于构造自动化脚本的同事来说,就需要学习。这个粒度需要把握好,同时,对于自动化关键字参数,需要有详尽注释,使用格式范例。

  自动化脚本中的变量如何维护?一般会把自动化脚本中的一些跟执行环境相关的参数以变量的形式抽取出来,存放在配置文件里,这样一来,在部署自动化测试环境的时候,就只需要修改这些跟环境相关的配置文件即可以。但这个配置文件会随着自动化测试用例的增加,而变得臃肿。

  自动化脚本中运行结果如何判断?自动化测试脚本,如同手动执行测试用例一般,也有预期结果,实际结果的比对,如果两则不一致,则认为这个自动化脚本Fail。刚开始我们是这样做的,将预期结果一参数的形式传给一个关键字,这个关键字在后台会比较实际结果,如果不一致fail。刚开始也觉得没问题,后来发现,因为环境因素,一些预期结果是会发生变化的,这时候,我们必须修改自动化脚本。后来的做法是这样的,先dump出一份预期结果,存放在本地,执行自动化自动化脚本的时候,再Dump出一份实际结果,然后比对这二者。这样就避免了频繁改动自动化执行脚本了。

  执行结果的容错性?如何确保执行结果是可靠的,在自动化关键字的实现过程中,会加入一些容错机制。举个简单的例子,发一封带特性附件的邮件,命中了一个策略。这时候,会在log数据库中产生一条记录。在实现自动化关键字的时候,可能会遇到这样的情况,当你去检查log数据库的时候,很有可能那条log记录还没生成好,这时候如果直接判断,自然会fail。我们是怎么提高容错性的呢?很简单的方法,就是加入了一定时间的延时,比如循环检查多少次,每次delay一秒等方法,这就带来了另一问题,在执行时间会延长。

  及时获取RD帮助。在实现DLP功能时,发现程序重新载入配置会比较耗时,如果自动化脚本不能重新载入完成,就发邮件的话,是无法命中你的配置策略的。这时候,需要寻求RD帮助,他们在后台提供了hidden key。当enable这个hidden key后,重新载入完成后,程序会在console上打印出提示信息,这时候,我们的自动化脚本只需要去检查这些提示信息有没有生成,就可以判断是否重载完成,再发邮件。

  在自动化测试开发,维护过程中,成本最大的是什么?觉得一方面是测试数据的维护。另一方是因为产品功能方面的变动引入的自动化脚本需要修改方面的成本。

  自动化测试的应用场景?对于项目而言,最大的价值是什么?就我们项目而言,主要还是把手动测试用例变为自动化测试用例,也就是所谓的黑盒、功能性自动化实施。当初定位的时候,也是想做成自动化回归测试的,缩短回归测试时间,提高回归测试效率,确保代码优化、及新引进的代码不会影响旧有功能。也没指望自动化测试能发现手动测试发现不了的问题。理想的状态时这样的,自动化测试和CI系统集成,当出了一个新的build,自动化框架能够自动安装新build,执行自动化脚本,完了以后将执行结果通过邮件发布出来。

  有没有方法把关键字的实现提前?而不是等到功能稳定后,再开始做自动化。看过Junit中的mock的概念,但具体怎么做,还不清楚,下阶段学习下!

  现在看来,一套自动化测试的开发也涉及到:项目本身需求分析、hight-level 设计、框架开发、自动化脚本实现、各种规则制定、多方面协作等,所以需要把自动化测试开发当做项目来做哦!








====================================分割线================================



最新内容请见作者的GitHub页:http://qaseven.github.io/

目录
相关文章
|
3天前
|
数据采集 算法 测试技术
【硬件测试】基于FPGA的1024QAM基带通信系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文介绍了基于FPGA的1024QAM基带通信系统的硬件测试版本,包含testbench、高斯信道模块和误码率统计模块。系统新增ila在线数据采集和vio在线SNR设置模块,支持不同SNR条件下的性能测试。1024QAM调制将10比特映射到复平面上的1024个星座点之一,实现高效数据传输。硬件测试结果表明,在SNR=32dB和40dB时,系统表现出良好的性能。Verilog核心程序展示了各模块的连接与功能实现。
27 7
|
12天前
|
存储 人工智能 编译器
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
33 10
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
|
20天前
|
人工智能 自然语言处理 测试技术
Potpie.ai:比Copilot更狠!这个AI直接接管项目代码,自动Debug+测试+开发全搞定
Potpie.ai 是一个基于 AI 技术的开源平台,能够为代码库创建定制化的工程代理,自动化代码分析、测试和开发任务。
150 19
Potpie.ai:比Copilot更狠!这个AI直接接管项目代码,自动Debug+测试+开发全搞定
|
23天前
|
JSON 前端开发 测试技术
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
94 10
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
|
1天前
|
数据采集 算法 数据安全/隐私保护
【硬件测试】基于FPGA的4FSK调制解调通信系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文基于之前的文章《基于FPGA的4FSK调制解调系统》,增加了ILA在线数据采集模块和VIO在线SNR设置模块,实现了硬件测试版本。通过VIO设置不同SNR(如10dB和20dB),并展示了ILA采集的数据结果。四频移键控(4FSK)是一种数字调制方法,利用四个不同频率传输二进制数据,具有较高的频带利用率和抗干扰性能。输入的二进制数据分为两组,每组两个比特,对应四个频率f1、f2、f3、f4,分别代表二进制组合00、01、10、11。调制过程中选择相应频率输出,并进行幅度调制以增强抗干扰能力。接收端通过带通滤波器提取信号并还原为原始二进制数据。
21 7
|
21天前
|
JSON 前端开发 API
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
54 5
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
|
5天前
|
数据采集 算法 数据处理
【硬件测试】基于FPGA的256QAM基带通信系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文介绍了基于FPGA的256QAM基带通信系统的硬件测试版本,包含testbench、高斯信道模块和误码率统计模块。系统新增ila在线数据采集和vio在线SNR设置模块,支持不同信噪比(如30dB和40dB)的仿真测试,并提供配套操作视频。256QAM调制方案每个符号携带8比特信息,通过复数值星座图映射实现高效传输。Verilog代码展示了核心模块设计,包括SNR设置、数据处理和ILA测试分析,确保系统在实际硬件环境中的稳定性和性能。
15 2
|
9天前
|
数据采集 算法 数据安全/隐私保护
【硬件测试】基于FPGA的16QAM基带通信系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文介绍了基于FPGA的16QAM基带通信系统硬件测试版本。该系统在仿真基础上增加了ILA在线数据采集和VIO在线SNR设置模块,支持不同信噪比(如15dB、25dB)的测试。16QAM是一种正交幅度调制方式,通过两路4ASK信号叠加实现,每个符号包含4比特信息。系统采用正交调幅法生成16QAM信号,并通过DAC转换为模拟信号。解调时使用正交相干解调,经低通滤波器恢复电平信号。开发板内完成发射与接收,无需定时同步模块。代码可移植至其他开发板,具体步骤见配套文档。
21 2
|
2月前
|
Dart 前端开发 Android开发
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
42 1
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
6天前
|
数据采集 算法 数据安全/隐私保护
【硬件测试】基于FPGA的64QAM基带通信系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文介绍了基于FPGA的64QAM基带通信系统的硬件测试版本,包含testbench、高斯信道模块和误码率统计模块。系统新增ila在线数据采集模块和vio在线SNR设置模块,支持不同SNR条件下的仿真与测试。通过设置SNR为25dB和30dB进行测试,验证了系统的可行性和性能。此外,本文详细阐述了64QAM调制解调的工作原理,包括信号生成、调制、解调及误码率测试等环节,并提供了Verilog核心程序代码。
16 0

热门文章

最新文章

  • 1
    小鱼深度评测 | 通义灵码2.0,不仅可跨语言编码,自动生成单元测试,更炸裂的是集成DeepSeek模型且免费使用,太炸裂了。
  • 2
    3天功能开发→3小时:通义灵码2.0+DEEPSEEK实测报告,单元测试生成准确率92%的秘密
  • 3
    Potpie.ai:比Copilot更狠!这个AI直接接管项目代码,自动Debug+测试+开发全搞定
  • 4
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
  • 5
    基于FPGA的图像双线性插值算法verilog实现,包括tb测试文件和MATLAB辅助验证
  • 6
    大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
  • 7
    「ximagine」业余爱好者的非专业显示器测试流程规范,同时也是本账号输出内容的数据来源!如何测试显示器?荒岛整理总结出多种测试方法和注意事项,以及粗浅的原理解析!
  • 8
    用户说 | 通义灵码2.0,跨语言编码+自动生成单元测试+集成DeepSeek模型且免费使用
  • 9
    阿里云零门槛、轻松部署您的专属 DeepSeek模型体验测试
  • 10
    以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡