单元测试:这一层主要由产品开发同学负责, 比如使用Junit开发方法的单元测试用例, 通常这些用例都是静态的, 测试数据通过各种Mock技术产生。
接口测试:这一层主要由测试同学负责,比如我们需要对Http, HSF, TOP/MTOP等接口进行业务上的功能测试, 验证是否符合接口定义和业务需求,因为是基于业务测试,所以测试数据都是真实地,需要我们调用其他业务方提供的接口生成测试用的数据。
UI测试:这一层主要由测试同学负责,使用各种UI自动化工具进行测试脚本的开发,我们可以使用AutomanX或者Selenium等工具实现UI层的自动化测试。
为什么要画成一个金字塔形,则不是长方形 或倒三角形呢? 这是为了表示不同阶段所投入自动化测试的比例。如果一个产品从没有做单元测试与接口测试,只做UI层的自动化测试是不科学的,从而很难从本质上保证产品的质量。如果你妄图实现全面的UI层的自动化测试,那更是一个劳民伤财的举动,投入了大量人力时间,最终获得的收益可能会远远低于所支付的成本。因为越往上层,其维护成本越高。尤其是UI层的元素会时常的发生改变。所以,我们应该把更多的自动化测试放在单元测试与接口测试阶段进行。
既然UI层的自动化测试这么劳民伤财,那我们只做单元测试与接口测试好了。NO! 因为不管什么样的产品,最终呈现给用户的是UI层。所以,测试人员应该更多的精力放在UI层。那么也正是因为测试人员在UI层投入大量的精力,所以,我们有必要通过自动化的方式帮助我们“部分解放”重复的劳动。
至于在金字塔中三种测试的比例要根据实际的项目需求来划分。在《google 测试之道》一书,对于google产品,70%的投入为单元测试,20%为集成、接口测试,10% 为UI层的自动化测试。