#51CTO#真正的测试自动化框架全接触( 二 )


运行简单明了的测试 。
无论您是通过命令行、IDE、专用工具、还是CI(持续集成)系统 , 来运行测试 , 都需要确保单元测试能够以直观的方式得到运行 , 并能够提供相应的单元测试库 。
通常 , 单元测试库可以支持几乎每一种编程语言 。 其中包括:
针对Java的JUnit和TestNG 。
【#51CTO#真正的测试自动化框架全接触】针对.Net的NUnit和MSTest 。
适用于Python的unittest(以前叫做PyUnit) 。
b)集成和端到端测试
在执行集成和端到端测试自动化时 , 我们往往需要检验现有测试库所提供的各项功能 。 为了消除不必要的编码负担 , 那些由应用UI驱动的API级别的测试 , 需要通过组件 , 轻松地与被测应用进行交互 。 因此 , 我们不能仅专注于如下方面的编码工作:
连接到应用程序 。
发送各种请求 。
接收各种结果回应 。
此环节涉及到的重要测试库有:
Selenium(主流语言都可使用) 。
Protractor(特定于JavaScript) 。
KarateDSL(特定于Java的API级集成测试 , 请参见:https://github.com/intuit/karate)
c)行为驱动开发(Behavior-DrivenDevelopment , BDD)
专门针对BDD的测试库往往以行为规范为目标 , 以可执行代码的形式创建各种可执行的规范 。 尽管它们不能像测试工具那样直接与被测应用进行交互 , 但是我们可以将不同的功能和预期的行为场景转换为代码 。 通过对BDD流程的支持 , 我们可以创建与自动测试范围和意图相一致的实时文档 。 如下是典型的BDD库:
Cucumber(主流语言都可使用) 。
Jasmine(特定于JavaScript) 。
SpecFlow(特定于.Net) 。
2.测试数据管理
在软件测试自动化、以及测试的创建过程中 , 我们面临的最大挑战是如何利用好测试数据的管理系统 。 因此 , 随着自动化测试数量的增加 , 我们需要能够为特定测试的开展 , 提供可用的测试数据 。 而且 , 我们的自动化框架需要提供必要的措施 , 来输入、创建、以及最终按需清除测试数据 。 通常的做法是:采用一套合适的仿真工具 , 以使数据更加简化、清晰且易于处置 。
3.模拟、存根(Stub)和虚拟化
在研究自动化测试的方案时 , 您可能会遇到如下情况:
需要将模块与在单元测试中连接的组件隔离开来 。
需要处理应用程序集成、或端到端测试中常见的繁琐依赖项关系 。
无论上述哪种情况 , 在开发自动化测试框架的过程中 , 您都需要创建模拟已连接的组件行为模式、存根(请参见:https://www.infoq.com/articles/stubbing-mocking-service-virtualization-differences) , 以及选择实用的虚拟化工具 。
实施模型的通用机制
除了上面讨论的自动化框架组件之外 , 还有一些实用的机制可以帮助我们创建 , 使用和维护各种自动化的测试 , 其中包括:
包装器方法:在使用SeleniumWebDriver组件时 , 我们可以通过创建自定义包装器来处理各种错误 。 因此 , 在创建了可用于SeleniumAPI调用的自定义包装器后 , 您将能够更好地处理各种超时、异常、以及故障报告 , 从而更加关注于自动化测试的本身 。
抽象方法:抽象机制代表了提高可读性 , 淡化了多余的实现细节 。 例如:在创建SeleniumWebDriver测试时 , 我们可以使用页面对象(PageObjects)在页面上发现用户输入的凭据或单击某处等操作 。 同时 , 我们通过跳过页面上某个特定元素之类的方法 , 来达到高级测试的目标 。 而且 , 此类方法适用于许多相似的应用程序和自动化测试场景 。
测试结果报告
在为“如何将测试结果报告到自动化框架中” , 这一问题选择相应的库或机制时 , 您应该着眼于阅读与查看此类报告的目标受众 。 在此 , 您需要注意如下方面:
那些Junit和TestNG之类的单元测试框架所生成的报告 , 主要针对的是诸如CI(持续集成)服务器之类的接收系统 。 这些系统最终会对结果进行解释 , 并以其他软件可使用的XML格式进行呈现 。


推荐阅读