接口自動化--獲取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