python之yaml文件+接口自動化


首先安裝好yaml, 命令:pip install PyYAML

第一步:新建yaml文件,並寫入接口數據

新建yaml文件

 

寫入接口所屬數據

上圖代碼

# 【login】:登錄接口名稱(自定義)
login1:
  
  # 【method】:請求方法,post或get
  method: "post"
  
  # 【url】:請求地址(字符串格式)
  url: "https://www.baidu.com"
  
  # 【head】:請求頭信息(字典格式)
  head:
      "Content-Type": "application/json;charset=UTF-8"
  
  # 【data】:請求體(字典格式)
  data:
      "uuid": "BD123456"
      "password": "BD111111"

# 登錄接口2
login2:
  method: "post"
  url: "https://www.baidu.com"
  head:
    "Content-Type": "application/json;charset=UTF-8"
  data:
    "uuid": "BD123456"
    "password": "BD111111"

 

第二步:寫一個打開yaml文件的公用方法(另建一個文件py)

編寫打開yaml文件方法

上圖代碼

import yaml


def load_yaml(path):
    """
    :param path: yaml文件地址
    :return: 返回yaml文件數據
    """
    file = open(path, 'r', encoding='utf-8')
    data = yaml.load(file, Loader=yaml.FullLoader) # 表示全加載文件
    return data

 

第三步:寫一個接口請求方法(另建一個文件)

上圖代碼

import json
import requests
from UI.Common.OpenYamlFileMethod import load_yaml

def test_url(txt='status_code'):
    """
    接口請求
    :param url_title: 需要測試的yaml文件中的接口標題
    :param txt: 需要返回相應的內容,默認返回相應狀態碼
    :return:
    """
    # 將yaml文件數據傳入
    data_yaml = load_yaml(r'../UI/TestExampleFile/UrlYamlFile.yaml')

    # 從yaml文件中獲取接口標題,並傳入data。(指定哪條接口測試)
    data = data_yaml['login']

    # data是一個字典,需將數據拆分出來保存到變量中, 然后才能引用到接口中,不用變量直接引用會報錯
    url = data['url']
    method = data['method']
    datas = data['data']
    heads = data['head']

    # 用於保持會話(session)
    s = requests.session()
    # getattr:對象映射。json.dumps:將datas的數據轉換成json格式。(method: 請求方法;url: 請求地址;datas: 請求體;head: 請求頭)
    res = getattr(s, method)(url=url, data=json.dumps(datas), headers=heads)
    # 對象映射, 默認返回相應狀態碼
    print(getattr(res, f'{txt}'))

test_url()

 

 requests模塊傳請求體參數時, 有兩種方式:

  data傳參:

    數據報文:當傳入類型為dict字典類型,默認情況下以form表單的方式傳參,格式:a=1&b=2&c=3

    數據報文:當傳入類型為sit類型,默認情況下:text/plain

  json傳參:

    不管是dict還是str,默認格式都為:{"a"=1,"b"=2}

數據格式轉換:

json.dumps(data) 序列化:把字典格式數據轉換為str格式

json.loads(data) 反序列化:把str格式轉換成字典格式

 

請求方法

requests.get()
requests.post()
requests.put()

requests.session(): 用於保持會話(session)
除了requests.session()外,其他請求方法的參數都差不多,都包含url,params, data, headers, cookies, files, auth, timeout等等

 

請求參數

url: 字符串格式,參數也可以直接寫到url中params:url參數,字典格式
data: 請求數據,字典或字符串格式
headers: 請求頭,字典格式
cookies: 字典格式,可以通過攜帶cookies繞過登錄
files: 字典格式,用於混合表單(form-data)中上傳文件
auth: Basic Auth授權,數組格式 auth=(user,password)
timeout: 超時時間(防止請求一直沒有響應,最長等待時間),數字格式,單位為秒

 

響應解析

res.status_code: 響應的HTTP狀態碼
res.reason: 響應的狀態碼含義
req.text:響應的文本格式,按req.encoding解碼
req.content: 響應的二進制格式
req.encoding: 解碼格式,可以通過修改req.encoding='utf-8'來解決一部分中文亂碼問題
req.apparent_encoding:真實編碼,由chardet庫提供的明顯編碼
req.json(): (注意,有括號),響應的json對象(字典)格式,慎用!如果響應文本不是合法的json文本,或報錯
req.headers: 響應頭
req.cookies: 響應的cookieJar對象,可以通過req.cookies.get(key)來獲取響應cookies中某個key對應的值

 

參考文章:https://www.cnblogs.com/superhin/p/10338930.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM