2012-03-02 163 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