python接口自动化系列(04):读取数据文件并注入到测试方法

本系列汇总,请查看这里https://www.cnblogs.com/uncleyong/p/18033074

实现目标

把用例yaml文件中数据读取出来,依次把每条用例数据传给测试方法。

安装模块

安装操作yaml的模块pyyaml

pip install pyyaml

测试数据文件放data目录

case.yaml

内容:

---
- epic: 全栈测试笔记
  feature: user
  story: register
  title: 用户注册成功
  description: 这是用户注册成功的用例
  severity: blocker
  request:
    url: /qzcsbj/user/register
    method: post
    headers: {'Content-Type':'application/json'}
    cookies:
    files:
    params: {"username":"#{username}","password":"#{password_correct}","realName":"#{username}","sex":"1","birthday":"1990-06-16","phone":"13500000006","utype":"1","adduser":"#{username}"}
  initSql: ["delete from user where username = '#{username}';"]
  globalVariables:
  assertFields: $.msg=注册成功;
 
- epic: 全栈测试笔记
  feature: user
  story: login
  title: 用户登录成功
  description: 这是用户登录成功的用例
  severity: blocker
  request:
    url: /qzcsbj/user/login
    method: post
    headers: {'Content-Type':'application/json'}
    cookies:
    files:
    params: {"username":"#{username}", "password":"#{password_correct}"}
  initSql:
  globalVariables: token=$.data.token;
  assertFields: $.msg=登录成功;
 
- epic: 全栈测试笔记
  feature: product
  story: add
  title: 添加商品成功
  description: 这是添加商品成功的用例
  severity: blocker
  request:
    url: /qzcsbj/product/add
    method: post
    headers: {'Content-Type':'application/json'}
    cookies:
    files:
    params: {"product":{"price":9999,"productName":"#{productname}"},"token":"${token}"}
  initSql: ["delete from product where product_name = '#{productname}';"]
  globalVariables:
  assertFields: $.msg=添加商品成功;
 
- epic: 全栈测试笔记
  feature: product
  story: findByName
  title: 查询商品成功
  description: 这是查询商品成功的用例
  severity: normal
  request:
    url: /qzcsbj/product/findByName
    method: get
    headers: {'Content-Type':'application/json'}
    cookies:
    files:
    params: {"name":"#{productname}"}
  initSql:
  globalVariables:
  assertFields: $.msg=查询商品成功;
 
- epic: 全栈测试笔记
  feature: product
  story: findByName
  title: 查询商品失败
  description: 这是查询商品失败的用例
  severity: normal
  request:
    url: /qzcsbj/product/findByName
    method: get
    headers: {'Content-Type':'application/json'}
    cookies:
    files:
    params: {"name":"#{productname}"}
  initSql:
  globalVariables:
  assertFields: $.msg=查询商品成功啦;

项目配置文件

conf下创建settings.py,定义测试用例数据文件路径

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author: 韧
# @wx: ren168632201
# @Blog: https://www.cnblogs.com/uncleyong/

import os
import logging
logger = logging.getLogger(__name__)

# 获取项目路径
BASE_PATH = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# 定义测试用例数据文件路径
CASE_DATA_PATH = os.path.join(BASE_PATH,'data/case.yaml')

创建工具类

utils下创建yaml_tool.py,读取yaml文件中的数据

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author: 韧
# @wx: ren168632201
# @Blog: https://www.cnblogs.com/uncleyong/

import yaml

# 读取yaml中用例/变量数据
def read_data_from_yaml(file_path):
    f = open(file_path, "r", encoding="utf-8")
    res = yaml.load(f, yaml.FullLoader)
    return res

修改测试类

test_cases.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author: 韧
# @wx: ren168632201
# @Blog: https://www.cnblogs.com/uncleyong/

import pytest
import logging
logger = logging.getLogger(__name__)
from conf.settings import CASE_DATA_PATH
from utils.yaml_tool import read_data_from_yaml

class TestCase:
    @pytest.mark.parametrize("casedata", read_data_from_yaml(CASE_DATA_PATH))
    def test_case(self, casedata):
        logger.info(f"---当前测试用例数据是:{casedata}")
        assert 1 == 1

运行结果

可以看到,测试用例数据已经读取并成功传给测试方法。

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值