封装篇--接口自动化测试框架之利用yaml文件结合pytest框架(接口关联封装)

好久不见!!好久都没有更新了(太懒啦)

正题:我在学习的自动化测试的路上慢慢的接触了"自动化测试框架"的概念,本质上就是封装的思想,是一系列思想的集合,是将各种自动化测试框架思想集合应用去搭建成的一个分层组织。我们可以先从简单的部分入手,,今天就给大家分享一个我个人认为好理解好掌握的利用yaml文件对接口关联做一个封装。

 一、思路分析

我们知道一般在接口测试中,有很多的接口都是有关联性的,这其中呢也会有很多中间变量的产生,比如我要获取到一个接口的信息他是需要token值的,换句话说就是要先获取到token值,那我们总不能每个接口都要获取一遍吧,这样会造成多次请求浪费资源。

所有我们的目的就是利用yaml文件,把我们所需要的中间值传入公共yaml文件中,这样会方便读取,然后每个接口所需要的信息也可以存放在它自己独有的yaml文件中。

二、公共方法的封装

1.首先我们新建一个commons包

 request_util.py:统一的请求封装

这个思路很简单就不多说了,下面贴上代码!

import requests
'''
请求封装
'''

class RequestUtil:

    sess = requests.session()  # 初始化一个session对象

    def all_send_request(self,method,url,**kwargs):
       print("----------接口开始------------")
       res =  RequestUtil.sess.request(method,url,**kwargs)
       print(res.text)
       return res

2.基于yaml的读取、写入、清空对接口测试用例进行同一封装 

import os
import yaml


class YamlUtil:
    # 获取当前文件的目录
    cur_path = os.path.abspath(os.path.dirname(__file__))
    print(cur_path)

    # 获取根目录
    root_path = cur_path[:cur_path.find("Project\\") + len("Project\\")]
    print(root_path)

    # 读取
    def read_yaml(self, key):
        with open(YamlUtil.root_path + "/extract.yaml", encoding="utf-8") as f:
            value = yaml.load(stream=f, Loader=yaml.FullLoader)
            return value[key]

    # 写入
    def write_yaml(self, data):
        with open(YamlUtil.root_path + "/extract.yaml", encoding="utf-8", mode="a") as f:
            yaml.dump(data, stream=f, allow_unicode=True)

    # 清空
    def clean_yaml(self):
        with open(YamlUtil.root_path + "/extract.yaml", encoding="utf-8", mode="w") as f:
            f.truncate()

    # 读
    def read_test_yaml(self, yaml_path):
        with open(YamlUtil.root_path + yaml_path, encoding="utf-8") as f:
            value = yaml.load(stream=f, Loader=yaml.FullLoader)
            return value

读取和写入没什么好说的,在根目录下新建extract.yaml。清空呢就是在每次请求之前要把存放变量的yaml文件进行清空,防止它有多余的变量,影响读取值。既然说到这里就还需要一个在每次请求之前调用的一个方法。

import pytest

from commons.yaml_util import YamlUtil


# scope='session'表示在整个执行的过程当中只会执行一次
@pytest.fixture(scope='session', autouse=True)
def execute_sql():
    YamlUtil().clean_yaml()  # 请求之前清空

 三、请求信息的封装

做过接口测试都知道,我们在请求的时候大部分都要携带一些参数信息,通过接口文档或者是自己抓包都可以得到相关信息头。那其实这些参数也是可以通过yaml文件进行存储的。下面举个例子。

 这是一条获取token的接口,所需要的信息看下面yaml文件(yaml文件有自己的读写模式,这个大家可以去百度一下)

import pytest

from commons.request_util import RequestUtil
from commons.yaml_util import YamlUtil


class Test:

    # 获取token接口
    @pytest.mark.parametrize("par", YamlUtil().read_test_yaml("/testcase_interface/get_login_token.yaml"))
    def test_get_login_token(self, par):
        url = par["request"]["url"]
        method = par["request"]["method"]
        data = par["request"]["data"]
        headers = par["request"]["headers"]
        res = RequestUtil().all_send_request(method=method, url=url, json=data, headers=headers)
        result = res.json()
        result_data = (result['data'])
        print(result_data['token'])
        dic = {"X-Litemall-Token": result_data['token']}
        YamlUtil().write_yaml(dic)
-
  title: 调用登录接口获取token
  request:
    method: post
    url: https://litemall.hogwarts.ceshiren.com/wx/auth/login
    data:
      username: qwer
      password: 1234
    headers:
      content-type: application/json;charset=UTF-8
  validate: null

可以看到的是这条接口利用这个pytest框架和上面我们写到的公共读取方法,读取到了属于它自己的yaml文件(建议yaml名字和接口请求方法名字可以起一样的,并且我们读取到的token值也存放到了extract.yaml中了。

 想读取token这样就可以

"X-Litemall-Token": YamlUtil().read_yaml("X-Litemall-Token")

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值