移动测试
最近几年由于iOS和Android设备越来越普及,移动应用的出现了井喷,大部分都是个人开发者或者小型公司开发的个人应用或者手游。而且随着iOS和Android的设备和SDK的初步成熟,大量的大型商业公司已经或者准备开发移动应用。对于商业移动应用,稳定性非常重要。对于稳定性,测试就非常重要。由于智能系统越来越复杂和成熟,其上面的应用程序的功能也越来越多,所以自动化测试也就越来越重要。自动iOS在2007年和Android在2008年发布以来,基于这两个系统的自动化测试工具就初步发展起来。一般情况下最好使用和应用程序开发使用的语言来写功能测试,但是由于商业应用的业务需求越来越复杂,所以我倾向于使用基于BDD和SBE的测试工具来做业务测试。比如Calabash就是一个十分好用的基于Cucumber[2]的BDD移动测试工具,它同时支持Android和iOS。其Android的实现是基于robotium,而iOS的实现是基于Frank和UISpec。使用Calabash,测试人员可以使用自然语言来编写的cucumber测试脚本,然后通过在PC上运行cucumber脚本来测试iOS和Android设备上的应用程序。如果你的公司拥有大量的手动测试人员,并且希望进行移动自动化测试,ThoughtWorks针对这样的公司开发了一套全新的移动自动化测试工具:Lever,他和Calabash一样,同时支持Android和iOS。测试人员只需要通过打开一个网页,通过选择移动应用界面上的特定组件和对其的操作来进行组成自动化测试步骤,多个测试步骤可以形成一个测试场景,最终完成各种自动化测试案例并运行。由于Lever不是开源产品,也没有公开的详细资料,所以如果你想了解其详细功能和内容,可以BQConf上的Lever的专题演讲。
Web服务器性能测试
敏捷开发在当今软件行业里面扮演着越来越重要的角色,软件测试也随着逐步敏捷起来。由于软件系统,特别是服务器系统越来越复杂,规模也越来越大。开发人数也达到几十,甚至几百人,而且大规模使用第三方的软件库,比如Spring,Rails,Hibernate,.Net等。如果使用不当,将会引起很严重的性能问题甚至是稳定性问题,所以性能问题在当前的软件开发中已经越来越明显了。常规的持续集成验证了构建是否满足了功能设计要求,而持续性能测试增加了另外一重验证标准,程序是否满足了性能要求,从而是性能问题尽早被发现。持续性能测试主要的优点就是可以在代码改变以后可以快速的知道性能变化,比如如果发现性能问题,可以让提交这个Commit程序员去修复这个问题,因为他还能记住这个Commit。如果等到最后发布之前才发现,那么这个程序员可能已经不记得这个Commit,或者已经离开了公司,有可能导致修复这个问题的难度大大增加。如果这个是一个设计上的错误,那么团队就可以尽早修复它并避免以后的功能受其影响。
比如铁道部的12306购票系统上线后的第一个春节就遇到了严重的性能问题,面对预料中的高访问量,系统在春运期间经常长时间无法访问,导致大量用户无法购票。像这样严重的性能问题是在开发的时候是可以预见的,不过还是出现在产品环境上,由此可见系统在构架上没有对性能进行有效的设计,在测试上没有进行有效的性能测试(由于12306产生这个性能问题的原因很复杂,我们这里不做过多讨论,比如各种组织和利益等原因,也不讨论怎么解决。)。当这个性能问题出现的时候,根本无法在短时间内修复,导致了如此严重的性能问题维持了很长一段时间。在第二年的春运里面,系统才增加了排队系统,有效的缓解了性能问题,不过还是会时不时出现无法访问的情况。由于12306是中国唯一的网上火车票购票系统,就算出现这样严重的性能问题,人们还是只有继续使用它。但是如果有多个购票网站,一旦某个出现了性能问题而导致客户长时间无法访问,那么就会带来大量的客户流失,造成巨大的损失。因此性能测试对拥有大量用户软件系统十分重要,而且需要越早发现性能问题,越早修复越好,因为等到发布前,就算测试出性能问题,也有可能因为构架问题而无法修复。
让性能测试成为敏捷开发的一等公民对于更好的进行敏捷开发和高质量的持续部署越来越重要。持续性能测试不应该只是说说,特别是对于大型服务器项目和开发人员众多的情况下,持续性能测试将成为必不可少的组成部分。持续性能测试应该被看做持续交付的重要步骤,应该和回归测试一样,可以做到更频繁的高性能持续交付。在2013年5月发布的ThoughtWorks技术雷达中,让性能测试成为敏捷开发一等公民已经被列入了ADOPT。对于当今的软件系统,特别是对于大型服务器系统,并且它又拥有大量用户的情况下,持续性能测试将成为一个必不可少的组成部分。让我们一起去实践持续性能测试,比如新一代的性能测试工具Gatling 就是一个很好的试验田,通过它,我们可以很好的实践对于服务器系统的持续性能测试。
Web自动化功能测试
在过去几年,由于Web2.0的出现导致了Web的第二春的到来,并且我知道的公司和客户们都非常重视Web自动化测试,并且使用率也很高。但是我发现很多测试人员还在使用Selenium IDE或QTP等。对于Selenium,我认识的一般的测试人员只会使用Selenium IDE进行测试录制,然后使用“重播”进行测试。对于通过Selenium IDE录制的脚本是非常难以维护的,导致测试步骤的更改之后一般只能重新录制。对于开发中的项目的其Cost非常高,所以在实际中使用的效果很不好。
对于当前广泛使用的Agile的开发模型,Selenium IDE的方法基本不可用,所以需要更新到Selenium WebDriver(Selenium 2.0)。Selenium WebDriver提供了一套支持各种语言的WebDriver API,比如Java,Ruby, Python等。通过这套API用户可以启动各种不同的浏览器,比如IE,Chrome,Firefox等,并且通过API可以让浏览器访问不同的网页,模拟点击和输入等,获取网页中的内容等。使用WebDriver API比老的Selenium IDE带来了更多的好处,更为适合Agile开发,测试流程更为灵活,维护更为方便,测试流程更为清晰易读,断言也更为多样化等。但是对于测试人员也有一个麻烦,就是至少需要学习一门语言来开发测试案例。驱动Selenium WebDriver的测试可以使用xUnit或者各种BDD框架。
如果你们使用的是Ruby On Rails开发的Web系统,或者你想尝试一种新的快速的开发方式,你还有一个选择就是Watir。Watir是一个使用Ruby开发的测试API,和WebDriver API类似,而且它自带和Rails集成的组件,所以对于Rails的Web系统它有天生的优势。
由于Web Service的流行以及用户UI的需求越来越复杂,Web开发已经由MVC的模型发展到MVP和MVVM模型。由此一来前端的逻辑复杂程度和代码量(如Javascript等)就会大大增加,由此带来的问题就是测试量也会大大增加。对于如此大量的Javascript代码逻辑层的测试,并不适合使用做UI层功能测试的Selenium。所以我们应该在Javascript层做自动化测试。基于Javascript的自动测试框架很多,由于我倾向于Agile和BDD,所以我倾向于Jasmine,Mocha和Karma。其中Jasmine是一个支持BDD的自动化测试框架,而Macha是新的基于NodeJS开发的支持BDD的自动化测试框架。而Karma是一个自动化测试运行环境,它也是基于NodeJS开发的,Jasmine和Macha都可以在其上面运行。Karma支持多种browser,比如Firefox,Chrome, IE等,而且它使用也比较简单。
Windows 应用程序测试
虽然Web从上个世纪90年代开始崛起,到现在的空前盛世,但是任然有很多公司仍在开发和维护Windows应用程序。并且Windows应用程序的开发也从C++和MFC时代进入了.Net 和Silverlight时代。但是Windows应用程序的测试一直都是一个不大不小的问题,虽然有很多商用且成熟的自动测试系统,比如Test Complete和QTP等,不过大部分是基于录制或者Action模型来创建测试,更没有提供现代流行的脚本支持,比如QTP使用的是VBScript,更不用说BDD的支持。在Agile的时代,测试工具API化才是一个正确的选择,如果能支持DSL那就更好了。使用API后,可以获得良好的可维护性,并且可以更为容易实现CI和CD。幸好有一帮志士开发了一套针对Windows应用程序的免费自动化测试框架White,以及.Net的BDD框架SpecFlow。White封装了Microsoft's UIAutomation Library,并提供了一套简单易用的API。它支持Win32, WinForms, WPF, Silverlight and SWT (Java) platforms的应用程序,并且通过MicroSoft Windows SDK里面的Inspect工具可以非常容易的找到应用程序中UI控件的ID来进行自动化测试。
Web安全
安全,一个即神秘又兴奋还忧心的话题。其中安全世界里面的东西太多太多了,比如服务器安全,移动安全,网络安全,杀毒软件,入侵检测等等,不过今天我只想说说Web的安全。Web,在前面我已经用了各种的词汇来描述它的现状。正是由于它当前这种现状,我们不得不特别关注它。所以有一批黑客发起了一个关注Web安全的公益性项目OWASP(Open Web Application Security Project)。在这个项目里面,有各种关于Web安全的资料,比如文档有《OWASP安全编码规范快速参考指南》,《OWASP测试指南》 和 《OWASP安全风险Top 10 》2013年版等, 以及各种安全测试和培训工具,比如ZAP和WebGoat等。其中ZAP是一款简单易用并且免费的Web安全扫描工具,使用在针对网站渗透测试过程中的检测网站步骤中,并且很容易的和maven以及CI进行集成。由于它是由java开发的,所以也支持多种操作系统,比如Windows和MacOS等。而WebGoat是一个漏洞百出的J2EE Web应用程序,这些漏洞是故意设计用来演示Web应用程序安全课程的。这个应用程序提供了一个让用户可以真实去实践和学习的平台,让用户可以真实看到漏洞以及尝试去修复这个漏洞。
除了上面介绍的免费工具和练习平台以外其实还有很多其他的免费和商业版本的工具和平台,比如w3af,Burp,metasploit,Google’s Gruyere等。我暂时还没有用过这些,有兴趣的同学可以自己去学习研究。最后如果大家想学习和使用这些工具,并练习Web的安全问题,比如OWASP Top 10,可以使用Maven公司的Web Security Dojo就可以非常方便的进行。
总结
对于测试人员,需要了解各种测试方法,测试策略和测试工具,随着软件行业的迅速发展也需要更新它们,比如视觉感知测试, 移动测试,性能测试等等。但是随着Agile越来越普及,持续集成和持续部署的广泛使用,以及BDD的兴起,学习脚本将会成为测试人员的一门必修课。不要再犹豫了,更新自己吧,要知道不进则退哦。