如何在测试期间让 Travis-CI 识别和打开外部文件

Gar*_*689 3 python travis-ci

最后几个失败的构建在我的计算机上通过得很好,但我无法让它们通过 travis。问题来自测试(和其他类似操作)中的几行:https : //github.com/garth5689/pyd2l/blob/master/test/pyd2l_test.py#L15-L20

在我的测试中,由于我有复杂的数据要测试,我已经腌制了这些数据,以便轻松地再次打开它,而不必每次测试时都访问我多次抓取的网站。(随意讨论这种测试策略的优点,但这不是问题的主题。)

class PyD2LMethodsTest(unittest.TestCase):

    def setUp(self):
        with open('./soup_1899_pickle.pkl', 'rb') as soup_pickle: 
            self.soup = pickle.load(soup_pickle)
        with open('./soup_1899_details_pickle.pkl', 'rb') as details_pickle: 
            self.test_details = pickle.load(details_pickle)
        with open('./test_Match_1899_pickle.pkl', 'rb') as test_Match_pickle: 
            self.test_match = pickle.load(test_Match_pickle)
Run Code Online (Sandbox Code Playgroud)

这会导致我的 travis 构建中出现以下一系列错误:

======================================================================
ERROR: test_calculate_reward_rounded_ceil (pyd2l_test.MatchTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/travis/build/garth5689/pyd2l/test/pyd2l_test.py", line 70, in setUp
    with open('./test_Match_1899_pickle.pkl', 'rb') as test_Match_pickle: self.test_= pickle.load(
FileNotFoundError: [Errno 2] No such file or directory: './test_Match_1899_pickle.pkl'
Run Code Online (Sandbox Code Playgroud)

这是目录结构

pyd2l (repo)
|-- pyd2l
|   |-- (actual source files) 
|
+-- test
    |-- pyd2l_test.py   
    |-- soup_1899_details_pickle.pkl
    |-- soup_1899_pickle.pkl
    |-- soup_404_pickle.pkl
    +-- test_Match_1899_pickle.pkl
Run Code Online (Sandbox Code Playgroud)

测试在我的本地机器上运行良好。(我./在测试期间将 加到文件名中,看看我是否可以让它自己工作。我认为环境变量中可能有一些我需要使用的东西,但我不确定。可能有也有可能 travis 不允许酸洗/解酸,但我找不到任何效果。任何帮助表示赞赏。

Travis 构建:https : //travis-ci.org/garth5689/pyd2l/builds

Woo*_*ble 6

./是多余的;该文件的路径已经相对于您当前的工作目录。

问题是您希望它相对于您的测试目录,因此:

import os
# ...

with open(os.path.join(os.path.dirname(__file__), 'soup_1899_pickle.pkl'), 'rb') as soup_pickle:
Run Code Online (Sandbox Code Playgroud)