Vladimir Belorusets博士是Shocase公司(一家营销人员的社交网络)的QA主管。他擅长测试自动化和测试方法。Belorusets博士是一名认证的Scrum大师和认证的初级测试员。他是发表在Testing Experience, Agile Record, Software Test & Quality
Assurance, Software Test & Performance和StickyMinds.com上的很多文章的作者。Belorusets博士是Software Test Professionals的战略咨询委员会和会议程序委员会的一员。他曾在安达卢西亚峰会,HP Software Universe,Software Test Professionals和STARWEST上发过言。Vladimir 曾在Xerox, EMC, Siebel, CSAA及各种新兴企业里负责过开发和QA管理。Belorusets博士获得了俄罗斯科学院莫斯科研究所系统分析的控制系统博士学位和立陶宛维尔纽斯州立大学的理论物理的硕士学位。Vladimir 曾在多家旧金山海湾区计算机学校教授多门关于功能和性能测试的课程。
简介
本文的前两部分中,我描述了用于开发一个(作为测试多个应用程序接口的基础的)统一测试自动化(UTA)框架的主要准则。在JUnit和JUnitParams上构建UTA。我展示了该如何在UTA框架中用开源Selenium WebDriver和Spring Framework测试浏览器GUI和REST API。这一部分中,我将描述连接到一个SSH服务器时实施命令行界面的自动化测试的细节。
用于和CLI自动交互的流行工具是Expect。开始使用Tcl写的,Java中有几种开源Expect实施。UAT中,我使用下列程序:
Ronnie Dong开发的Expect-for-Java。该API 大致基于Perl Expect library。
用于SSH协议的JCraft JSch。
CLI测试的结构
一个简单的CLI测试包含以下四个步骤:
1. 与远程服务器建立一个SSH理解
2. 在CLI运行输入命令
3. 获得并解析反应
4. 对比真实结果和预期结果以验证
第一步通常每个测试类都要进行一次。其他的包含一个当我们处理各种命令时在一个测试里重复了很多次的障碍。使用JCraft JSch (Java Security Channel)类,SSH连接可以轻松地完成。因为建立了一次会话,相应的陈述放到了@BeforeClass method中。(列表1)。
列表1. 创建一个SSH连接
为了验证连接,我们可以检查命令提示符。Expect类包含expect()方法。处理针对一个模式的输入流,将找到的匹配放到匹配字符串中,并更新isSuccess 逻辑运算。该图案可以呈现为一个字符串或正则表达式。列表2中展示了代码片段。
列表2. 检查命令提示符
对于第二步,Expect 提供方法send()。
测试命令选项
如果测试下的命令有多个选择,像UNIX中的IS或Windows中的dir,用JUnitParams library和JUnitParamsRunner并使用数据驱动方法测试它是有效的。当你需要匹配一个复杂的输入时,可以使用java.util.regex.Pattern类。列表3表明了该如何为命令显示创建一个数据驱动的测试。
列表3. 有多个选项的测试命令
数据文件showCommand.csv包含两栏:一个是命令选项,一个是预期匹配的正则表达式模式。
CLI测试
多数CLI测试需要基于一些前面命令中列出的状态来处理下一个命令。这种情况下,你需要创建一个关于描述预期结果的所有可能模式的列表。当你将列表传到expect()方法中去时,将会返回匹配的模式索引。这将使你明白多个结果中会产生什么样的结果。列表4中提供了执行“展示hsm状态”命令的例子,有两种可能的结果:“加密用户登录:yes”和“加密用户登录:no”。
列表4. 做出决策