使用Python自动测试shell脚本

时间:2012-10-30 03:31:00

标签: python

我正在寻找一个优雅的解决方案,用于使用子命令和多个选项自动化命令行工具的测试。到目前为止,我能找到的最接近的是Mercurial的testing infrastructure

run_tests.py脚本可以统一的方式运行shell脚本测试,python测试。测试的验证主要是将命令的输出与预定义的输出进行比较,并检查命令的退出状态。

但是,在mercurial中检查run_tests.py的源代码之后,由于Mercurial是为Python 2.4-2.7设计的,因此它过于复杂,因为没有使用2.5以后的新功能,这使得代码有点过时了例如,所有实际的命令运行都包含在其自己开发的 Popen4 中:

processlock = threading.Lock()

closefds = os.name == 'posix'
def open4(cmd, wd, timeout):
    processlock.acquire()
    p = subprocess.Popen(cmd, shell=True, bufsize=-1, cwd=wd,
                         close_fds=closefds,
                         stdin=subprocess.PIPE, stdout=subprocess.PIPE,
                         stderr=subprocess.STDOUT)
    processlock.release()

    p.fromchild = p.stdout
    p.tochild = p.stdin
    p.childerr = p.stderr

    p.timeout = False
    if timeout:
        def t():
            start = time.time()
            while time.time() - start < timeout and p.returncode is None:
                time.sleep(.1)
            p.timeout = True
            if p.returncode is None:
                terminate(p)
        threading.Thread(target=t).start()

return p

现在甚至没有更新版本中的fromchild,tochild这样的属性,与现代python相同的内容是什么?

我可以使用现代python滚动我自己的简化run_tests.py版本,但在此之前,我想知道是否有更好的现有解决方案以避免重新发明轮子。

我需要的是:

  1. 单独运行一系列shell命令的隔离环境
  2. 检查命令输出和退出状态的能力
  3. 最好为某些测试(带副作用的命令)提供一些回调或挂钩以进一步验证。
  4. 如果您有任何经验可以分享或有任何建议,请告诉我。

0 个答案:

没有答案