Я узнал, как управлять подпроцессом с помощью двух операторов if, делая переменную процесса глобальной переменной.
В результате код будет выглядеть следующим образом (набросок):
if command == "run":
global htop
htop = subprocess.Popen(["xterm", "-e", "htop"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
if htop.poll() == None:
htopStatus = "Running"
if command == "stop":
if htop.poll() == None:
htop.terminate()
htopStatus = "Stopped"
Мы запускаем скрипт удаления / создания таблицы перед каждым тестом. Это довольно быстро и гарантирует, что ничего не осталось от предыдущих тестов.
PS: Мы используем NHibernate, который создает этот скрипт на лету и запускает тест на Sqlite в памяти, это светлая скорость. Но если мы переключимся на SqlServer, это все еще довольно быстро.
Это сложная проблема, и решение, как правило, уникально для каждого приложения. До тех пор, пока основные структуры не примут «рекомендуемый подход», это будет оставаться проблемой.
Моя лучшая рекомендация: планируйте это использование в начале вашего приложения. Включите API, которые очищаются после сброса БД из-под приложения (т. Е. Сбрасывают кеши).