pytest + yaml 框架 - 参数化读取文件路径优化

发布于:2024-05-10 ⋅ 阅读:(29) ⋅ 点赞:(0)

针对小伙伴提出参数化时读取外部文件,在项目根路径运行没问题,但是进入到项目下子文件夹运行用例,就会找不到文件问题做了优化。
关于参数化读取外部文件相关内容参考前面这篇pytest + yaml 框架 -25.参数化数据支持读取外部文件txt/csv/json/yaml

安装以下版本优化上诉问题

pip install pytest-yaml-yoyo==1.2.5

问题描述

项目层级结构如下

  1. D:\demo\yoyo_yaml

  2. ├── cases/

  3. │ ├── test_f.yml

  4. ├── data/

  5. │ ├── xx.csv

  6. │ ├── yy.csv

test_f.yml 文件内容

  1. config:

  2. name: 参数化读取文件csv

  3. test_p1:

  4. print: ${username}

  5. fixtures: username, password

  6. parameters: ${p('data/xx.csv', False)}

  7. test_p2:

  8. print: ${username}

  9. parameters: ${p('data/yy.csv')}

data 目录下 xx.csv

  1. test1中文,123456

  2. test2,1234562

data 目录下 yy.csv

  1. username,password

  2. test1中文,123456

  3. test2,1234562

在项目根目录D:\demo\yoyo_yaml 下执行 pytest 命令运行用例是没有问题的。
但是进入到 D:\demo\yoyo_yaml\cases 下执行 pytest 命令运行用例会报文件找不到的问题

  1. 2023-06-07 23:02:50 [INFO]: parameters 参数化执行用例

  2. 2023-06-07 23:02:50 [ERROR]: 文件路径不存在: data\xx.csv

  3. 2023-06-07 23:02:50 [INFO]: 取值表达式 p('data/xx.csv', False)

原因是以当前运行的目录为节点,根据相对路径是拼接文件路径, D:\demo\yoyo_yaml\cases 拼接 ‘data/xx.csv’ 所以会找不到文件路径。

路径查找优化

新版本对文件路径做了优化:
1.先根据当前运行的文件目录为节点,拼接文件路径,如果路径不存在看下一条2
2.以项目根路径为节点,拼接文件路径

总体来说就是双保险,如果第一种找不到,就按第二种,两种都找不到就报错:文件路径不存在

新版本D:\demo\yoyo_yaml\cases目录运行日志如下:

  1. 2023-06-07 23:08:07 [INFO]: parameters 参数化执行用例

  2. 2023-06-07 23:08:07 [INFO]: 读取文件路径: D:\demo\untitled6_demo_test\data\xx.csv

  3. 2023-06-07 23:08:07 [INFO]: 取值表达式 p('data/xx.csv', False)

如果测试文件和yaml 用例文件都在cases目录,也能用相对路径找到
项目层级结构如下

  1. D:\demo\yoyo_yaml

  2. ├── cases/

  3. │ ├── test_f.yml

  4. │ ├── aa.csv

  5. ├── data/

  6. │ ├── xx.csv

  7. │ ├── yy.csv

cases/test_f.yml

  1. config:

  2. name: 参数化读取文件csv

  3. test_p1:

  4. print: ${username}

  5. fixtures: username, password

  6. parameters: ${p('data/xx.csv', False)}

  7. test_p2:

  8. print: ${username}

  9. parameters: ${p('data/yy.csv')}

  10. test_p3:

  11. print: ${username}

  12. parameters: ${p('aa.csv')}

aa.csv内容

  1. username,password

  2. test1中文,123456

  3. test2,1234562

在项目根目录D:\demo\yoyo_yaml 和 D:\demo\yoyo_yaml\cases 下执行 pytest 命令都能执行成功。

行动吧,在路上总比一直观望的要好,未来的你肯定会感 谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入扣群: 320231853,里面有各种软件测试+开发资料和技术可以一起交流学习哦。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!


网站公告

今日签到

点亮在社区的每一天
去签到