我如何自动与命令行程序进行交互,这些命令行程序使用Perl 6公开文本终端接口以进行测试?
答案 0 :(得分:5)
如果您想使用Perl 6自动执行或测试控制台应用程序,我认为您将使用NativeCall与expect库进行交互。安装expect后,man libexpect
将显示其API文档,但访问文档的方式(如联机帮助页名称)可能因包分发而不同。
Expect有API启动程序,等待文本出现在(模拟)控制台上(到#34;期望"文本),并将文本发送到控制台(模拟打字)。最常见的用例是自动化需要密码输入的程序。期望通常是脚本化的 - 它是一个翻译 - 但是没有理由不从更高级别的编程语言中使用它。
编辑:我有点回答了错误的问题。 OP有兴趣使用Perl 6测试Perl 6模块。也就是说,使用expect启动第二个使用该模块的Perl 6解释器仍然是测试应用程序的最强,最严格的方法。您不需要知道模块使用什么类型的终端库,因为期望应该与几乎所有它们兼容。您可以将文本发送到子进程的STDIN管道,但这不会像您期望的子进程(控制台)通信那样强大。我不知道是否有办法劫持模块使用的终端库并直接与之通信。
答案 1 :(得分:1)
如果它只是一个简单的界面,你可以只run
程序并收集输出。目前实验性的Testo
module具有is-run
例程。您可以直接使用它,或者如果实验状态很麻烦,请将guts of it复制到您自己的帮助程序中。
答案 2 :(得分:0)
看看Sparrow6 Task Check Language-基于Perl6的DSL来验证文本输出。我已经做了很多终端应用程序的测试。