如何使用nosetests分别组织和运行unittests和功能测试

sas*_*ker 10 python unit-testing functional-testing nose nosetests

我有以下典型的python项目文件结构

packageA
   +----subpackage1
            +----classa.py
   +----subpackage2
            +----classb.py
   +----test
          +----subpackage1
                    +----classa_test.py 
          +----subpackage2
                    +----classb_test.py
Run Code Online (Sandbox Code Playgroud)

我目前正在尝试组织我的单元测试和功能测试,因此我可以使用nose单独运行unittests和功能测试,但也可以选择运行所有测试.测试将存在于packageA/test/subpackage1和packageA/test/subpackage2中.

  • 组织不同测试的好方法是什么?按文件夹(功能/ vs单位/)?通过命名测试类的约定(ClassATest vs ClassAFunctionalTest)?或者通过命名测试方法的约定(classa_foo_test vs classa_bar_functional_test)?
  • 有人能解释一下nosetests的正则表达式匹配是如何工作的吗?选项-m,-i和-e似乎没有像我期望的那样运行.正则表达式是匹配目录(subpackage1),文件(classa_test)还是测试类(ClassATest)还是测试方法(classa_foo_test)?我非常困惑

yed*_*tko 8

我的测试目录结构看起来像这样:

root
  + --- tests
  |       + --- unit_tests
  |       |         + --- some_app_tests   
  |       |         + --- another_app_tests
  |       |         | run_tests.py
  |       |
  |       + --- integrate_tests 
  |                 + --- some_app_tests
  |                 + --- another_app_tests
  |                 | run_tests.py
  |       
  + --- project_root
          + --- some_app
          + --- another_app
Run Code Online (Sandbox Code Playgroud)

对于每个单独的应用程序,我使用unit-和integrate-目录中的测试创建相应的目录.每个目录都是单独的django项目,带有自定义设置,还有用于运行测试的管理命令.

将测试放在一个目录中也有一个很好的优势 - 当部署项目时,没有理由用它来部署测试.所以我只删除一个目录,这就是全部.

(运行测试我使用django-sane-testing:https://github.com/Almad/django-sane-testing)