記錄python介面自動化測試--requests使用和基本方法封裝(第一目)

我是冰霜發表於2018-03-25

之前學習了使用jmeter+ant做介面測試,並實現了介面的批量維護管理(大概500多條用例),對“介面”以及“介面測試”有了一個基礎瞭解,最近找了一些用python做介面測試的資料,一方面為了學習下如何使用python進行介面測試(如何做出一個簡單基礎的介面測試框架),另一方面也為了鍛鍊下如何用python寫程式碼(接觸python也有一段時間了,但是每次自己程式設計總有種提筆忘字的感覺,真是欠練!!)

首先,用python做介面測試,主要用到就是requests庫和json庫。

1.先看一個簡單的demo

 1 # -*- coding: UTF-8 -*-
 2 import requests
 3 get_url = 'http://localhost:7001/XXX'
 4 data = {'userCode':'csqy123456','userPWD':'123456'}
 5 r = requests.get(url=get_url, params=data, timeout=5)   #產生一個名為r的Response物件,可以從這個物件中獲取我們想要的資訊; #get請求傳引數時,使用params關鍵字  #timeout引數用來設定停止等待響應的時間
 6 print(r.url)   #返回請求url
 7 print(r.json())  #以JSON格式解析響應內容
 8 print(r.status_code)   #返回狀態碼
 9 print(r.raise_for_status())   #如果傳送了一個錯誤請求,如404、500等,可以通過raise_for_status()來丟擲異常
10 print(r.encoding)  #檢視requests使用了什麼編碼,同時可以用r.encoding屬性來改變它
11 print(r.raw)     #獲取來自伺服器的原始套接字響應
12 print(r.headers)   #伺服器返回給我們的響應頭資訊,也可以在傳參時通過headers=XXX來定製請求頭
13 print(r.request)   #獲取原來建立的Request物件
14 print(r.request.headers)   #傳送到伺服器的請求頭
1 # -*- coding: UTF-8 -*-
2 import requests 
3 post_url = 'http://localhost:7001/XXX'
4 data = {'approveSeq':'6610','userCode':'qyzh123456_88','projName':'測試專案'}
5 r = requests.post(post_url, data=payload2, timeout=1)   #get請求傳引數時,使用data關鍵字
6 print(r.json()) 7print(r.status_code)

 2.然後通過函式呼叫來傳送get/post請求

# -*- coding: UTF-8 -*-
import requests


def send_get(url, data):
    """ 定義send_get函式,用來接收引數,傳送get請求 """
    r = requests.get(url=url, params=data)
    result = r.json()
    return result


def send_post(url, data):
    """ 定義send_post函式,用來接收引數,傳送post請求 """
    r = requests.get(url=url, data=data)
    result = r.json()
    return result


def main(url, method, data):
    """ 定義一個主函式,根據method是get或post,來呼叫send_post()或send_get() """
    if method == 'POST':
        r = send_post(url, data)  # 如果是POST請求,則呼叫send_post()
    else:
        r = send_get(url, data)   # 如果是GET請求,則呼叫send_get()
    return r   # 將結果返回出去


url = 'http://localhost:7001/XXX'
data = {
    'controlSeq': '2018118325'
}
demo = main(url, 'GET', data)
print(demo)

3.定義一個類,對post請求和get請求進行封裝

run_method.py

#
-*- coding: UTF-8 -*- import requests import json class RunMain: """含有構造器""" def __init__(self, url, method, data=None): self.t = self.run_main(url, method, data) def send_post(self, url, data): r = requests.post(url=url, data=data) result = r.json() return json.dumps(result, indent=2, sort_keys=False, ensure_ascii=False) def send_get(self, url, data): r = requests.get(url=url, params=data) result = r.json() return json.dumps(result, indent=2, sort_keys=False, ensure_ascii=False) # 利用json.dumps將響應資料進行json格式的編碼解析 # indent=2將輸出結果縮排2個字元顯示 # sort_keys=False,輸出結果是否按照關鍵字排序 # json.dumps 序列化時對中文預設使用的ascii編碼,ensure_ascii=False才會輸出中文 # return result def run_main(self, url, method, data=None): if method == 'GET': r = self.send_get(url, data) else: r = self.send_post(url, data) return r if __name__ == '__main__': url = 'http://localhost:7001/XXX' data = { 'controlSeq': '2018118325' } test = RunMain(url, 'GET', data) # 因為有構造器 __init__,例項化時要帶引數 print(test.t)
run_method.py
# -*- coding: UTF-8 -*-

import requests
import json
class RunMain:
    """無構造器"""
    def send_get(self, url, data):
        res = requests.get(url=url, params=data).json()
        return res

    def send_post(self, url, data):
        res = requests.post(url=url, data=data).json()
        return res

    def run_main(self, url, method, data=None):
        res = None
        if method == 'GET':
            res = self.send_get(url, data)
        else:
            res = self.send_post(url, data)
        return res


if __name__ == '__main__':
    url = 'http://192.168.0.53:7001/CommonService/api/control/controlProgress/query.v'
    data = {
            'controlSeq': '2018118325'
    }
    run = RunMain()  # 先例項化,例項化時不需要帶引數
    print(run.run_main(url, 'GET', data))

 ps.建議在封裝執行方法類時,不要加構造器,這樣就不需要在例項化時傳參,在後面的主函式中從excel中取出引數後再傳給類中的方法即可

下面是json.dumps使用前後的對比圖

 

 第一目的內容到此結束,一方面簡單介紹下requests的用法,另一方面將post和get請求進行基本封裝,通過例項化物件進行呼叫

相關文章