如何使用许多开关和参数有效地测试命令行软件

时间:2011-10-14 22:36:25

标签: testing command-line grammar

命令行实用程序/软件可能包含许多不同的开关和参数。

假设您的软件名为CLI,并且假设CLI具有以下功能:

  • CLI的一般语法是: CLI <data structures> <operation> <required arguments> [optional arguments]
  • <data structures>可以是'matrix', 'complex numbers', 'int', 'floating point', 'log'
  • <operation>可以是'add', 'subtract', 'multiply', 'divide'
  • 我无法想到任何必需和可选的参数,但可以说你的软件支持它

现在您要测试此软件。你希望测试接口本身,而不是逻辑。基本上,接口必须返回正确的成功代码和错误代码。

基本上很多真正的单词软件仍然提供了一个带有几个选项的命令行界面。我很好奇是否有为此建立的正式测试方法。我的一个想法是构造一个语法(如EBNF)并描述界面的“语言”。但我未能推动这一想法。在这种情况下,语法有什么用呢?它如何实现许多组合的生成。

我很想知道可以应用于这样一个问题的任何理论模型的更多信息,或者如果这里的任何人实际上已经完成了满意的覆盖范围的测试

2 个答案:

答案 0 :(得分:1)

有一个命令行工具作为我维护的产品的一部分,我的情况与你描述的情况非常相似。我所做的是使用单元测试框架,并将每个参数组合编码为测试方法。

该程序在c#/ .NET中实现,因此我使用了Visual Studio内置的microsoft测试框架,但该方法适用于任何单元测试框架。

每个测试都会调用一个实用程序函数来启动进程并发送输入并输出输出。然后,每个测试负责验证CLI的输出是否符合预期。在某些情况下,有一系列测试用例可以通过单个测试方法执行,其中包含for循环。逻辑需要运行CLI并检查每次迭代的输出。

我所拥有的一组测试并未涵盖每个参数的排列,但它涵盖了80%的情况,如果有任何缺陷,我可以添加新的测试。

答案 1 :(得分:1)

使用递归语法生成开关是一个有趣的想法。如果您在哪里尝试这个,那么您需要首先编写语法,以便可以使用所有开关,然后执行语法的随机漫步This提供了一种随机移动语法并输出结果的简单方法。