我想使用诸如Expect之类的东西为简单的面向字节的协议编写测试。测试脚本看起来像一个简单的流:
send "data"
expect "data"
(将写入发送到标准输出并期望从标准输入读取足够多的内容,如果不匹配则退出。)
我不能使用 expect 本身,因为它是为缓冲的、面向行的交互而设计的。出于同样的原因,使用 grep 或 awk 进行模式匹配已失效。
有我可以使用的 UNIX 工具或库吗?如果它是标准的和可移植的,那就更好了,因为它需要与现有程序集成。
一个有点丑陋的解决方案是编写一个小的 perl 或 python 脚本,将二进制流转换为文本十六进制数字,然后使用 Expect 来处理它。
pexpect应该让你毫无问题地使用二进制(字节字符串),如果你对 Python 的逻辑没问题——它是纯 Python 并且可移植到所有足够的 unix-y 平台(基本上是一个带有 pty 的平台;-)。同样,Python 的正则表达式和其他字节字符串操作对任何二进制字符串都没有任何问题。和 Python 标准库模块喜欢struct
并array
简化了对此类二进制字节字符串的操作以及它们与其他类型的有意义的数据表示的来回转换。