Python+requests+pytest+allure封装接口自动化2-token问题解决以及业务接口封装

一、业务接口封装之-portal登录接口

在api目录中按照实际的业务,新建portal和manage目录,在portal目录中新增一个portalLogin目录,会后在portalLogin目录中新建一个portalLoginApi.py,编写封装portal端登录的接口。

portal登录接口详细的封装代码和解析如下:

from common.requestsClient import RequestsClient


# 登录接口集成封装的requests接口类
class PortalLoginApi(RequestsClient):
    def __init__(self):
        # 调用父类的初始化数据函数
        super().__init__()
        # 定义登录接口需要传的参数
        self.url = 'http://localhost:8888/community/flogin'
        self.json = {
            "userName": "admin",
            "password": "123456"
        }
        self.method = 'post'


if __name__ == '__main__':
    resp = PortalLoginApi().sendRequest()
    print(resp.json())

二、业务接口封装之-解决token传参问题

主要的思路是,编写一个portal端的BaseportalApi类,该类继承RequestsClient,定义一个portalToken的变量,然后把portalToken放到请求头的token中,其他需要传token的接口就只需要继承BaseportalApi类,BasePortalApi接口的TOKEN哪里来呢?这就需要我们先调用一次登录接口的API的时候,把登录接口的API的token赋值给BaseportalApi的portalToken,这时候BaseportalApi的portalToken就带有了登录API的token,发起HTTP请求,其请求头就会有token值。

1、先在api目录中新建一个,baseApi.py。

from common.requestsClient import RequestsClient


class BaseportalApi(RequestsClient):
    # 初始定义是个空值,那么在整个框架层面,必须先完成该属性的赋值
    portalToken = ""

    def __init__(self):
        super().__init__()
        self.host = 'http://localhost:8888/community'
        self.headers = {
            'token': self.portalToken
        }

2、portal登录API的修改

PortalLoginApi改为继承BasePortalApi,这样就可以使用BasePortalApi.host,提高代码的高内聚,低耦合

from api.base_api import BasePortalApi


# 登录接口集成封装的requests接口类
class PortalLoginApi(BasePortalApi):
    portalToken = ''

    def __init__(self):
        # 调用父类的初始化数据函数
        super().__init__()
        # 定义登录接口需要传的参数1
        self.url = f'{self.host}/flogin'
        self.json = {
            "userName": "admin",
            "password": "123456"
        }
        self.method = 'post'


if __name__ == '__main__':
    resp = PortalLoginApi().sendRequest()
    print(resp.json())

三、业务接口封装之-发布贴子接口

在portal新建一个portalArticle目录,然后新建一个createArticleApi.py文件,封装帖子相关的接口。

主要的思路是发帖的接口BasePortalApi类,PortalLoginApi登录之后,将portal登录的api提取出来给BasePortalApi的portalToken变量,这样SendArticleApi的请求头就有BasePortalApi的token了 。

from api.base_api import BasePortalApi
from api.portal.portalLogin.portalLoginApi import PortalLoginApi


# 发贴接口继承BaseportalApi的类,便于解决token的传参
class SendArticleApi(BasePortalApi):
    def __init__(self, title, author, content, createUser):
        # 调用父类的初始化数据函数
        super().__init__()
        # 定义发贴接口需要传的参数1
        self.url = f'{self.host}/article/createArticle'
        self.json = {
            "title": title,
            "BoardId": None,
            "commentStatus": 0,
            "slideshow": 0,
            "top": 0,
            "author": author,
            "content": content,
            "createUser": createUser,
            "attachmentList": [],
            "selectTagList": [
                1
            ],
            "boardId": 1
        }
        self.method = 'post'


if __name__ == '__main__':
    # 登录portalAPI
    resp = PortalLoginApi().sendRequest()
    print(resp.json()['data']['token'])
    # 将portal登录的api提取出来给BasePortalApi的portalToken变量
    BasePortalApi.portalToken = resp.json()['data']['token']
    resp1 = SendArticleApi('标题', '超级管理员', '内容', '1').sendRequest()
    print(resp1.json())
    print(resp1.headers)

其他接口的封装方式同理,请大家自己根据自己的业务进行封装;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值