Unit testing 让Travis CI为特定的PyPI包运行单元测试
我编写了一个C扩展,旨在提高Python库的性能。使用pip额外安装扩展:Unit testing 让Travis CI为特定的PyPI包运行单元测试,unit-testing,pip,travis-ci,Unit Testing,Pip,Travis Ci,我编写了一个C扩展,旨在提高Python库的性能。使用pip额外安装扩展: # Install the library by itself: pip install pyota # Install the Python library w/ C extension: pip install pyota[ccurl] Python库更喜欢C扩展(如果有的话),但它将依赖于纯Python实现: # iota/crypto/__init__.py try: from ccurl import
# Install the library by itself:
pip install pyota
# Install the Python library w/ C extension:
pip install pyota[ccurl]
Python库更喜欢C扩展(如果有的话),但它将依赖于纯Python实现:
# iota/crypto/__init__.py
try:
from ccurl import *
except ImportError:
from .pycurl import *
测试C扩展的一种简单方法是安装扩展,然后为Python库运行单元测试。有足够的覆盖范围,因此如果在安装了C扩展的情况下单元测试通过,我可以确信C扩展的行为与纯Python实现相同
然而,这被证明是相当棘手的自动化
我想让Travis CI做这样的事情:
pip安装-e.
(即,将pyota[ccurl]
安装到venv中)pyota
sourcedist安装到cwd中(sourcedist包括单元测试)nosets-pyota/tests
(从本地源区运行单元测试)我如何指示Travis CI通过pip下载源代码发行版,以便它可以运行单元测试?这感觉有点像蛮力解决方案(老实说,这感觉好像我试图解决错误的问题),但此配置让Travis下载Python库并运行单元测试:
# .travis.yml
...
script:
- pip install nose mock
- 'pip download --no-deps --no-binary :all: --dest pyota --pre pyota'
- tar -zxf pyota/PyOTA-*.tar.gz -C pyota --strip-components=1
- nosetests pyota/test
当下载完成后,我无法预测归档文件的名称,所以我选择了glob