很长时间,一直都在做自动化相关的事情,包括测试框架,测试平台,以及持续集成等等。但是这些的基础还是依靠的自动化测试代码,下面的内容是自动化测试的相关知识点,相信大家可以从这些点中可以找到很多的共鸣,然后扩展,方便大家更好的深入学习。

  01 一些测试理论

  1. 测试分类的三维模型:

  以时间趋势为基线的分类,如系统测试,集成测试…

  以测试方法为基线的分类,这种分类是面向质量体系的,如功能测试、性能测试、安全测试…

  以测试目标为基线的分类,如白盒测试、黑盒测试、灰盒测试。

  2. 白盒测试、黑盒测试以及灰盒测试的区别:

  黑盒测试是验证应用程序行为准确性的测试;

  白盒测试是验证应用程序结构准确性的测试;

  灰盒测试介于黑盒测试和白盒测试之间;

  黑盒测试和白盒测试,与是否需要写代码无关。

  3. 自动化测试的特点、目标

  特点:使用机器和程序的能力

  目标:减少资源消耗;扩大测试范围;充分发挥人和机器的能力;

  4. 测试策略安排:

  风险优先;

  成本优先;

  5. 代码评审的内容:

  检查风格

  检查设计

  发现代码缺陷

  6. 关于测试覆盖率:

  要被测试的代码都需要被覆盖到

  02 UI自动化测试

  1. UI自动化的应用:

  一般用于测试回归;

  覆盖越多的业务越好;

  衡量成本和收益:人工回归与自动化方式的投入和效率对比

  2. UI自动化的缺陷:

  非视觉,即无法模拟人眼睛能够看到的内容,如长度超出、不适当的留白或换行。

  3. UI自动化的方案:

  3.1 基于Javascript的方案

  优点:跨浏览器; 缺点:无法操作浏览器本身;

  selenium core : 脚本必须与被测应用放在同一域名下;

  selenium RC : 请求发送到seleniumServer,seleniumServer转换请求客户端的域名为被测应用的域名,被测应用响应后,seleniumServer再转换被测应用的域名为请求客户端的域名;

  3.2 基于浏览器的方案

  优点:对浏览器操作性好; 缺点: 浏览器兼容性差;

  方案实现工具: webDriver 、watir 、pamIe

  4. 工具简介:

  webDriver : 支持非标准组件; 容易捕获模式窗口; 可以设置代理服务器;

  selenium 2.0 : 集成了Javascript和webDriver两种方式;

  5. UI自动化测试的级别:

  5.1 Dom级别

  操作方式:parse页面获取dom属性;

  访问dom对象的方法:根据xpath访问;根据id属性访问;根据name属性访问;

  IE6对xpath的访问方式支持性极差;

  dom级别的缺点:不能校验用户体验细节,如重叠、超出范围、不合适的留白等;

  5.2 基于图像的级别

  限制条件:使用模板针对页面布局的校验;人工判断图像差异性;页面上需要保持固定的数据;针对页面上的固定区域;提供灵活的图片解析算法;

  基于mask的图片比较:将不需要比较的图片区域用黑色覆盖;

  判断图片是否存在于页面的某个位置;

  排除字体和显示差异:允许图片缩放、用ocr识别文本、设计和实现字体识别;

  镂空文字保留图像以便比较布局;提取页面文字以便校验数据;

  6. Diff技术:

  6.1 Diff技术的应用

  发现变化;

  基于人工判断该变化是否是预期的变化;

  根据diff结果,决定变化的技术和方法;

  6.2 Diff的工作原理

  通过同时发送相同请求到不同版本的同一个应用,对比发现两者之间的变化,确定测试范围;

  对比时屏蔽一些已知的、明显的不同;

  对比时屏蔽噪音(即无用的信息);

  7. 支持多浏览器的手工测试:

  在不同的浏览器中展示相同的页面,发现不同;

  在其它浏览器上重现操作;

  基于实时交互的方案:多台机器各安装不同的浏览器,并安装seleniumServer;另外一台seleniumClient分别发送请求到各server;使用VNC等多屏幕方式观察server运行结果;

  8. UI自动化测试的执行测略:

  不依赖IDE;

  和持续集成、构建脚本一起工作;

  运行失败时截图,直接查看失败细节;

  使用selenium集群,通过统一接口访问多台server.

  专门的图片比较服务器;

  避免内外有别:测试结果尽量和用户结果一致;测试可以从线上发起,在线上建立proxy server,根据规则决定访问线上还是测试环境;

  9. 经验分享:

  识别应用特点:用了哪些技术,哪些是易变的,哪些是稳定的,哪些可以使用自动化方法;

  在设计时考虑测试,设计评审时的可测性考虑,良好的应用隔离,清晰的分层结构,易于控制,具备标识;

  图片比较方式经验谈,图像比较测试、基于图像diff发现改变,在发生异常时截屏,以图像记录结果。

  03 单元测试

  1.自动化测试的哲学:

  事先测试(TDD)与事后测试

  针对状态的测试和针对行为的测试;

  状态测试: 校验应用起始和结束的正确性;

  行为测试: 校验所依赖的对象行为是否正确;

  2.单元测试基础知识:

  2.1 测试对象

  类的公有方法;

  2.2 单元测试中的白盒测试和黑盒测试

  参看01 一些测试理论

  2.3 桩模块和驱动模块

  桩模块: 为了让目标类正确运行而设计的支持类;

  驱动模块: 驱动目标类运行起来的类,比如junit。