日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python 接口自动化_Python 接口自动化测试

發布時間:2023/12/4 python 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 接口自动化_Python 接口自动化测试 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 接口基礎知識

1.1 接口分類

接口一般來說有兩種,一種是程序內部的接口,一種是系統對外的接口。

(1) webservice接口:走soap協議通過http傳輸,請求報文和返回報文都是xml格式的,我們在測試的時候都要通過工具才能進行調用,測試。

(2) http api 接口:走http協議,通過路徑來區分調用的方法,請求報文都是key-value形式的,返回報文一般都是json串,有get和post等方法。

1.2 接口請求類型

根據接口的請求方法,常用的幾種接口請求方式:

(1) GET:從指定資源獲取數據

(2) POST:向指定的資源請求被處理的數據(例如用戶登錄)

(3) PUT:上傳指定的URL,一般是修改,可以理解為數據庫中的 update

(4) DELETE:刪除指定資源

2、Requests 快速上手

2. requests基礎

所有的數據測試目標以一個開源的接口模擬網站【HTTPBIN】為測試對象。

2.1 發送請求

#!/usr/bin/env python

# -*- encoding: utf-8 -*-

"""

@File : requests_send_request.py

@Time : 2019/9/2 11:54

@Author : Crisimple

@Github : https://crisimple.github.io/

@Contact : Crisimple@foxmail.com

@License : (C)Copyright 2017-2019, Micro-Circle

@Desc : None

"""

import requests

# 1.requests請求方式

# (1) GET請求方式

httpbin_get = requests.get('http://httpbin.org/get', data={'key': 'value'})

print('httpbin_get: ', httpbin_get.text)

# (2) POST請求方式

httpbin_post = requests.post('https://httpbin.org/post', data={'key': 'value'})

print('httpbin_post: ', httpbin_post.text)

# (3) PUT請求方式

httpbin_put = requests.put('https://httpbin.org/put', data={'key': 'value'})

print('httpbin_put: ', httpbin_put.text)

# (4) DELETE請求方式

httpbin_delete = requests.delete('https://httpbin.org/delete', data={'key': 'value'})

print('httpbin_delete', httpbin_delete)

# (5) PATCH親求方式

httpbin_patch = requests.patch('https://httpbin.org/patch', data={'key': 'value'})

print('httpbin_patch', httpbin_patch)

2.2 參數傳遞

常用的參數傳遞形式有四種:【GitHub示例】

(1)字典形式的參數:payload = {'key1': 'value1', 'key2': 'value2'}

(2) 元組形式的參數:payload = (('key1', 'value1'), ('key2', 'value2'))

(3) 字符串形式的參數:payload = {'string1', 'value1'}

(4) 多部份編碼的文件:files = {

# 顯示設置文件名、文件類型和請求頭

'file': ('report.xls', open('report.xls', 'rb'), 'application/vnd.ms-excel', {'Expires': '0'})

}

#!/usr/bin/env python

# -*- encoding: utf-8 -*-

"""

@File : requests_transfer_parameter.py

@Time : 2019/9/2 12:39

@Author : Crisimple

@Github : https://crisimple.github.io/

@Contact : Crisimple@foxmail.com

@License : (C)Copyright 2017-2019, Micro-Circle

@Desc : 參數傳遞:字典、元組、字符串、文件

"""

import requests

# 2. 參數傳遞

# (1) 傳參參數為字典形式: 數據字典會在發送請求時會自動編碼為表單形式

def transfer_dict_parameter():

payload = {

'key1': 'value1',

'key2': 'value2'

}

transfer_dict_parameter_result = requests.post('https://httpbin.org/post', params=payload)

print("transfer_dict_parameter_url: ", transfer_dict_parameter_result.url)

print("transfer_dict_parameter_text: ", transfer_dict_parameter_result.text)

transfer_dict_parameter()

# (2) 傳參參數為元組形式: 應用于在表單中多個元素使用同一 key 的時候

def transfer_tuple_parameter():

payload = (

('key1', 'value1'),

('key1', 'value2')

)

transfer_tuple_parameter_result = requests.post('https://httpbin.org/post', params=payload)

print('transfer_tuple_parameter_url: ', transfer_tuple_parameter_result.url)

print('transfer_tuple_parameter_text: ', transfer_tuple_parameter_result.text)

transfer_tuple_parameter()

# (3) 傳參參數形式是字符串形式

def transfer_string_parameter():

payload = {

'string1': 'value'

}

transfer_string_parameter_result = requests.post('https://httpbin.org/post', params=payload)

print('transfer_string_parameter_url: ', transfer_string_parameter_result.url)

print('transfer_string_parameter_text: ', transfer_string_parameter_result.text)

transfer_string_parameter()

# (4) 傳參參數形式:一個多部分編碼(Multipart-Encoded)的文件

def transfer_multipart_encoded_file():

interface_url = 'https://httpbin.org/post'

files = {

# 顯示設置文件名、文件類型和請求頭

'file': ('report.xls', open('report.xls', 'rb'), 'application/vnd.ms-excel', {'Expires': '0'})

}

transfer_multipart_encoded_file_result = requests.post(url=interface_url, files=files)

print('transfer_multipart_encoded_file_result_url: ', transfer_multipart_encoded_file_result.url)

print('transfer_multipart_encoded_file_result_url: ', transfer_multipart_encoded_file_result.text)

transfer_multipart_encoded_file()

2.3 接口響應

給接口傳遞參數,請求接口后,接口會給我們我們響應返回,接口在返回的時候,會給我們返回一個狀態碼來標識當前接口的狀態。

(1)狀態碼

【GitHub示例】

| 狀態碼 | 狀態 | 描述 |

---------- | ----- | ------

1xx?| ---- |信息類的狀態碼 **

| 100 | Continue | 服務器僅接收到部分請求,但是一旦服務器并沒有拒絕該請求,客戶端應該繼續發送其余的請求。

| 101 | Switching Protocols | 服務器轉換協議,服務器將遵從客戶的請求轉換到另外一種協議

**2xx?| ---- |*成功類的狀態碼 *

| 200 | OK | 請求成功(是對 GET 或 POST 的請求應答文檔)

| 201 | Created | 請求被創建完成,同時信的資源被創建

| 202 | Accepted | 供處理的請求已被接收,但是處理未完成

| 203 | Non-authoritative Information | 文檔已正常地返回,但一些應答頭可能不正確,以為使用的式文檔的拷貝

| 204 | No Content | 沒有新文檔。瀏覽器應該繼續顯示原來的文檔。如果用戶定期地刷新頁面,而Servlet可以確定用戶文檔足夠新,這個狀態代碼是很有用的。

| 205 | Reset Content | 沒有新文檔。但瀏覽器應該重置它所顯示的內容。用來強制瀏覽器清除表單輸入內容。

| 206 | Partial Content | 客戶發送了一個帶有Range頭的GET請求,服務器完成了它。

#!/usr/bin/env python

# -*- encoding: utf-8 -*-

"""

@File : response_code.py

@Time : 2019/9/2 15:41

@Author : Crisimple

@Github : https://crisimple.github.io/

@Contact : Crisimple@foxmail.com

@License : (C)Copyright 2017-2019, Micro-Circle

@Desc : None

"""

import requests

# 1. 返回接口狀態碼:200

def response_200_code():

interface_200_url = 'https://httpbin.org/status/200'

response_get = requests.get(interface_200_url)

response_get_code = response_get.status_code

print('response_get_code: ', response_get_code)

response_200_code()

# 2.返回接口狀態碼:400

def response_400_code():

interface_400_url = 'https://httpbin.org/status/400'

response_get = requests.get(interface_400_url)

response_get_code = response_get.status_code

print('response_get_code: ', response_get_code)

response_400_code()

(2)響應頭

#!/usr/bin/env python

# -*- encoding: utf-8 -*-

"""

@File : response_content.py

@Time : 2019/9/2 15:41

@Author : Crisimple

@Github : https://crisimple.github.io/

@Contact : Crisimple@foxmail.com

@License : (C)Copyright 2017-2019, Micro-Circle

@Desc : None

"""

import requests

# 1. 返回接口狀態碼:

# (1). 返回接口狀態碼:200

def response_200_code():

interface_200_url = 'https://httpbin.org/status/200'

response_get = requests.get(interface_200_url)

response_get_code = response_get.status_code

print('response_get_code: ', response_get_code)

response_200_code()

# (2).返回接口狀態碼:400

def response_400_code():

interface_400_url = 'https://httpbin.org/status/400'

response_get = requests.get(interface_400_url)

response_get_code = response_get.status_code

print('response_get_code: ', response_get_code)

response_400_code()

# (3) 重定向接口返回狀態碼:301

def response_301_code():

interface_url = 'https://butian.360.cn'

response_get = requests.get(interface_url)

response_get_code = response_get.status_code

print('response_get_code: ', response_get_code)

response_301_code()

# ------------------------------------------------------

# 2. 響應內容

??響應內容的請求頭、查看文本、編碼方式、二進制響應、原始響應。

def response_contents():

url = 'https://httpbin.org/get'

response_get = requests.get(url=url)

# 響應頭

print('response_get_headers', response_get.headers)

# 響應文本

print('response_get_text: ', response_get.text)

# 文本編碼方式

print('response_get_encoding: ', response_get.encoding)

# 二進制響應內容

print('response_get_content: ', response_get.content)

# 原始響應內容

origin_content = response_get.raw

origin_content_read = origin_content.read(10)

print('origin_content: ', origin_content)

print('origin_content_read: ', origin_content_read)

response_contents()

2.4 接口其他處理

(1) 操作cookies

import requests

import time

url = 'https://httpbin.org/get'

def operator_cookies():

r = requests.get(url)

print('r.cookies: ', r.cookies)

jar = requests.cookies.RequestsCookieJar()

jar.set('tasty_cookie', 'yum', domain='httpbin.org', path='/cookies')

jar.set('gross_cookie', 'blech', domain='httpbin.org', path='/elsewhere')

r2 = requests.get(url=url, cookies=jar)

print('r2.text', r2.text)

operator_cookies()

(2) 請求歷史

import requests

url = 'https://httpbin.org/get'

def request_history():

r = requests.get(url=url)

print('r.history: ', r.history)

request_history()

(3) 超時請求

requests 在經過 timeout 參數設定的秒數時間之后停止等待響應。

import requests

import time

def timeout():

print(time.time())

url = 'https://httpbin.org/get'

print(time.time())

r = requests.get(url, timeout=5)

print(time.time())

timeout()

(4) 錯誤與異常

常見的錯誤異常有:

· 遇到網絡問題(如:DNS 查詢失敗、拒絕連接等時),requests 會拋出一個 ConnectionError 異常。

· 如果 HTTP 請求返回了不成功的狀態碼, Response.raise_for_status() 會拋出一個 HTTPError異常。

· 若請求超時,則超出一個 Timeout 異常。

· 若請求超過了設定的最大重定向次數,則會拋出一個 TooManyRedirects 異常。

· 所有 Requests 顯式拋出的異常都繼承自 requests.exceptions.RequestsException。

總結

以上是生活随笔為你收集整理的python 接口自动化_Python 接口自动化测试的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。