最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python接口自動化之使用token傳入到header消息頭中

 更新時(shí)間:2023年08月17日 11:31:38   作者:愛測試的小浩  
這篇文章主要介紹了python接口自動化之使用token傳入到header消息頭中問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

python接口自動化之token傳入到header消息頭中

(1)創(chuàng)建登錄請求獲取token

#登錄界面的測試用例類
#導(dǎo)入日志類便于設(shè)置日志信息
from Logs.Log import Logger
#導(dǎo)入配置文件類讀取公共數(shù)據(jù)
from Readini.Read import Readini
#導(dǎo)入excel類便于讀取excel中的數(shù)據(jù)
from DataExcel.readExcel import ExcelUtil
#導(dǎo)入request包
import requests
import json
from Public.PageObject import SendRequest
#導(dǎo)入json包
import unittest
import json
from builtins import str
#設(shè)置讀取登錄中相關(guān)參數(shù)
excel = ExcelUtil(Readini().get_ini_value('Excel','exccelini')).dict_data()
def  token():
    #設(shè)置消息頭信息
     header=eval(excel[0]['header'])
     # 設(shè)置url數(shù)據(jù)
     url = excel[0]['Url']
    #設(shè)置參數(shù)信息
     param=excel[0]['payload']
     # 將設(shè)置的參數(shù)信息轉(zhuǎn)換為json格式的數(shù)據(jù)
     #設(shè)置請求類型
     type=excel[0]['Method']
    #發(fā)送post登錄請求
     response=SendRequest().send_request(type,url,data=param,header=header)
     #獲取token數(shù)據(jù)
     token=response.json()['data']['access_token']
     #將token數(shù)據(jù)轉(zhuǎn)換為字符串的格式
     return str(token)

(2)創(chuàng)建unittest公共初始化類并傳入獲取的token數(shù)據(jù)

from selenium import webdriver
import unittest
#創(chuàng)建unitest初始化公共類
from Logs.Log import Logger
log=Logger('接口自動化執(zhí)行結(jié)果').getlog()
from TOKEN.PublicToken import token
import json
class TestBase(unittest.TestCase):
    #接口初始化開始
    @classmethod
    def setUpClass(cls):
        log.info('接口自動化測試開始')
        #傳入獲取的token作為初始化的token數(shù)據(jù)
        cls.token=token()
    #接口初始化結(jié)束
    @classmethod
    def tearDownClass(cls):
        log.info('接口自動化測試結(jié)束')
if __name__ == '__main__':
    unittest.main() #主函數(shù)  用于執(zhí)行編寫好的程序

(3)向header中傳入初始化時(shí)獲取的token

導(dǎo)入日志類便于設(shè)置日志信息
from Logs.Log import Logger
#導(dǎo)入配置文件類讀取公共數(shù)據(jù)
from Readini.Read import Readini
#導(dǎo)入excel類便于讀取excel中的數(shù)據(jù)
from DataExcel.readExcel import ExcelUtil
#設(shè)置讀取登錄中相關(guān)參數(shù)
excel = ExcelUtil(Readini().get_ini_value('Excel','exccelini')).dict_data()
#設(shè)置日志類型參數(shù)
log = Logger('登錄接口日志執(zhí)行結(jié)果').getlog()
#繼承unittest初始化類
from ChanDao.TestBase import TestBase
#導(dǎo)入request包
import requests
from Public.PageObject import SendRequest
#導(dǎo)入json包
import unittest
import json
from Readini.Read import Readini
class Pinlun(TestBase):
  def  test_1_pinglun_success(self):
     '''登錄成功'''
    #設(shè)置消息頭信息
     header=eval(Readini().get_ini_value('header','headers'))
     #eval(excel[0]['header'])
     #像headers頭中添加token信息
     header['Admin-Authorization']=self.token
     log.info(header)
     # 設(shè)置url數(shù)據(jù)
     url ='http://localhost:8090/api/admin/posts/comments'
     #log.info('退出的url地址是:' + url)
     #設(shè)置參數(shù)信息
     param={'page':'0','size':'10','keyword':'68'}
     # 將設(shè)置的參數(shù)信息轉(zhuǎn)換為json格式的數(shù)據(jù)
    # log.info(param)
     #設(shè)置請求類型
     type='get'
     log.info(type)
    #發(fā)送get登錄請求
     response=SendRequest().send_request(type,url,param,header=header)
     print(response.json())
    #獲取登錄響應(yīng)狀態(tài)碼,做斷言
     # self.assertEqual(response.status_code,excel[0]['StatusCode'])
     # log.info('響應(yīng)狀態(tài)碼為200,登錄成功')
#設(shè)置主函數(shù)執(zhí)行編寫的登錄腳本
if __name__ == '__main__':
    unittest.main()

注意:

1.獲取token需要調(diào)通登錄接口

2.將token傳入到unittest的Setup函數(shù)中

3.最后將token傳入到header中

python接口自動化之token的處理

提取token

1、json解析提取

# -*- coding:utf-8 -*-
import requests
host = ""
user = ""
pwd = ""
url = host + "/pub/api/v1/web/web_login"
body = {
    "phone": user,
    "pwd": pwd
}
r = requests.post(url=url, data=body).json()  # .json() 就是 json 解析,把json格式轉(zhuǎn)為字典
token = r["data"]["token"]  # 字典取值
print(token)

2、正則提取json

# -*- coding:utf-8 -*-
import requests, re
host = ""
user = ""
pwd = ""
url = host + "/pub/api/v1/web/web_login"
body = {
    "phone": user,
    "pwd": pwd
}
r = requests.post(url=url, data=body).text
print(r)
token = re.findall('"token":"(.+?)"', r)
token = token[0]  # 正則取出來的值是 列表 類型,所以要進(jìn)行列表取值
print(token)

結(jié)合框架使用token

python里面有個(gè)全局變量global,但這個(gè)只是針對于在同一個(gè).py里才有效,跨腳本就不起作用了。

整體的思路:

  • 1、登錄后返回 token,把 token 寫入 yaml 文件中,yaml 文件放在公共模塊 commen 中
  • 2、需要 token 的時(shí)候(一般是調(diào)用寫用例的時(shí)候),在初始化中讀取 yaml 文件中最新的 token 值
  • 3、每個(gè)用例的 package 執(zhí)行的時(shí)候去調(diào)用獲取 token
  • 4、最后執(zhí)行所有用例,生成報(bào)告,發(fā)送郵件等

所以先把讀寫 yaml 的方法封裝好

headle.py

# -*- coding:utf-8 -*-import os, yaml
defwrite_yaml(token):
    cur = os.path.dirname(os.path.realpath(__file__))  # 獲取當(dāng)前路徑
    yaml_path = os.path.join(cur, "token.yaml")  # 獲取yaml文件的路徑print(yaml_path)
    t = {"token": token}  # 寫入的內(nèi)容withopen(yaml_path, 'w', encoding='utf-8') as f:
       yaml.dump(t, stream=f, allow_unicode=True)
defget_yaml(yaml_file):
    # yaml_file = "D:\\code\\api_test\\commen\\token.yaml"
    f = open(yaml_file, 'r', encoding='utf-8')
    cfg = f.read()
    d = yaml.load(cfg, Loader=yaml.FullLoader)
    """
    用load轉(zhuǎn)字典
    yaml5.1版本后棄用了yaml.load(file)這個(gè)用法,因?yàn)橛X得很不安全,5.1版本之后就修改了需要指定Loader,通過默認(rèn)加載器(FullLoader)禁止執(zhí)行任意函數(shù)
    Loader=yaml.FullLoader 加上這行代碼,告警就沒了
    """
    d = d["token"]
    return d
if __name__ == '__main__':
    r = write_yaml("token的值")

封裝接口的時(shí)候,把 token 設(shè)置成變量

user.py

# -*- coding:utf-8 -*-import requests
defuser_info(host, token):
    url = host + '/pub/api/v1/web/user_info'
    headers = {"token": token}  # token 放在請求頭
    r = requests.get(url=url, headers=headers)
    return r

編寫用例的時(shí)候先獲取 yaml 文件中 token 的值

test_user_info.py

# -*- coding:utf-8 -*-from interface.user import user_info
from commen.headle_token import *
import unittest, os
current_path = os.path.dirname(os.path.realpath(__file__))  # 獲取當(dāng)前路徑# 獲取 token 的路徑
token_path = os.path.join(current_path, "commen")
token_path = os.path.join(token_path, "token.yaml")
classTestUserInfo(unittest.TestCase):
    @classmethoddefsetUpClass(cls):
        cls.token = get_yaml(token_path)
        print("獲取token")
        print(cls.token)
    deftest_user_info_success(self):
        r = user_info("https://api.xdclass.net", self.token)
        print(r.text)
if __name__ == '__main__':
    unittest.main()

主程序

  • 1、登錄返回token
  • 2、token 寫入 yaml 文件
  • 3、執(zhí)行用例初始化的時(shí)候先獲取 token
  • 4、執(zhí)行用例生成報(bào)告

run_case_report.py

# -*- coding:utf-8 -*-
import unittest, os
from commen import HTMLTestRunner
from interface.login import login
from commen.headle_token import *
current_path = os.path.dirname(os.path.realpath(__file__))
case_path = os.path.join(current_path, "case")
report_path = os.path.join(current_path, "report")
report = os.path.join(report_path, "report.html")
def all_case():
    discover = unittest.defaultTestLoader.discover(case_path,
                                                   pattern='test*.py')
    print(discover)
    return discover
def run_case_report():
    fb = open(report, "wb")
    runner = HTMLTestRunner.HTMLTestRunner(
        stream=fb,
        title="xx項(xiàng)目測試報(bào)告",
        description="xx項(xiàng)目的測試報(bào)告"
    )
    runner.run(all_case())
    fb.close()
if __name__ == '__main__':
    # 調(diào)用登錄獲取token
    token = login("host", "登錄的賬號", "密碼")
    # 把token寫入 yaml 文件
    write_yaml(token)
    # 執(zhí)行用例的時(shí)候會讀取 yaml 中的token,case文件下 test_user_info.py 的
    run_case_report()

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

石景山区| 宜宾市| 杭锦旗| 牡丹江市| 东安县| 拉萨市| 平遥县| 松原市| 肃北| 贵州省| 长治县| 浦东新区| 上虞市| 祥云县| 安西县| 大新县| 洮南市| 黑龙江省| 大渡口区| 贵港市| 新龙县| 青田县| 天镇县| 广西| 大庆市| 苏州市| 阿城市| 灯塔市| 葵青区| 冷水江市| 邯郸县| 怀化市| 海兴县| 宁乡县| 龙南县| 松潘县| 平顺县| 田阳县| 绍兴县| 镇巴县| 莎车县|