前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >pytest+requests+allure实现接口自动化测试系列(3)-yaml实现数据驱动

pytest+requests+allure实现接口自动化测试系列(3)-yaml实现数据驱动

作者头像
搁浅同学
发布2022-07-21 14:59:48
9471
发布2022-07-21 14:59:48
举报

接着上一篇继续分享

我们都知道pytest的参数化常用的方式是通过装饰器

@pytest.mark.paramtise来实现参数化,但是数据还是主要写在代码里面,这次分享的是通过读取yaml文件,来实现参数

一、yaml文件

yaml文件是一种标记语言,它使用空白符号缩进,使看起很清晰明了,特别适合用来表达或编辑数据结构、各种配置文件等,yaml的文件的后缀为.yml,比如test.yml

yaml支持多种数据类型,对象、数组、纯量,yaml的格式是通过key: value方式进行,示例yaml文件格式如下:

代码语言:javascript
复制
     -
      method : post
      url: "https://api2.mubu.com/v3/api/user/phone_login"
      data:
        phone: "13528xxxxx"
        password: "Aa123456"
        callbackType: 0
  -
      method: post
      url: "https://api2.mubu.com/v3/api/user/phone_login"
      data:
        phone: "135288728xxxx"
        password: "Aa1234568"
        callbackType: 0

二、python读取yaml文件

python读取yaml文件,python给我们提供了一个第三方的库pyaml,通过pip命令安装

代码语言:javascript
复制
pip install pyaml

读取yaml文件示例代码如下:

代码语言:javascript
复制
#!/usr/bin/python
# -*- coding: utf-8 -*-
import yaml

with open('login.yml', encoding="utf-8") as f:
    yaml_data = yaml.safe_load(f)
    print(yaml_data)

#读取后的返回的内容如下:
[{'method': 'post', 'url': 'https://api2.mubu.com/v3/api/user/phone_login', 'data': {'phone': '13528xxxxx', 'password': 'Aa123456', 'callbackType': 0}}, {'method': 'post', 'url': 'https://api2.mubu.com/v3/api/user/phone_login', 'data': {'phone': '135288728xxxx', 'password': 'Aa1234568', 'callbackType': 0}}]
读取出来的数据是一个列表,列表里面每一项是一个字典

# 我们将其封装成一个方法
def read_yaml(path):
    with open(path, encoding="utf-8") as f:
        yaml_data = yaml.safe_load(f)
        return yaml_data

三、结合pytest实现读取yaml参数化

示例代码

代码语言:javascript
复制
#!/usr/bin/python
# -*- coding: utf-8 -*-
import pytest
from request_handler import request_handler
from yamlRead import read_yaml

class Testrequests:
    @pytest.mark.parametrize('test_data', read_yaml('login.yml'))
    def test_requests(self, test_data):
        url = test_data['url']
        method = test_data['method']
        data = test_data['data']
        r = request_handler(method, url, data)
        print(r.json())
        assert r.status_code == 200

再次执行该测试脚本,实际上运行了两次,实现了参数化。效果如下:

今天的内容就分享到这里,明天分享logging日志。

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

本文分享自 暴走的软件测试Tester 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档