1

在 Travis CI 上运行 Pytest 时,我收到 Key -Error。请在下面找到我的程序:

import sys
import os
sys.path.append(os.path.dirname(__file__)+"/../")
from src.read_files import VEHICLE_DATA
from src.main import create_parser

def getvehicles(climate):
    '''
       :param climate: type of climate
       :return: Based on climate, return available vehicles
    '''

    bike = VEHICLE_DATA['bike']
    tuktuk = VEHICLE_DATA['tuktuk']
    car = VEHICLE_DATA['car']

    if climate == "Sunny":
        vehicle = [[bike, tuktuk, car], -0.1]
    elif climate == "Rainy":
        vehicle = [[car, tuktuk], 0.2]
    else:
        vehicle = [[car, bike], 0.0]
    return vehicle

对应的pytest如下:

import sys
import os
sys.path.append(os.path.dirname(__file__)+"/../")
from src import traffic_problem_1 as tp
import pytest

@pytest.mark.parametrize('climate, speed',          \
                        [                           \
                            ('Sunny', -0.1),        \
                            ('Windy', 0.0),         \
                            ('Rainy', 0.2)
                        ])
def test_when_climate_sunny_return_all_vechicles(climate, speed):
    crater_speed = tp.getvehicles(climate)
    assert crater_speed[1] == speed

上面的测试在我的本地机器上成功运行。但不是我 Travis CI,请找到 Travis CI 日志的链接:

https://travis-ci.org/pythonprogsnscripts/geekttrustproblems/builds/570241873

如果退伍军人可以提出一些想法,那就太好了

4

1 回答 1

1

os.listdir不保证确定性文件排序;它会因操作系统和文件系统组合而异。从文档

操作系统。列表目录路径='。'

返回一个列表,其中包含path给出的目录中条目的名称。该列表按任意顺序 [...]

在您的情况下,这意味着JSON_FILES[1]它将vehicle_data.json在某些系统和orbit_data.json其他系统上,导致测试失败。解决方案是自己强制执行排序,例如通过排序:

JSON_FILES = sorted(os.listdir('inputdata'))
于 2019-08-10T17:08:31.237 回答