【python做接口测试的学习记录day6——pytest+yaml+allure自动化测试框架之URL拼接】

本文介绍了如何通过创建config.yaml文件存储URL公共部分,以实现yaml测试用例中只需输入路径即可。通过yaml_util.py和request_util.py的更新,我们可以自动拼接完整URL,简化测试框架中的URL管理,提高工作效率。
摘要由CSDN通过智能技术生成

在之前的测试框架中,可以发现的是,我们的yaml数据中所有的url中的除了路径不同外,其余都是相同的,我们想办法将这一部分自动化,这样的yaml中写用例url的时候就不用再每次都写上域名,只需要输入路径即可

首先我们需要更改下之前的用例yaml文件中的url,将域名删除只留下路径即可,例如:

接下来我们在根目录创建一个config.yam文件,用于存储我们的URL中的公共部分, 这里由于公司相关,我隐藏了域名

base:
  base_test_url: https://test.***
  base_normal_url: https://***

接下来我们需要在yaml_util.py中再写一个读取config.yaml的方法,用于读取我们的url的公共部分:

import os
import yaml

#读取
class YamlUtil:

    def read_yaml(self,key):
        with open(os.getcwd() + '/extract.yaml', encoding='utf-8', mode='r') as f:
            value = yaml.load(f, yaml.FullLoader)
            return value[key]

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

    # 清空
    def clear_yaml(self):
        with open(os.getcwd() + '/extract.yaml', encoding='utf-8', mode='w') as f:
            f.truncate()

    # 读取测试用例
    def read_testcase(self,yaml_name):
        with open(os.getcwd() + '\\testcases\\' + yaml_name, mode='r', encoding='utf-8') as f:
            value = yaml.load(f, yaml.FullLoader)
            return value

    # 读取config.yaml
    def read_config(self,one_node,two_node):
        with open(os.getcwd() + '/config.yaml', encoding='utf-8') as f:
            value = yaml.load(f, yaml.FullLoader)
            return value[one_node][two_node]

 读取之后,我们需要在request_util.py中定义一个_init_()方法来传入我们的url的公共部分:

import requests
import json
from common.yaml_util import YamlUtil

class RequestUtil:

    def __init__(self,two_node):
        self.base_url=YamlUtil().read_config('base',two_node)

    sess= requests.session()

    def send_request(self,method,url,datas=None,**kwargs):
        method=str(method).lower()  #转换小写
        url=self.base_url + url
        res=None
        if method=="get":
            res=RequestUtil.sess.request(method=method,url=url,params=datas,**kwargs)
        elif method=="post":
            if datas and isinstance(datas,dict):
                datas=json.dumps(datas)
            res=RequestUtil.sess.request(method=method, url=url, data=datas, **kwargs)
        else:
            pass
        return res

最后修改下我们的test_login.py,就可以实现啦

 

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小丫么小二郎~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值