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

以前學習了使用jmeter+ant作接口測試,並實現了接口的批量維護管理(大概500多條用例),對「接口」以及「接口測試」有了一個基礎瞭解,最近找了一些用python作接口測試的資料,一方面爲了學習下如何使用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())   #若是發送了一個錯誤請求,如40四、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 payload2 = {'approveSeq':'6610','userCode':'qyzh123456_88','projName':'測試項目'}
5 r = requests.post(post_url, data=payload2, timeout=1)   #post請求傳參數時,使用data關鍵字
6 print(r.json())
7 print(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

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

 

 第一目的內容到此結束,一方面簡單介紹下requests的用法,另外一方面將post和get請求進行基本封裝,經過實例化對象進行調用服務器

相關文章
相關標籤/搜索