Testing 测试命令行工具的最佳方法?

Testing 测试命令行工具的最佳方法?,testing,command-line,automation,perl-testing,Testing,Command Line,Automation,Perl Testing,我们有大量的命令行实用程序,我们自己编写并经常使用。目前,测试它们是非常麻烦的,因此,我们没有尽可能多地进行测试 我想知道是否有人能建议好的技术或工具来做好这类事情 这是UNIX。您应该能够从shell脚本(MS操作系统上的批处理文件)调用它们,将输出重定向到一个文件,然后以编程方式扫描该文件以确保其具有正确的输出。我不知道有哪种测试框架可以为您实现自动化,但您可以直接自己设置它。您可以通过批处理文件或windows脚本主机来完成此操作 但我保证会使用类似()的任务调度器或其他免费/专业软件 在

我们有大量的命令行实用程序,我们自己编写并经常使用。目前,测试它们是非常麻烦的,因此,我们没有尽可能多地进行测试

我想知道是否有人能建议好的技术或工具来做好这类事情


这是UNIX。

您应该能够从shell脚本(MS操作系统上的批处理文件)调用它们,将输出重定向到一个文件,然后以编程方式扫描该文件以确保其具有正确的输出。我不知道有哪种测试框架可以为您实现自动化,但您可以直接自己设置它。

您可以通过批处理文件或windows脚本主机来完成此操作

但我保证会使用类似()的任务调度器或其他免费/专业软件


在那里,你可以轻松复制/粘贴命令行参数,当你想测试你的软件大约100次时,你应该根据这些参数进行更改

我做了一点(很久以前,呵呵)来检查所发生的事情是否符合我的预期

我建议构造命令行工具的代码,以便命令行实用程序是函数和/或类库的客户端

与其简单地使用std::cout打印输出,不如让libraries函数接受默认为std::cout的ostream引用。测试时,提供一个std::stringstream来收集输出

最后,只需使用您喜爱的单元测试框架将实用程序的输出与预期结果进行比较

(我为C++特定的例子道歉……我相信在其他语言中也有类似的方法)。p> 是用于测试用任何编程语言编写的命令行应用程序的扩展

要使用它,您需要ruby来运行测试,但是aruba的目的是提供一个预定义步骤定义库,这样您就不需要编写任何ruby代码来创建一个可行的测试套件。(不过在某个时候,您可能需要编写一点ruby来完成一些自定义步骤。)

您可以在这里看到一个使用aruba测试的命令行工具的复杂示例:

您可以将perl与库一起使用,它为测试CLI提供了一个很好的框架。 虽然主要设计用于单元测试,但您可以将其扩展到测试用户工作流

其中一些方法:

 # Various ways to say "ok"
  ok($got eq $expected, $test_name);
  is  ($got, $expected, $test_name);
  isnt($got, $expected, $test_name);

  # Rather than print STDERR "# here's what went wrong\n"
  diag("here's what went wrong");

  like  ($got, qr/expected/, $test_name);
  unlike($got, qr/expected/, $test_name);

  cmp_ok($got, '==', $expected, $test_name);

您可以使用编写类似于交互式shell会话的测试。它具有灵活的测试规范格式,允许您使用Perl正则表达式或类似shell的通配符匹配输出。Cram将重放来自测试的命令,将输出与引用进行比较,并报告差异

山姆·斯蒂芬森。它很小,纯用shell编写,并且有一组很好的特性

以前建议的阿鲁巴看起来很有趣,但在某些情况下,它可能是一个安静的过度依赖(ruby,Cumber)

我已经“完全”开发了一个工具

它在临时沙盒目录中执行要测试的内容。 自述文件包含许多示例

“通过移动到适当的目录对文件进行分类”程序的测试如下所示:

[setup]

dir input
dir output/good
dir output/bad

file input/a.txt = <<EOF
GOOD contents
EOF

file input/b.txt = <<EOF
bad contents
EOF

[act]

classify-files-by-moving-to-appropriate-dir GOOD input/ output/

[assert]

dir-contents input empty

exists output/good/a.txt : type file
dir-contents output/good num-files == 1

exists output/bad/b.txt : type file
dir-contents output/bad num-files == 1
[设置]
直接输入
直接输出/良好
目录输出/错误

file input/a.txt=您正在使用或编写/生成命令行实用程序吗?是的-我希望有人知道框架或工具。我在考虑把我自己也算是你的权利,这不会太难。干杯汤姆