也路撒冷 2024-04-03 18:14 采纳率: 50%
浏览 22
已结题

pytest测试中文件路径问题

使用pytest运行和不使用pytest运行,对于同一个文件打开,路径却不一样,而且是一个可以运行,一个不可以。具体如下:

我的文件结构

img

不使用pytest运行时:

不需要指定路径,如果是with open('ddt/data.json') as f,则会报错

import json

def get_data():
    with open('data.json') as f:
        #f返回字典类型
        continer = json.load(f)
        #print(continer)
        data = []
        data.extend(continer['keys'])
        return data

if __name__ == '__main__':
    print(get_data())

使用pytest时:

要这样


def get_data():
    with open('ddt/data.json') as f:
        #f返回字典类型
        continer = json.load(f)
        #print(continer)
        data = []
        data.extend(continer['keys'])
        return data


如果和上面一样,使用with open('data.json') as f,则会报错

ddt/test_json.py:None (ddt/test_json.py)
ddt\test_json.py:13: in <module>
    @pytest.mark.parametrize('name',get_data())
ddt\test_json.py:5: in get_data
    with open('data.json') as f:
E   FileNotFoundError: [Errno 2] No such file or directory: 'data.json'

但ddt/data.json也不是绝对路径,绝对路径是D:\File\python\jpess_project\testcases\ddt\data.json,这是为什么呢?
这个问题也在其他地方遇到过,保存文件时,不使用pytest,可正常报错,使用pytest就无法保存。

  • 写回答

3条回答 默认 最新

  • 码农阿豪@新空间代码工作室 Java领域优质创作者 2024-04-03 18:14
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    问题描述:使用pytest运行和不使用pytest运行,对于同一个文件打开,路径却不一样,一个可以运行,一个不可以。 原因:使用pytest时,当前目录会改变,而不使用pytest时当前目录是文件所在目录。 解决方法:使用绝对路径,可以通过os模块来获取当前文件的绝对路径,然后再拼接上要打开的文件名。 示例代码:
    import json
    import os
    def get_data():
        data_file = os.path.join(os.path.dirname(__file__), 'data.json')
        with open(data_file) as f:
            container = json.load(f)
            data = []
            data.extend(container['keys'])
            return data
            
    if __name__ == '__main__':
        print(get_data())
    

    解释:os.path.dirname(file)表示获取当前文件所在目录的绝对路径,然后使用os.path.join拼接上文件名data.json,得到完整的文件路径。再使用with open打开文件即可。无论使用pytest与否,都可以正常打开文件。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月15日
  • 已采纳回答 4月7日
  • 创建了问题 4月3日

悬赏问题

  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境
  • ¥30 关于#java#的问题,请各位专家解答!
  • ¥30 vue+element根据数据循环生成多个table,如何实现最后一列 平均分合并
  • ¥20 pcf8563时钟芯片不启振