获取pytest以查看测试脚本的基本目录

时间:2015-12-29 05:07:53

标签: python pytest

在pytest中,我的测试脚本将计算结果与通过

加载的基线结果进行比较
   func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
    {
         let cell:TblCell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! TblCell

         cell.lblRestaurantName.text = items[indexPath.row] as! String

        return cell;

   }

是否有一种非样板方法告诉pytest从脚本的根目录开始查看而不是通过SCRIPTLOC获取绝对位置?

1 个答案:

答案 0 :(得分:3)

如果您只是在寻找使用__file__的pytest等效项,则可以在测试中添加request灯具并使用request.fspath

来自docs

class FixtureRequest
    ...
    fspath
        the file system path of the test module which collected this test.

所以示例可能如下:

def test_script_loc(request):
    baseline = os.path.join(request.fspath.dirname, 'baseline', 'baseline.cvs')
    print(baseline)

如果您想要避免使用样板,那么您不会从这方面获得太多收益(假设我理解您的意思是非模板')

就我个人而言,我认为使用夹具更明确(在pytest惯用语中),但我更喜欢将请求操作包装在另一个夹具中,所以我知道我只是通过查看方法来专门抓取样本测试数据测试的签名。

这是我使用的一个片段(修改后与您的问题相匹配,我使用子目录层次结构):

# in conftest.py
import pytest

@pytest.fixture(scope="module")
def script_loc(request):
    '''Return the directory of the currently running test script'''

    # uses .join instead of .dirname so we get a LocalPath object instead of
    # a string. LocalPath.join calls normpath for us when joining the path
    return request.fspath.join('..') 

样本用法

def test_script_loc(script_loc):
    baseline = script_loc.join('baseline/baseline.cvs')
    print(baseline)