2012-03-02 205 views
1

我有一个相当复杂的项目,我想测试..但我找不到如何完全测试它。测试使用子进程产生bash子shell的python脚本..有可能吗?

该项目本身是django的开发环境。它包含一个Python脚本,可用于创建新项目或激活开发环境。

要激活开发环境,我使用类似Virtualenv的技术。我的python脚本调用一个本身源自一个rcfile的shell脚本。

这听起来比实际上更复杂。工作流程是这样的:

$ cd my-project/ 
$ duke dev 
(my-project)$ 

公爵是我的Python脚本调用一个名为dev的bash脚本。开发脚本只包含这样一行:

#!/ bin/bash 。/path/to/bin/env

因此,它基本上只是启动一个子shell,在该子shell中我生成一个名为env的rc文件。

env本身需要在开发过程中创建所需的所有命令和环境变量。

我的问题是,我无法测试任何特定于此env的东西,因为我的脚本产生了一个子进程,然后在子shell中激活env。子进程关闭,子外壳一直打开,直到我退出。

虽然它的工作,我无法找到一种方法来可靠地测试它。

它甚至可以测试这个吗?

下面的代码: https://github.com/h3/django-duke-client/blob/master/dukeclient/commands/dev.py#L22

  • dev的脚本模板: https://github.com/h3/django-duke-client/blob/master/dukeclient/templates/dev
  • 的ENV rcfile模板: https://github.com/h3/django-duke-client/blob/master/dukeclient/templates/env
    • dev的脚本调用

    回答

    1

    您运行的任何脚本将始终产生一个子shell。

    在启动Python代码之前,您应该先致电. %(base_path)s/.duke/bin/env,无论是在命令行还是作为生成python的同一脚本的一部分。

    不要忘记导出可能在子流程中使用的变量和函数。

    +0

    这几乎是我到目前为止的结论..现在我问自己的问题是,如果有可能为一个subshel​​l退出本身。如果可以,我可以用测试标志调用我的脚本,使env在激活时运行一个测试套件,然后退出。如果它有效,它可能会解决我的问题。 – 2012-03-03 04:54:06