前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >pytest + yaml 框架 -33.参数化读取文件路径优化

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

作者头像
上海-悠悠
发布2023-08-22 11:33:26
2380
发布2023-08-22 11:33:26
举报
文章被收录于专栏:从零开始学自动化测试

前言

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

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

代码语言:javascript
复制
pip install pytest-yaml-yoyo==1.2.5

问题描述

项目层级结构如下

代码语言:javascript
复制
D:\demo\yoyo_yaml
├── cases/
│   ├── test_f.yml
├── data/
│   ├── xx.csv
│   ├── yy.csv

test_f.yml 文件内容

代码语言:javascript
复制
config:
    name: 参数化读取文件csv

test_p1:
    print: ${username}
    fixtures: username, password
    parameters: ${p('data/xx.csv', False)}

test_p2:
    print: ${username}
    parameters: ${p('data/yy.csv')}

data 目录下 xx.csv

代码语言:javascript
复制
test1中文,123456
test2,1234562

data 目录下 yy.csv

代码语言:javascript
复制
username,password
test1中文,123456
test2,1234562

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

代码语言:javascript
复制
2023-06-07 23:02:50 [INFO]: parameters 参数化执行用例
2023-06-07 23:02:50 [ERROR]: 文件路径不存在: data\xx.csv
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目录运行日志如下:

代码语言:javascript
复制
2023-06-07 23:08:07 [INFO]: parameters 参数化执行用例
2023-06-07 23:08:07 [INFO]: 读取文件路径: D:\demo\untitled6_demo_test\data\xx.csv
2023-06-07 23:08:07 [INFO]: 取值表达式 p('data/xx.csv', False)

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

代码语言:javascript
复制
D:\demo\yoyo_yaml
├── cases/
│   ├── test_f.yml
│   ├── aa.csv
├── data/
│   ├── xx.csv
│   ├── yy.csv

cases/test_f.yml

代码语言:javascript
复制
config:
    name: 参数化读取文件csv

test_p1:
    print: ${username}
    fixtures: username, password
    parameters: ${p('data/xx.csv', False)}

test_p2:
    print: ${username}
    parameters: ${p('data/yy.csv')}

test_p3:
    print: ${username}
    parameters: ${p('cases/aa.csv')}

aa.csv内容

代码语言:javascript
复制
username,password
test1中文,123456
test2,1234562

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-06-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 从零开始学自动化测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 问题描述
  • 路径查找优化
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档