接口自动化--获取token用于接口请求


一、准备

工具:python+requests+unittest

二、接口文档

  • 查询用户信息

三、编写脚本

从接口文档可知,想要查询用户信息,需要获取用户token

(1)编写一个登录接口,获取token,考虑token是后续接口中公有部分,将其独立封装存放在get_token.py模块中

通常登录接口的中body参数有username和passport即可,但我们项目还需要获取一个clien token作为登录接口的请求头参数,所以这里我们先获取clien token,再将clien token用于B登录接口的请求头中

import requests
from OutPuts.variable import *


def get_client_token():
    """
    获取client_token
    :return:
    """
    url = f'{UAT_URL}/passport/api/token'
    header = {"Content-Type": "application/json", "Authorization": CLIENT}
    param = {"grant_type": "client_credentials"}
    body = {
        "state": "xyz",
    }
    res = requests.post(url, params=param, headers=header, json=body).json()
    return res['access_token']


def b_login():
    """
    获取B登录后的token
    :return:
    """
    client_token = get_client_token()
    print(f"get client_token is:{client_token}")
    login_url = f'{UAT_URL}/passport/api/token'
    login_header = {"Content-Type": "application/json", "Authorization": f"Bearer {client_token}"}
    login_param = {"grant_type": "password"}
    login_body = {
        "username": B_USERNAME,
        "password": MOBILE_PASSWORD,
        "scope": "basic",
        "state": "xyz"
    }
    login_ret = requests.post(login_url, headers=login_header, json=login_body, params=login_param).json()
    return login_ret["access_token"]

 

(2)获取账号B的token后,就可以查出账号B的用户信息,存放在case:test_api.py模块

为了提高脚本的可读性,在这里引用了unittest框架,每次执行case前先获取一次token,保证每次执行case都使用了最新的token

import unittest
from OutPuts.get_token import *


class TestApi(unittest.TestCase):

    def setUp(self):
        self.token = b_login()  # 获取B登录的token
        print(f"User_B_token is:{self.token}")

    def test_info(self):
        """
        查询用户信息的接口
        :return:
        """
        self.url = f'{UAT_URL}/uims/api/user'
        self.header = {"Content-Type": "application/x-www-form-urlencoded", "Authorization": f"Bearer {self.token}"}
        self.res = requests.get(self.url, headers=self.header).json()
        self.assertEqual(B_USERNAME, self.res.get('mobile'))  # 断言B的手机号

    def tearDown(self):
        pass


if __name__ == '__main__':
    unittest.main()

****(这里常量参数放在一个单独的模块,考虑项目隐私安全,不便于公开)


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM