Unit testing 让Travis CI为特定的PyPI包运行单元测试

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

我编写了一个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 *
except ImportError:
  from .pycurl import *
测试C扩展的一种简单方法是安装扩展,然后为Python库运行单元测试。有足够的覆盖范围,因此如果在安装了C扩展的情况下单元测试通过,我可以确信C扩展的行为与纯Python实现相同

然而,这被证明是相当棘手的自动化

我想让Travis CI做这样的事情:

  • pip安装-e.
    (即,将
    pyota[ccurl]
    安装到venv中)
  • pyota
    sourcedist安装到cwd中(sourcedist包括单元测试)
  • nosets-pyota/tests
    (从本地源区运行单元测试)
  • 然而,我花了很长时间才弄明白如何完成第2步


    我如何指示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