我试图找出如何让Pythonsetup.py测试运行等效的Python-m unittest发现。我不想使用run_tests.py脚本,也不想使用任何外部测试工具(如nos
或py.test
)。如果该解决方案仅适用于python 2.7,则可以。
在设置中。py
,我想我需要在config中的test\u套件
和/或test\u loader
字段中添加一些内容,但我似乎找不到一个正确工作的组合:
config = {
'name': name,
'version': version,
'url': url,
'test_suite': '???',
'test_loader': '???',
}
这是否可能只使用Python 2.7中内置的unittest
?
仅供参考,我的项目结构是这样的:
project/
package/
__init__.py
module.py
tests/
__init__.py
test_module.py
run_tests.py <- I want to delete this
setup.py
更新:这可以通过unittest2
实现,但我只想通过unittest
从…起https://pypi.python.org/pypi/unittest2
unittest2包括一个非常基本的setupols兼容测试收集器。在setup.py.中指定test_suite='unittest2.collector'这将使用包含setup.py的目录中的默认参数启动测试发现,因此作为示例可能最有用(请参阅unittest2/collector.py)...
现在,我只是使用一个名为run_tests.py
的脚本,但是我希望我可以通过移动到一个只使用pythonsetup.pytest
的解决方案来摆脱这个问题。
下面是运行测试。py
我希望删除:
import unittest
if __name__ == '__main__':
# use the default shared TestLoader instance
test_loader = unittest.defaultTestLoader
# use the basic test runner that outputs to sys.stderr
test_runner = unittest.TextTestRunner()
# automatically discover all tests in the current dir of the form test*.py
# NOTE: only works for python 2.7 and later
test_suite = test_loader.discover('.')
# run the test suite
test_runner.run(test_suite)
你不需要配置就能让它工作。基本上有两种主要方法:
快速的方法
重命名测试模块。py
至模块测试。py
(基本上是将\u test
作为后缀添加到特定模块的测试中),python将自动找到它。只需确保将其添加到设置中即可。py
:
from setuptools import setup, find_packages
setup(
...
test_suite = 'tests',
...
)
长途跋涉
以下是如何使用当前目录结构执行此操作:
project/
package/
__init__.py
module.py
tests/
__init__.py
test_module.py
run_tests.py <- I want to delete this
setup.py
在tests/\uuuu init\uuu下。py
,您希望导入unittest
和单元测试脚本test\u模块
,然后创建一个函数来运行测试。在tests/\uuuuu init\uuuuu中。py
,键入如下内容:
import unittest
import test_module
def my_module_suite():
loader = unittest.TestLoader()
suite = loader.loadTestsFromModule(test_module)
return suite
TestLoader
类除了loadestsfrommodule
之外还有其他功能。您可以运行dir(unittest.TestLoader)
来查看其他的,但这是最简单的用法。
由于目录结构是这样的,您可能希望test\u模块
能够导入模块
脚本。您可能已经这样做了,但为了以防万一,您可以包含父路径,以便导入包
模块和模块
脚本。在测试模块的顶部。py
,类型:
import os, sys
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
import unittest
import package.module
...
最后,在设置中。py
,包括测试
模块,并运行您创建的命令,我的模块套件
:
from setuptools import setup, find_packages
setup(
...
test_suite = 'tests.my_module_suite',
...
)
然后运行python安装程序。py测试
。
这是一个有人做为参考的样本。
从构建和分发包与Setupols(强调我的):
test_suite
命名unittest的字符串。TestCase子类(或包含其中一个或多个的包或模块,或此类子类的方法),或命名一个可以在没有参数的情况下调用并返回unittest的函数。测试套件。
因此,在设置中。py
您将添加一个返回TestSuite的函数:
import unittest
def my_test_suite():
test_loader = unittest.TestLoader()
test_suite = test_loader.discover('tests', pattern='test_*.py')
return test_suite
然后,将命令set
指定如下:
setup(
...
test_suite='setup.my_test_suite',
...
)
如果使用py27或py32,解决方案非常简单:
test_suite="tests",
许多标准库不使用类名,如何从命令行运行单个测试用例或将其添加到测试套件中? 这里提出了类似的问题,但所有解决方案都假设测试用例驻留在具有有效类名的文件中。 从unittest运行单个测试。通过命令行测试用例
问题内容: 我刚刚开始学习TDD,并且正在使用Tkinter GUI开发程序。唯一的问题是,一旦调用该方法,测试套件就会挂起,直到关闭窗口。 这是我的代码的示例: 测试Tkinter应用程序的合适方法是什么?还是只是“不”? 问题答案: 您可以做的一件事是在单独的线程中生成mainloop并使用您的主线程运行实际的测试;照看mainloop线程。进行断言之前,请确保检查Tk窗口的状态。 多线程处理
类似于这个问题。然而,当使用ddt时,公认的解决方案不适用于我。 例如: 如果我在终端上运行这个,它就不起作用了
问题内容: 我希望每晚和每次提交svn时都为C#应用程序运行自动化的NUnit测试。 Jenkins-CI可以做到这一点吗? 是否有在线教程或操作指南文档,其中记录了我可以查看的类似设置? 问题答案: 我需要做的正是您要做的,这是我设置Jenkins的方法: 将NUnit插件添加到Jenkins 在您的项目中,转到 配置 -> 构建 -> 添加构建步骤 在下拉菜单中,向下滚动至-> 执行Windo
设置中有两个选项。py和让我很困惑。根据这个网站,使用创建一个指向站点包目录的特殊链接。 人们建议我使用进行新的安装,并且在安装文件进行任何更改后,。 有人能解释一下这些命令的用法吗?
我在mvn中有以下结构。 模块A是所有后续模块(B、C、...)继承的模块。该模块具有通用功能和jUnit/联调用例。它不是Web应用程序。 模块B是一个web应用程序。它依赖于模块B。 模块C是一个web应用程序。它依赖于模块B。 我们的Jersey rest/api代码位于模块A中。通过这种方式,无论我们部署什么模块,我们都可以访问rest/api。 到目前为止,我已经成功地在模块C中配置了M