当有一个在我的项目(Django的)任何变化如何自动运行测试?(How to automatical

2019-07-20 19:56发布

目前,我正在运行python manage.py test中每过一段时间后,我做我的Django项目显著的变化。 是否有可能自动运行这些测试时,我改变,将文件保存在我的项目? 这将是更早发现错误有用的(我知道Rails已经像这样使用RSpec)。 我用鼻子和Django的鼻子。 提前致谢。

Answer 1:

使用ENTR :

$ find . -name '*.py' | entr python ./manage.py test

或者,对于额外的信用,有结合它的ACK :

$ ack --python | entr python ./manage.py test

如果你想让它甚至找到新的文件,如你添加它们:

$ until ack -f --python | entr -d python ./manage.py test; do sleep 1; done


Answer 2:

py.test答案(这也适用于鼻):

pip install pytest-xdist
py.test -f # will watch all subfolders for changes, and rerun the tests

由于py.test了解鼻子,这个工程的鼻子太大。



Answer 3:

我是一名JavaScript开发人员,所以我使用的工具JS开发与Node.js的建成,实现我的项目同样的目标。 这是非常简单的,但你还需要安装到的NodeJS搞不定。

我创建了一个叫做在我的项目的根目录gruntfile.js文件:

//gruntfile.js
module.exports = function(grunt) {

  grunt.initConfig({
    watch: {
      files: ['*.py'],
      tasks: ['shell']
    },
    shell: {
      test: {
        command: 'python main_test.py'
      }
    }
  });

  grunt.loadNpmTasks('grunt-contrib-watch');
  grunt.loadNpmTasks('grunt-shell');

  grunt.registerTask('default', ['watch']);
};

它在做什么基本上是看在具有PY扩展目录中的任何文件,如果他们改变了它执行shell命令,在这种情况下我的Python测试(你可能想改变它,我测试的名字是main_test.py)。 为了运行需要安装Node.js的这一咕噜脚本之后,你将有NPM在全局路径。 之后,你需要英索尔几个节点模块为好。 所有这些模块除了咕噜-CLI将存储在当前文件夹,以便确保你在你的项目的根目录或什么都夹你把gruntfile.js中,然后运行命令休耕。

npm install grunt-cli -g
npm install grunt
npm install grunt-contrib-watch
npm install grunt-shell

不要担心大小,这些都是非常小的模块。 现在,你有每一件事情的设置,你可以简单地运行grunt ,它会开始看你的py文件,当您保存他们将运行测试。 它可能不是用于运行测试的Python最好的方式,但正如我说,我是一个JavaScript开发人员,我觉得步兵提供执行测试,甚至对其他语言的,所以我用它的一个非常简单的方法。



Answer 4:

我只是想nose-watch和它的工作太棒了! 安装插件和运行与测试--with-watch的选择。

更新 ::(它似乎并没有从运行Django的鼻子的manage.py帮手测试时很好地工作。

最后,我选择使用tdaemon ,支持Django的,虽然可能需要一点摆弄以及为完全成熟的项目。

例如,下面是我跑了我的Django项目:

tdaemon -t django --custom-args=a_specific_app_to_test -d --ignore-dirs logs

--custom-args是集中测试,以特定的应用程序(一样的,你会做python manage.py test a_specific_app_to_test

-d参数是启用调试日志记录,打印的文件变化触发运行。

--ignore-dirs是必要的,因为我的测试写日志(这本身就是一个问题!)和tdaemon进入一个无限循环。



Answer 5:

这里另一个JavaScript开发,我发现nodemon ( https://github.com/remy/nodemon )工作得很好。 默认情况下,手表*.js的文件,但是这是可配置的--ext标志。 要使用它,这样做:

npm install -g nodemon
cd /your/project/dir/
nodemon --ext py --exec "python manage.py test"

现在,每当一个*.py文件的变化,它会重新运行命令。 它甚至还发现了新的文件。



Answer 6:

我习惯watchr,像Watchr



Answer 7:

我这样做是使用一饮而尽。 安装一饮而尽壳:

npm install gulp-shell --save-dev    

而在gulpfile.js:

var shell = require('gulp-shell')

gulp.task('run-tests', shell.task([
   'python3 manage.py test']))

gulp.task('watch', function(){
   gulp.watch(['./your-project-name/**/*.html', './your-project-name/**/*.py'], ['run-tests']);
});

gulp.task('default',['run-tests','watch']);

它运行测试随时有保存到任何的.py或.html文件的变化!



Answer 8:

您可以使用Django的主管 Django上的顶部。 这将避免使用CI工具(其可以在任何情况下是有用的,这不是无效的其他响应 - 也许只是互补)。



Answer 9:

我建议设立Django的鼻子和嗅探器 。 这是很容易设置和伟大工程。 沿着线的东西这scent.py是我唯一需要的定制。 然后,你可以运行sniffer -x myapp.tests

鼻附带了一些其他东西,使测试位更好的工作,并具也。



Answer 10:

如果你使用git控制代码,另一种方式是使用git的钩预先承诺

也许错误,如remote: fatal: Not a git repository: '.' 检查这个帖子https://stackoverflow.com/a/4100577/7007942



Answer 11:

我写了一个咕嘟咕嘟任务自动运行./manage.py test ,只要任何指定的Python文件被更改或删除。 你需要的节点此。

首先,安装咕嘟咕嘟:

yarn add -D gulp@next

然后使用以下gulpfile.js并进行必要的调整:

const { exec } = require('child_process');
const gulp = require('gulp');

const runDjangoTests = (done) => {
  const task = exec('./manage.py test --keepdb', {
    shell: '/bin/bash', // Accept SIGTERM signal. Doesn't work with /bin/sh
  });

  task.stdout.pipe(process.stdout);
  task.stderr.pipe(process.stderr);

  task.on('exit', () => {
    done();
  });

  return task;
};

gulp.task('test', runDjangoTests);

gulp.task('watch', (done) => {
  let activeTask;
  const watcher = gulp.watch('**/*.py', {
    // Ignore whatever directories you need to
    ignored: ['.venv/*', 'node_modules'],
  });

  const runTask = (message) => {
    if (activeTask) {
      activeTask.kill();
      console.log('\n');
    }

    console.log(message);
    activeTask = runDjangoTests(done);
  };

  watcher.on('change', (path) => {
    runTask(`File ${path} was changed. Running tests:`);
  });

  watcher.on('unlink', (path) => {
    runTask(`File ${path} was removed. Running tests:`);
  });
});

然后只需运行node node_modules/gulp/bin/gulp.js watch运行任务:)



Answer 12:

你需要一个持续集成服务器,像詹金斯 。



文章来源: How to automatically run tests when there's any change in my project (Django)?