當前位置:首頁 » 編程語言 » python介面測試

python介面測試

發布時間: 2022-01-27 07:24:45

python的哪個模塊可以做介面測試

python介面測試
1.安裝python環境
2.下載python IDE(pyCharm)
備註:
requests是python的要給HTTP客戶端庫,跟urllib,urllib2類似,那為什麼要用requests而部用urllib2呢?官方文檔中是這樣說的:
python的標准庫urllib2提供了大部分需要的HTTP功能,但API太逆天了,一個簡單的功能需要一大堆代碼。而requests比較簡潔,能用更少的代碼實現。
3.下載 安裝 requests第三方模塊
下面就進行介面測試
要使用 requests 首先需要在文件中引用
[python] view plain
import requests
[python] view plain
# 解析json需要
[python] view plain
import json
[python] view plain
# url:介面地址
[python] view plain
# data: 介面需要的數據
[python] view plain
# headers:介面需要的傳遞的headers數據
[python] view plain
# files:若是介面中需要上傳文件則需要用到該參數
[python] view plain
r = requests.post(url, data=data, headers=headers)
[python] view plain
r = requests.post(url, data=data, headers=headers, files=files)
[python] view plain
# 獲取 介面返回的數據信息並解析(如果返回的是json格式的話)
[python] view plain
json_data = json.loads(r.text)
[python] view plain
我一直用這樣的方法寫了20個介面進行測試,突然發現好像代碼有很多重復的呀,是不是可以把重復的內容進行封裝一下了?
[python] view plain
封裝如下:
[python] view plain
Basics_Requests.py
[python] view plain
import requests
import json
'''''
#xx_url:介面連接url
#data:介面data需要傳遞的數據(數據格式一般為Dictionary)
#headers:介面headers需要傳遞的數據(數據格式一般為Dictionary)
#variable:headers 中需要改變的參數欄位(數據格式為list)
'''
class Basics():
# 初始化
def __init__(self, xx_url, data, headers, variable):
self.xx_url = xx_url
self.data = data
self.headers = headers
self.variable = variable
def basicsparameter(self):
# 發起post請求
url_data = requests.post(self.xx_url, data=self.data, headers=self.headers)
# 把得到的數據轉成json格式
data_json = json.loads(url_data.text)
# 改變請求中的參數值
if self.variable != '':
for i in self.variable:
self.headers[i] = data_json[i.lower()]
# 把請求的 數據 和 headers 存入 list中
dic_data = {'data_json': data_json, 'headers': self.headers}
return dic_data
調用封裝方法:
[python] view plain
Test.py
[python] view plain
Basics_Requests
[python] view plain
Basics_Requests.Basics(url, row_data, headers, variable).basicsparameter()
[python] view plain

❷ 什麼是Python介面自動化測試,具體能做什麼,說明白點

就是使python去實現介面測試,說白了就是寫一些測試邏輯。python去寫,速度快,簡單python也有很多自動化測試相關的工具。roboframework,是一個自動化測試框架,寫自動化非常簡單。

❸ 使用python做介面自動化測試容易嗎

為什么要做介面自動化測試?
在當前互聯網產品迭代頻繁的背景下,回歸測試的時間越來越少,很難在每個迭代都對所有功能做完整回歸。但介面自動化測試因其實現簡單、維護成本低,容易提高覆蓋率等特點,越來越受重視。
為什么要自己寫框架呢?
使用Postman調試通過過直接可以獲取介面測試的基本代碼,結合使用requets + unittest很容易實現介面自動化測試的封裝,而且requests的api已經非常人性化,非常簡單,但通過封裝以後(特別是針對公司內特定介面),可以進一步提高腳本編寫效率。
一個現有的簡單介面例子
下面使用requests + unittest測試一個查詢介面
介面信息如下
請求信息:
Method:POST
URL:api/match/image/getjson
Request:
{
"category": "image",
"offset": "0",
"limit": "30",
"sourceId": "0",
"metaTitle": "",
"metaId": "0",
"classify": "unclassify",
"startTime": "",
"endTime": "",
"createStart": "",
"createEnd": "",
"sourceType": "",
"isTracking": "true",
"metaGroup": "",
"companyId": "0",
"lastDays": "1",
"author": ""
}

Response示例:
{
"timestamp" : xxx,
"errorMsg" : "",
"data" : {
"config" : xxx
}

Postman測試方法見截圖:

測試思路
1.獲取Postman原始腳本
2.使用requests庫模擬發送HTTP請求**
3.對原始腳本進行基礎改造**
4.使用python標准庫里unittest寫測試case**
原始腳本實現
未優化
該代碼只是簡單的一次調用,而且返回的結果太多,很多返回信息暫時沒用,示例代碼如下
import requests

url = "http://cpright.xinhua-news.cn/api/match/image/getjson"

querystring = {"category":"image","offset":"0","limit":"30","sourceId":"0","metaTitle":"","metaId":"0","classify":"unclassify","startTime":"","endTime":"","createStart":"","createEnd":"","sourceType":"","isTracking":"true","metaGroup":"","companyId":"0","lastDays":"1","author":""}

headers = { 'cache-control': "no-cache", 'postman-token': "e97a99b0-424b-b2a5-7602-22cd50223c15"
}

response = requests.request("POST", url, headers=headers, params=querystring)

print(response.text)

優化 第一版
調整代碼結構,輸出結果Json出來,獲取需要驗證的response.status_code,以及獲取結果校驗需要用到的results['total']
#!/usr/bin/env python#coding: utf-8'''
unittest merchant backgroud interface
@author: zhang_jin
@version: 1.0
@see:http://www.python-requests.org/en/master/
'''import unittestimport jsonimport tracebackimport requests

url = "http://cpright.xinhua-news.cn/api/match/image/getjson"

querystring = { "category": "image", "offset": "0", "limit": "30", "sourceId": "0", "metaTitle": "", "metaId": "0", "classify": "unclassify", "startTime": "", "endTime": "", "createStart": "", "createEnd": "", "sourceType": "", "isTracking": "true", "metaGroup": "", "companyId": "0", "lastDays": "1", "author": ""
}

headers = { 'cache-control': "no-cache", 'postman-token': "e97a99b0-424b-b2a5-7602-22cd50223c15"
}#Post介面調用
response = requests.request("POST", url, headers=headers, params=querystring)#對返回結果進行轉義成json串
results = json.loads(response.text)#獲取http請求的status_codeprint "Http code:",response.status_code#獲取結果中的total的值print results['total']#print(response.text)

優化 第二版
介面調用異常處理,增加try,except處理,對於返回response.status_code,返回200進行結果比對,不是200數據異常信息。
#!/usr/bin/env python#coding: utf-8'''
unittest merchant backgroud interface
@author: zhang_jin
@version: 1.0
@see:http://www.python-requests.org/en/master/
'''import jsonimport tracebackimport requests

url = "http://cpright.xinhua-news.cn/api/match/image/getjson"

querystring = { "category": "image", "offset": "0", "limit": "30", "sourceId": "0", "metaTitle": "", "metaId": "0", "classify": "unclassify", "startTime": "", "endTime": "", "createStart": "", "createEnd": "", "sourceType": "", "isTracking": "true", "metaGroup": "", "companyId": "0", "lastDays": "1", "author": ""
}

headers = { 'cache-control': "no-cache", 'postman-token': "e97a99b0-424b-b2a5-7602-22cd50223c15"
}try: #Post介面調用
response = requests.request("POST", url, headers=headers, params=querystring) #對http返回值進行判斷,對於200做基本校驗 if response.status_code == 200:
results = json.loads(response.text) if results['total'] == 191: print "Success" else: print "Fail" print results['total'] else: #對於http返回非200的code,輸出相應的code raise Exception("http error info:%s" %response.status_code)except:
traceback.print_exc()

❹ 使用python+selenium怎樣做介面測試求實例

要看你是什麼樣的介面
比如比較簡單的http service 的介面,需要提供介面的訪問地址,訪問方式(GET? POST?PUT?DELETE?),以及參數
然後用python來模擬發出請求,得到介面的返回,返回是否正確
你做測試,肯定清楚什麼樣的輸入輸出是正確的

❺ python怎麼做介面測試工具

之前使用過urllib和urllib2做介面測試,在做的途中,感覺使用urllib2直接進行的get,post 請求並沒有那麼好用。作為測試人員,所需要的測試工具應當以方便為第一要務,測試的耗時只要是真正的無人值守,耗時不是太久的都可以接受。所以,本人又嘗試了一個新的包:requests。

Requests 是用Python語言編寫,基於 urllib,採用 Apache2 Licensed 開源協議的 HTTP 庫。它比 urllib 更加方便,可以節約我們大量的工作,完全滿足 HTTP 測試需求。Requests 的哲學是以 PEP 20 的習語為中心開發的,所以它比 urllib 更加 Pythoner。更重要的一點是它支持 Python3 !推薦一篇文章,上面有該包的詳細說明傳送門,以下只會寫到我用到的部分,所以更多的了解需要自己去搜資料

好了,我們開始吧!!

介面測試中重要的部分:

1.get和post方法

2.用到的參數

3.請求頭

4.cookie

5.日誌輸出

6.如何調試你的程序--藉助fiddler

按照以上的順序,我將一一說明我的搞法,因為編碼能力有限,所以可能看著很low

一、get和post

requests包很好的實現了post和get方法,示例:

1 import requests2 response_get = requests.get(url, data, headers, cookies)3 response_post = requests.post(url, data, headers, cookies)

其他的訪問方式如put,head等等,用法幾乎都是如此,因為沒用到,所以省略

現在一般的介面返回值有頁面和json倆種,按照需求,可以分別使用response.text或者response.content獲取,text獲取的是unicode類型的返回值,而content返回值是str類型,所以我一般使用content來獲取返回值,因為這樣獲取的返回值可以直接使用正則或者in的方式來驗證返回值結果是否正確。

我自己為了實現介面的自動訪問,所以又在requests上面加了一層封裝,就像下面這樣:

三、cookie

一款產品的介面測試中必定會使用登錄狀態,需要使用cookie實現,之前寫過使用cookiejar獲取cookie,requests中獲取cookie的方法更為簡單,不過首先你得知道是哪個介面set了cookie,不過一般是登錄啦。登錄介面訪問之後set了cookie,那好,就去調用登錄介面,然後拿到搞回來的cookie:

# 只需要這樣!!login = requests.post(login_url, data=login_data, headers=login_header)
cookie = login.cookies

這個cookie就是登錄狀態了,拿著隨便用,需要登錄的就直接cookies=cookies

四、日誌輸出

這里注意看第二步中介面數據,有介面描述,也有介面是啥,第一步中又把content做成返回值了,具體拼接方式自己想吧,東西全有了,想寫啥寫啥,還可以加上獲取本地時間的api獲取介面運行時間,log文件該長啥樣是門學問,這里就不獻丑了。

五、借用fiddler調試你的腳本

requests允許使用代理訪問,這有啥用,真有!fiddler是一款截包改包的工具,而且通過擴展可以進行請求間的比對,這樣讓你的程序訪問的請求和真正正確的請求作對比,為啥我的程序訪問出錯?是不是缺了請求頭?參數是不是丟了?cookie是不是少了?很容易看出來。寫法如下:

proxies = { "http": "http://127.0.0.1:8888", "https": "http://127.0.0.1:8888"}
requests.post(url, proxies=proxies)

這樣就可以走代理了,除fiddler以外還有charles和burp suite可以使用,具體看個人喜好吧。

❻ python 介面測試怎麼做斷言

要看你是什麼樣的介面
比如比較簡單的http
service
的介面,需要提供介面的訪問地址,訪問方式(get?
post?put?delete?),以及參數
然後用python來模擬發出請求,得到介面的返回,返回是否正確
你做測試,肯定清楚什麼樣的輸入輸出是正確的

❼ python介面測試如何將

做過介面測試或者做過前端的人都知道,介面的訪問方式是不一致的,所以才會使用postman來進行介面測試,因為它可以設置post和get方式。使用python模擬這倆種訪問方式是重中之重。先說GET方式。GET方式就比較簡單了,把介面放進瀏覽器地址欄,點下回車就完成了一次GET。所以就需要使用python訪問URL就可以模擬一次GET 測試。

❽ 如何使用python根據介面文檔進行介面測試

1,關於requests
requests是python的一個http客戶端庫,設計的非常簡單,專門為簡化http測試寫的。
2,開發環境
mac下面搭建開發環境非常方便。
sudo easy_install pip
sudo pip install requests

測試下:python命令行
import requests
>>> r = requests.get('', auth=('user', 'pass'))
>>> r.status_code
200
>>> r.headers['content-type']
'application/json; charset=utf8'
>>> r.encoding
'utf-8'
>>> r.text
u'{type:User...'
>>> r.json()
{u'private_gists': 419, u'total_private_repos': 77, ...}

開發工具,之前使用sublime,發現運行報錯,不識別table字元。
IndentationError: unindent does not match any outer indentation level

非常抓狂的錯誤,根本找不到代碼哪裡有問題了。甚至開始懷疑人生了。
python的這個空格區分代碼真的非常讓人抓狂。開始懷念有大括弧,分號的語言了。
徹底解決辦法,直接換個IDE工具。使用牛刀,IDA開發。

直接下載社區版本即可,因為就是寫個腳本啥的,沒有用到太復雜的框架。

果然效果非常好,直接格式下代碼,和java的一樣好使,可以運行可以debug。右鍵直接運行成功。
3,測試介面
沒有啥太復雜的,直接使用requests框架即可。
#!/usr/bin/python
# -*- coding: utf-8 -*-

################

import requests

#測試網路
def _func(url):
headers = {}
params = {}
req = requests.post(url, headers=headers, params=params)
print(req.text)
if __name__ == '__main__':
url =
_func(url)

4,總結
測試非常重要,尤其是對外的介面出現的漏洞,需要花時間去仔細測試,同時要仔細分析代碼。
安全是挺重要的事情,要花時間去琢磨。
python學習還是非常容易學習的,一個小時就能把語法學會。
同時滲透測試,安全掃描的好多工具也是python寫的。PyCharm CE版本的開發工具足夠強大,能夠幫你快速學習python。
如果想快速做點界面的開發,wxPython是非常不錯的選擇。

❾ python怎麼使用api介面測試

在開發中,需要測試web-api的介面 spring mvc 使用單元測試非常方便,但是,受不了單元測試的啟動速度。用python寫了一個小腳本,用於測試介面,
測試腳本配置文件
api.yaml
server:
url: http://127.0.0.1:9000/ihome/

api:
name:
#api-v2-neighbor-list.yaml
- api/v2/neighbor/list

api-v2-neighbor-list.yaml
介面配置文件
method:
post
data:
#post 的 body 的json
postSid: a1
userSid: u2

python 腳本
import requests, json, yaml, sys

def apiTest(apiName):
f = open("api.yaml")
obj = yaml.safe_load(f)
f.close()

if apiName != "":
runApi(obj["server"]["url"] + apiName, apiName.replace("/", "-") + ".yaml")
return;

apis = obj['api']["name"]
for api in apis:
runApi(obj["server"]["url"] + api, api.replace("/", "-") + ".yaml")

def runApi(url, dataFile):
headers = {'Content-Type' : 'application/json; charset=UTF-8',
'X-Requested-With' : 'XMLHttpRequest',
'Connection' : 'keep-alive',
'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36'
}

❿ 如何用python進行介面性能測試

說下思路吧。我是這樣做的:
首先,介面測試先編寫調試ok
然後,利用多線程來模擬並發

熱點內容
namespacelinux 發布:2024-11-16 07:28:13 瀏覽:352
html去緩存 發布:2024-11-16 07:05:22 瀏覽:723
如何限制蘋果ip段訪問伺服器 發布:2024-11-16 07:02:57 瀏覽:661
knn演算法原理 發布:2024-11-16 06:56:18 瀏覽:854
c語言第一章 發布:2024-11-16 06:49:07 瀏覽:51
伺服器ip黑名單和網站ip黑名單區別 發布:2024-11-16 06:45:56 瀏覽:888
上傳圖片命名規則 發布:2024-11-16 06:28:37 瀏覽:557
qq閱讀上傳 發布:2024-11-16 06:27:04 瀏覽:111
鴻蒙系統與安卓區別在哪裡 發布:2024-11-16 06:24:59 瀏覽:124
安卓手機如何更改信息提示音 發布:2024-11-16 06:12:52 瀏覽:143