2010-01-17 52 views
2

我想用Expect之类的东西编写简单的面向字节协议的测试。测试脚本看起来像一个普通的流:用于二进制协议测试的期望类工具

send "data" 
expect "data" 

(其中发送写到标准输出,并期望从标准输入读取刚刚够,如果退出不匹配。)

我不能使用期待自己,因为它是专为缓冲的,面向行的交互而设计的。与grep或awk模式匹配出于同样的原因。

有没有可以使用的UNIX工具或库?如果它是标准的和便携式的,那就更好了,因为它需要与现有的程序集成。

回答

1

有些难看的解决方案是编写一个小的perl或python脚本,将二进制流转换为文本十六进制数字,然后使用Expect来处理它。

+0

看起来我会用perl的getc()解析协议。不是我最喜欢学习的语言,但它*无处不在。 – Tobu 2010-01-17 20:13:50

+0

打包/解包将是对协议进行“剖析”的最佳选择,并且getc对于非面向行的二进制协议来说是一个非常糟糕的选择。使用读取和打印(或者sysread和syswrite来避免缓冲)与另一方说话。 – MkV 2010-07-17 14:09:26

0

pexpect应该让你使用二进制(字节字符串)没有任何问题,如果你确定与Python的逻辑 - 它是纯Python和移植到所有的充分UNIX-Y平台(基本上是一个与PTY的; - )。同样,Python的正则表达式和其他字节字符串操作对于任何二进制字符串都没有问题;和Python标准库模块(如structarray)可简化对这些二进制字节字符串的操作并将其转换为其他类型的有意义的数据表示。