前言
无线产品线的很多模块基本上都属于前端类型,前端模块一般具有如下几个特征:接收处理用户请求,本身不维护数据,从后端模块获取数据,进行build页面后展示给用户。
从图示可以看到,针对前端测试,我们需要根据手机特性,针对用户和前端的输入输出进行针对性的测试。
问题及解决方法分析
目前wap前端测试采用的方法有如下几个:
对于build页面的系统逻辑部分的case,采用自动化方式进行测试
对于页面展示部分的case,使用能够支持wml和xhtml页面的pc浏览器(比如opera或者安装了wmlbrowser的firefox)进行测试
对于前端页面的重大调整,比如尝试使用新的页面元素,采用真机或手机模拟器的方式进行,但主要偏重于验证是否由于新元素的使用引入了兼容性问题
由于真机测试的效率得不到很好的保证,且手机浏览器比pc浏览器种类纷繁复杂(包括手机内置浏览器及第三方开发的浏览器),难以依靠几款手机或浏览器进行覆盖,因而在wap前端测试中采用真机进行的比较少。测试中比较多的采用pc浏览器进行模拟,而手机和pc浏览器之间又存在较多的差异性,给wap的前端测试带来了诸多bad case甚至bug。
从输入角度
由于手机提交请求的差异性,比如部分手机提交不符合http协议规范的header,给无线的前端测试带来了诸多的问题,典型示例如下:
发现由于某些手机提上来有key没value的header字段而使web server抛出异常而处理失败。
前端架构升级项目,web server上线过程中发现部分手机发送的get请求携带content-length=0,web server对于此类不符合http协议规范的请求直接抛弃而拒绝服务。
为了避免以后再出现类似问题,我们考虑的解决办法是:收集并分析用户请求的差异性,形成case库及参考文档,供以后测试参考。
从输出角度
目前wap页面包括wml和xhtml两个版本,由于手机浏览器的兼容性没有pc浏览器的兼容性好,经常可能会由于一些小的语法错误导致页面无法正常显示,典型示例如下:
页面中url参数的&符未转义
由于手误,在从xhtml版本修改为wml版本时带入了不支持的标签
这种问题往往用pc浏览器比如ff不容易发现,而依靠真机或者手机模拟器测试又不够高效。针对这一问题,我们的解决思路如下:首先保证我们的wap页面是符合规范的;在我们符合规范的情况下尽可能的收集bad case并予以规避。
改进实践
手机header数据仓库
整个数据仓库形成思路如下:
步骤1:首先不依赖于web server,编写socket server,通过日志得到请求
步骤2:其次分析header的key类型,给出key集合,并对出现概率较高的header查阅资料给出解释,形成参考文档
步骤3:再次针对每种key,工具生成value取值集合,并结合含义给出等价类划分,从而形成case库
针对步骤2,收集用户header,脚本分析得到不同的header集合。对于数量过万的header集合,即在用户请求中出现的比例大于1/1000的header,整理并形成参考文档。
针对步骤3,对于步骤2整理出来的100中key,分析线上引流数据生成其value取值,去重后得到的value全集,见附录。对于其中重要的key,划分其等价类集合。
wap页面规范性校验库
如何保证wap页面是符合规范的,就需要按照标准wml和xhtml的规范进行页面检查。wap页面规范性校验库包括如下两个步骤:
步骤1:总结目前使用的页面标准规范,形成参考文档
步骤2:封装开源xml校验库,集成到自动化框架中
针对步骤1,目前wap页面包括wml和xhtml版本,wml基本上都是”wml_1.1.xml”,xhtml基本上都是”xhtml-mobile10.zip”,整理其相应的规范内容见下表。
针对步骤2,调研目前开源的xml语法校验工具,比如http://validator.w3.org/,将开源的校验库封装成工具,且集成到自动化框架中,方便的进行调用,提高测试效率和覆盖率。目前实现为基于java语言,采用dom4j开发了wml&xhtml语法校验库,根据页面申明的dtd进行检查。之所以采用dom4j主要因为其是非常优秀的Java XML API。
另外由于wise页面采用的dtd规范基本一致,例如wml基本上都是”wml_1.1.xml”,xhtml基本上都是”xhtml-mobile10.zip”,因而采用dtd本地保存的方法,加快执行速度。封装到wise-test后,使用非常简单,case中只需调用check_validation(url),即可实现对指定url的语法检查。在升级项目中,对该工具进行了实践检验,基本上每个页面的自动化case都进行了语法检查,发现了在两个wml页面引入xhtml标签导致的页面解析失败问题。
(全文完)