我正在寻找一种以编程方式测试用asyncore
Python模块编写的脚本的方法。我的测试包括启动有问题的脚本 - 如果打开TCP侦听套接字,则测试通过。否则,如果脚本在到达该点之前死亡,则测试失败。
这样做的目的是了解每晚构建是否有效(至少达到某一点)。
我认为最好的测试方法是在某种沙箱包装器中启动脚本,等待套接字请求。我不关心实际上在该端口上侦听任何内容,只是拦截请求并使用它作为我的测试通过的指示。
我认为最好拦截打开的套接字请求,而不是以设定的间隔轮询(我讨厌轮询!)。但就我如何做到这一点而言,我有点超出了我的深度。
我可以使用shell脚本吗?或者我可能需要在Python级别覆盖asyncore模块?
提前致谢,
- B
答案 0 :(得分:0)
这就像代码高尔夫:
#!/bin/sh
# iamwaiting: run a command for a specified time then kill it
# returns the status of cmd on normal termination
opath=$PATH
PATH=/bin:/usr:/bin
SIGNAL=
case $1 in
-*) SIGNAL=$1; shift;;
esac
case $# in
0|1) echo 'usage iamwaiting [-signal] wait cmd [args]' 1>&2; exit 2;;
esac
wait=$1 ; shift
PATH=$opath "$@" &
child=$!
# unfortunately, this script takes at least wait seconds to run
sleep $wait
if kill ${SIGNAL:--2} $child 2> /dev/null ; then
echo "iamwaiting timeout after $wait seconds: $@" 1>&2
exit 1
else
wait $child
exit $?
fi
如此运作:
$ iamwaiting 5 dd if=/dev/zero of=/dev/null count=5
5+0 records in
5+0 records out
2560 bytes (2.6 kB) copied, 2.0973e-05 s, 122 MB/s
$ echo $?
0
$ iamwaiting -9 5 dd if=/dev/zero of=/dev/null
iamwaiting timeout after 5 seconds: dd if=/dev/zero of=/dev/null
$ echo $?
1
$ iamwaiting 1 cat /dev/does-not-exist
cat: /dev/does-not-exist: No such file or directory
$ echo $?
1
我对使用asynchore例程测试asyncore程序持谨慎态度,但我很迷信。
答案 1 :(得分:0)
另一种选择是在导入socket
模块之前模拟asyncore
模块。当然,那么你必须首先确保模拟正常工作。