欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python接口自動(dòng)化之使用token傳入到header消息頭中

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

python接口自動(dòng)化之token傳入到header消息頭中

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

#登錄界面的測(cè)試用例類(lèi)
#導(dǎo)入日志類(lèi)便于設(shè)置日志信息
from Logs.Log import Logger
#導(dǎo)入配置文件類(lèi)讀取公共數(shù)據(jù)
from Readini.Read import Readini
#導(dǎo)入excel類(lèi)便于讀取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è)置請(qǐng)求類(lèi)型
     type=excel[0]['Method']
    #發(fā)送post登錄請(qǐng)求
     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公共初始化類(lèi)并傳入獲取的token數(shù)據(jù)

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

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

導(dǎo)入日志類(lèi)便于設(shè)置日志信息
from Logs.Log import Logger
#導(dǎo)入配置文件類(lèi)讀取公共數(shù)據(jù)
from Readini.Read import Readini
#導(dǎo)入excel類(lèi)便于讀取excel中的數(shù)據(jù)
from DataExcel.readExcel import ExcelUtil
#設(shè)置讀取登錄中相關(guān)參數(shù)
excel = ExcelUtil(Readini().get_ini_value('Excel','exccelini')).dict_data()
#設(shè)置日志類(lèi)型參數(shù)
log = Logger('登錄接口日志執(zhí)行結(jié)果').getlog()
#繼承unittest初始化類(lèi)
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è)置請(qǐng)求類(lèi)型
     type='get'
     log.info(type)
    #發(fā)送get登錄請(qǐng)求
     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í)行編寫(xiě)的登錄腳本
if __name__ == '__main__':
    unittest.main()

注意:

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

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

3.最后將token傳入到header中

python接口自動(dòng)化之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]  # 正則取出來(lái)的值是 列表 類(lèi)型,所以要進(jìn)行列表取值
print(token)

結(jié)合框架使用token

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

整體的思路:

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

所以先把讀寫(xiě) 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}  # 寫(xiě)入的內(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(jué)得很不安全,5.1版本之后就修改了需要指定Loader,通過(guò)默認(rèn)加載器(FullLoader)禁止執(zhí)行任意函數(shù)
    Loader=yaml.FullLoader 加上這行代碼,告警就沒(méi)了
    """
    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 放在請(qǐng)求頭
    r = requests.get(url=url, headers=headers)
    return r

編寫(xiě)用例的時(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 寫(xiě)入 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)目測(cè)試報(bào)告",
        description="xx項(xiàng)目的測(cè)試報(bào)告"
    )
    runner.run(all_case())
    fb.close()
if __name__ == '__main__':
    # 調(diào)用登錄獲取token
    token = login("host", "登錄的賬號(hào)", "密碼")
    # 把token寫(xiě)入 yaml 文件
    write_yaml(token)
    # 執(zhí)行用例的時(shí)候會(huì)讀取 yaml 中的token,case文件下 test_user_info.py 的
    run_case_report()

總結(jié)

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

相關(guān)文章

  • Python系統(tǒng)監(jiān)控模塊psutil功能與經(jīng)典用法分析

    Python系統(tǒng)監(jiān)控模塊psutil功能與經(jīng)典用法分析

    這篇文章主要介紹了Python系統(tǒng)監(jiān)控模塊psutil功能與經(jīng)典用法,簡(jiǎn)單講述了psutil模塊的功能、原理并結(jié)合具體實(shí)例形式分析了Python使用psutil模塊針對(duì)CPU、內(nèi)存、磁盤(pán)、網(wǎng)絡(luò)等信息的讀取相關(guān)操作技巧,需要的朋友可以參考下
    2018-05-05
  • Django自定義列表 models字段顯示方式

    Django自定義列表 models字段顯示方式

    這篇文章主要介紹了Django自定義列表 models字段顯示方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-04-04
  • Python 中的結(jié)構(gòu)模式匹配及重要性

    Python 中的結(jié)構(gòu)模式匹配及重要性

    這篇文章主要介紹了Python 中的結(jié)構(gòu)模式匹配,本篇文章介紹結(jié)構(gòu)模式匹配及其在 Python 中的重要性,它還使用不同的模式來(lái)演示如何使用 match … case 語(yǔ)句,需要的朋友可以參考下
    2023-06-06
  • 從CentOS安裝完成到生成詞云python的實(shí)例

    從CentOS安裝完成到生成詞云python的實(shí)例

    下面小編就為大家分享一篇從CentOS安裝完成到生成詞云python的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助
    2017-12-12
  • 關(guān)于keras中keras.layers.merge的用法說(shuō)明

    關(guān)于keras中keras.layers.merge的用法說(shuō)明

    這篇文章主要介紹了關(guān)于keras中keras.layers.merge的用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-05-05
  • 在VScode中引用自定義模塊問(wèn)題

    在VScode中引用自定義模塊問(wèn)題

    這篇文章主要介紹了在VScode中引用自定義模塊問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-07-07
  • python 利用文件鎖單例執(zhí)行腳本的方法

    python 利用文件鎖單例執(zhí)行腳本的方法

    今天小編就為大家分享一篇python 利用文件鎖單例執(zhí)行腳本的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-02-02
  • python文件的讀取、寫(xiě)入與刪除

    python文件的讀取、寫(xiě)入與刪除

    文件是無(wú)處不在的,,無(wú)論我們使用哪種編程語(yǔ)言,處理文件對(duì)于每個(gè)程序員都是必不可少的,下面這篇文章主要給大家介紹了關(guān)于python文件的讀取、寫(xiě)入與刪除的相關(guān)資料,文中通過(guò)實(shí)例代碼和圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • 通過(guò)Python讀取照片的Exif信息解鎖圖片背后的故事

    通過(guò)Python讀取照片的Exif信息解鎖圖片背后的故事

    這篇文章主要為大家介紹了通過(guò)Python讀取照片的Exif信息解鎖圖片背后的故事探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • socket + select 完成偽并發(fā)操作的實(shí)例

    socket + select 完成偽并發(fā)操作的實(shí)例

    下面小編就為大家?guī)?lái)一篇socket + select 完成偽并發(fā)操作的實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08

最新評(píng)論