百度技术沙龙第4期回顾:Web测试自动化(含资料下载)

在7月24日InfoQ和百度联合举办的第4期百度技术沙龙活动上,来自百度的工程师孙景卫和ThoughtWorks的工程师张晓庆分别和与会者分享了测试相关的话题,包括百度研发团队在Web测试自动化方面的尝试和实践,以及测试驱动开发实战。本次活动还增设了促进交流的OpenSpace环节,让“每一个人都是讲师”!

在孙景卫的演讲中,他从Web测试自动化的目标谈起,认为让测试自动化并不是为了赢得老板的赞赏,或者认为这是一个很潮的技术,不用就会落后,而是为了网站的质量。随后他介绍了测试自动化的原理,包括感性的时间和空间,记录鼠标键盘的动作;利用如Http协议和Web服务协议进行测试;或者直接操纵页面控件,如利用JavaScript操纵Dom等。在分享百度研发团队在测试自动化方面的一些实践时,孙景卫重点介绍了常用的测试工具Selenium,以及做测试时需要重点考虑的一些地方:

  • 要尽量避免UI测试:其原因是API和功能层级来说更加稳定,而且其自动化和维护的成本都比较低。在Google内部,测试就有一个721原则,即70%的测试工作集中在底层接口测试和单元测试,20%的测试工作为集成测试,其他10%的测试即为界面测试;
  • 在测试Case时,不要试图自动化所有的Case,另外可以考虑使用Ipython等工具来半自动化自己的测试;
  • 在处理业务变更时,利用ID/Name定位元素设定UI Map,向开发团队展示自动化成果和开发约定规则。

最后,孙景卫还介绍了如何设计一个好的模式或者框架来让测试自动化更加便捷,包括要对业务进行分层,关注数据存储和数据驱动,重视DRY/WET原则,以及要能够对结果进行验证等。在提问环节,有听众问如何设计Case,以及当某个Case位置变更的时候,应该如何处理,孙景卫分享了百度在设计Case时常用的原则:

一般情况下,我们写Case的时候倾向于Case之间是没有关联的,但是这种情况很难做到,这是我们努力的一个方向。我们希望一个Case在执行的时候,它自己能够将初始化和结尾的工作先做好,A Case和B Case不应该有关系,B Case的成功与失败不应该依赖于A Case的成功与失败,一个好的Case应该这样设计。但是有时候A Case做完,我们需要先添加一个用户,然后再删除这个用户,这种情况下,如果没添加就去删除,则是失败的,两者之间存在一种依赖关系。在这种设计的情况下,有一个解决的思路是支持Case间的依赖,你可以定义一个标签去说明某个Case依赖于其他的Case,这样就先执行被依赖的Case,然后再执行这个Case,确保了执行的顺序。

也有与会者提到如何使用Selenium来对不同的浏览器进行兼容性测试,以及百度的自动化测试率能达到多少,孙景卫的观点是:

Selenium本身设计上是比较适合做兼容性测试的,但实际上效果并不是那么好,可能会有各种各样的问题,比如对JavaScript的支持不同,可能会导致在Firefox上运行是OK的,在IE上运行可能就会失败。兼容性测试方面并没有一个比较好的方法,还是要用Selenium来做,虽然它对非Firefox浏览器有时候支持的不好,但基本还是可以做的。如果你能提取几个主流的浏览器,比如Firefox和IE,其他的浏览器暂时不关注的话,就可以针对性地设计一些Case。

至于百度的自动化测试率,各个开发小组的数据是不一样的,但估计不是很高。在2008年我们大批做的时候,这个数据达到过60%~70%,但是现在这个数据已经下来了,估计是30%这个级别。我们对这个数据本身已经没有太多的强制要求,有的组可能适合做自动化测试,数据可能高一些,有的组不适合,可能就低一些。

在ThoughtWorks工程师,也是InfoQ中文站敏捷社区编辑张晓庆的“测试驱动开发(TDD)实战”演讲中,他主要结合代码演示介绍了TDD的一些原则,包括:

  • 自上而下的驱动
  • Web测试要先列出应用场景
  • 要先写测试,哪怕是Bug
  • 测试即文档
  • 与QA讨论测试场景
  • TDD与语言无关
  • TDD不是玩具

在会后部分参会者所写的博客中,详细记录了两位分享嘉宾演讲的一些要点,比如YanHua的“测试专题活动和奇遇咖啡的rails活动小记”以及sunway00的“参加Web测试自动化与TDD应用的沙龙心得笔记:

  • WEB自动化测试只是给基本的业务流程提供一个安全网,主要目的不是发现bug的,覆盖率不高,有些人工更方便的使用人工测试好了。从提问的环节得到的信息,其实百度各个组对于WEB自动化测试的覆盖率没有硬性的要求,好一点的可能达到20-30%的样子;
  • 尽管TDD强调在编写任何功能代码前都要先写测试,不过对于WEB测试来说由于运行一次的代价比较大,所以可以先在TestCase里列出场景,而不写任何测试代码,这样先让这个TestCase作为一个文档的作用存在;
  • 通过测试和上层方法进行驱动开发。比如你写Action测试时发现需要跳转首页的方法,就驱动在Action建立toIndex()方法。在Action发现你需要Service ,就建立Service对象,利用IDE的辅助提示功能,快速的进行驱动开发。
  • ……

为了让参会者能够有更多的时间进行相互的交流,本次活动在最后的1.5小时中设置了OpenSpace(开放空间)环节,将大家分成不同的小组,然后自己选择组长自己选择话题,然后和其他人员进行分享。从而让每个人都有发言的机会,“每一个人都是讲师”,并能在相同的单位时间内聆听到关于一个话题更多的观点,更靠近百度技术沙龙所强调的“交流”和“争鸣”目的。这一环节的效果,正如一位参会者会后在网易论坛中对这次活动的图片报道中写到,“真是很活跃丰富的沙龙活动,互动性很强,是我最喜爱的交流方式!希望百度延续这样的方式,给大家一个自由的交流平台。”关于OpenSpace环节的讨论,InfoQ随后会有更深入的总结,本次活动的演讲资料下载链接为:百度技术沙龙第4期(7月24日)演讲资料下载!

你可能感兴趣的:(百度技术沙龙第4期回顾:Web测试自动化(含资料下载))