python寫介面
❶ 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根據介面文檔進行介面測試
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配合前端寫簡單介面(加前端vue代碼)
伺服器端:
# 開發人員: hanhan丶
# 開發時間: 2020/11/12 14:36
import flask, json #Flask 一個輕量級的web框架
from flask_corsimport *
server = flask.Flask(__name__) # __name__代表當前的python文件。把當前的python文件當做一個服務啟動
CORS(server, supports_credentials=True) # 解決跨域
@server.route('/login', methods=['post'])
# 第一個參數就是路徑,第二個參數支持的請求方式,不寫的話默認是get,
# 加了@server.route才是一個介面,不然就是一個普通函數
def login():
user = flask.request.values.to_dict()
for itemin user:
items = json.loads(item)
loginName = items.get("loginName")
password = items.get("password")
if loginNameand password:
res = {"code":0, "msg":"請求成功", "data": {"loginName": loginName, "password": password}}
else:
res = {'msg':'調用失敗'}
# json.mps 序列化時對中文默認使用的ascii編碼,輸出中文需要設置ensure_ascii=False
return json.mps(res, ensure_ascii=False)
if __name__ =='__main__':
# port可以指定埠,默認埠是5000
# host默認是伺服器,默認是127.0.0.1
# debug=True 修改時不關閉服務
server.run(debug=True)
前端:
<template>
<div>
賬號:<input type="text" v-model="loginName">
<br>
密碼:<input type="text" v-model="password">
<br>
<br>
<br>
<button @click="btn">點擊</button>
</div>
</template>
<script>
import axios from "axios";
export default {
data() {
return {
loginName: "",
password: ""
};
},
methods: {
getDate() {
axios({
headers: {
"X-Requested-With": "XMLHttpRequest",
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"
},
url: "http://127.0.0.1:5000/login",
method: "post",
data: {
loginName: this.loginName,
password: this.password
}
}).then(res => {
console.log(res);
});
},
btn() {
this.getDate();
}
}
};
</script>
<style>
</style>
❹ 使用python發布介面,如何提醒用戶升級
簡單說下介面測試,現在常用的2種介面就是http api和rpc協議的介面,今天主要說:http api介面是走http協議通過路徑來區分調用的方法,請求報文格式都是key-value形式,返回報文一般是json串;
介面協議:http、webservice、rpc等。
請求方式:get、post方式
請求參數格式:
a. get請求都是通過url?param=xxx¶m1=xxx
b. post請求的請求參數常用類型有:application/json、application/x-www-form-urlencoded、multipart/form-data、text/html等。
還需要知道介面的url、參數類型、返回結果的數據格式、了解介面是否有header、cookie等信息。
介面的實現:請求方式-get,介面的寫法:
import flaskfrom flask import requestfrom flask import jsonifyimport toolsimport OP_dbimport settings'''flask: web框架,可以通過flask提供的裝飾器@server.route()將普通函數轉換為服務登錄介面,需要傳url、username、passwd'''#創建一個服務,把當前這個python文件當做一個服務server = flask.Flask(__name__)#server.config['JSON_AS_ASCII'] = False # @server.route()可以將普通函數轉變為服務 登錄介面的路徑、請求方式@server.route('/login', methods=['get'])def login(): # 獲取通過url請求傳參的數據 username = request.values.get('name') # 獲取url請求傳的密碼,明文 pwd = request.values.get('pwd') # 判斷用戶名、密碼都不為空,如果不傳用戶名、密碼則username和pwd為None if username and pwd: # 獲取加密後的密碼 password = tools.md5_pwd(pwd) #執行sql,如果查詢的username和password不為空,說明資料庫存在admin的賬號 sql = 'select name,password from test where name= "%s" and password= "%s";' %(username, password) # 從數據查詢結果後,res返回是元組 res = OP_db.getconn( host=settings.mysql_info['host'], user=settings.mysql_info['user'], passwd=settings.mysql_info['pwd'], db=settings.mysql_info['db'], port=settings.mysql_info['port'], sql=sql ) if res: #res的結果不為空,說明找到了username=admin的用戶,且password為加密前的123456 resu = {'code': 200, 'message': '登錄成功'} return jsonify(resu) #將字典轉換為json串, json是字元串 else: resu = {'code': -1, 'message': '賬號/密碼錯誤'} return jsonify(resu) else: res = {'code': 999, 'message': '必填參數未填寫'} return jsonify(res) if __name__ == '__main__': server.run(debug=True, port=8888, host=0.0.0.0) #指定埠、host,0.0.0.0代表不管幾個網卡,任何ip都可以訪問
md5加密、資料庫mysql的操作詳見我的其他博客~~~~~
get訪問介面:
項目啟動後,介面的地址是:http://127.0.0.1:5000/,默認埠是5000。
打開瀏覽器,輸入urlhttp://127.0.0.1:5000/xxx?name=xxx&pwd=123456,後面跟上介面的地址login,參數跟url直接使用?相連,每個請求參數直接使用&相連。請求成功,則返回{'code': 200, 'message': '登錄成功'}。
請求方式-post,介面的寫法:
import flaskfrom flask import jsonifyfrom flask import requestfrom conf import opMysqlfrom conf import md5_create'''注冊介面:post請求,請求參數入參類型json{ "username":"aaa", "pwd":"123456", "c_pwd":"123456"}'''server = flask.Flask(__name__)@server.route('/register', methods=['get', 'post'])def registerPost(): #判斷介面的請求方式是GET還是POST if request.method == 'POST': # 獲取請求參數是json格式,返回結果是字典 params = request.json username = params.get('username') pwd = params.get('pwd') confirmpwd = params.get('confirmpwd') if username and pwd and confirmpwd: # 判斷輸入的用戶名、密碼、確認密碼都不為空 select_sql = 'select username from lhldemo where username = "%s" ;'%username # 查詢注冊的用戶是否存在資料庫,如果存在,則username不為空,否則username為空 res_mysql = opMysql.op_select(select_sql) if res_mysql: return jsonify({"code": 999, "mesg": "用戶已注冊"}) else: if pwd == confirmpwd: # 判斷pwd和confirmpwd一致 new_pwd = md5_create.md5_test(pwd) # 加密後的密碼 insert_sql = 'insert into lhldemo(username,password) values("%s", "%s") ;' % (username, new_pwd) opMysql.op_insert(insert_sql) return jsonify({"code": 200, "msg": "注冊成功"}) else: return jsonify({"code":998, "msg":"密碼不一樣"}) else: return jsonify({"code": 504, "msg": "必填項不能為空"}) else: return jsonify({"code": 201, "msg": "請求方式不正確"}) if __name__ == '__main__': #port可以指定埠,默認埠是5000 #host寫成0.0.0.0的話,其他人可以訪問,代表監聽多塊網卡上面,默認是127.0.0.1 server.run(debug=True, port=8899, host='0.0.0.0')
post訪問介面:
項目啟動後,介面的地址是:http://127.0.0.1:5000/,默認埠是5000。
打開瀏覽器,輸入urlhttp://127.0.0.1:5000/xxx,後面跟上介面的地址register,參數使用postman或jmeter進行請求,參數類型是json。請求成功,則返回{'code': 200, 'message': '登錄成功'}。
請求方式-get、post都可以訪問,寫法如下:import flaskfrom flask import jsonifyfrom flask import requestfrom conf import opMysqlfrom conf import md5_create'''注冊介面:post請求,請求參數入參類型json{ "username":"aaa", "pwd":"123456", "c_pwd":"123456"}'''server = flask.Flask(__name__)@server.route('/register', methods=['get', 'post'])def registerPost(): #post請求獲取請求的參數,返回結果類型是str username = request.values.get('username') pwd = request.values.get('pwd') confirmpwd = request.values.get('confirmpwd') if username and pwd and confirmpwd: # 判斷輸入的用戶名、密碼、確認密碼都不為空 select_sql = 'select username from lhldemo where username = "%s" ;'%username # 查詢注冊的用戶是否存在資料庫,如果存在,則username不為空,否則username為空 res_mysql = opMysql.op_select(select_sql) if res_mysql: return jsonify({"code": 999, "mesg": "用戶已注冊"}) else: if pwd == confirmpwd: # 判斷pwd和confirmpwd一致 new_pwd = md5_create.md5_test(pwd) # 加密後的密碼 insert_sql = 'insert into lhldemo(username,password) values("%s", "%s") ;' % (username, new_pwd) opMysql.op_insert(insert_sql) return jsonify({"code": 200, "msg": "注冊成功"}) else: return jsonify({"code": 998, "msg": "密碼不一樣"}) else: return jsonify({"code": 504, "msg": "必填項不能為空"}) if __name__ == '__main__': #port可以指定埠,默認埠是5000 #host默認是127.0.0.1,寫成0.0.0.0的話,其他人可以訪問,代表監聽多塊網卡上面, server.run(debug=True, port=8899, host='0.0.0.0')
❺ 什麼是Python介面自動化測試,具體能做什麼,說明白點
就是使python去實現介面測試,說白了就是寫一些測試邏輯。python去寫,速度快,簡單python也有很多自動化測試相關的工具。roboframework,是一個自動化測試框架,寫自動化非常簡單。
❻ 用Python寫介面自動化,上傳文件介面為什麼會導致查詢介面失敗
上傳不成過或猜咐敬上傳的文件有問題有可能導致查詢失敗,當然還有其他穗慎更多因素簡侍,查下查詢介面失敗報的什麼錯誤,有針對性的去查問題才能最快解決問題所在
❼ python 怎麼寫介面給別人pos調用返回json
說明 sep:分隔符。可以為空 seq:要連接的元素序列、字元串、元組、字典 上面的語法即:以sep作為分隔符,將seq所有的元素合並成一個新的字元串 返回值:返回一個以分隔符sep連接各個元素後生成的字元串
❽ python http介面測試腳本怎麼寫
根據Testcase的具體業務邏輯用事先准備好的測試數據去調用封裝好的API介面,驗證實際返回結果是否與預期返回結果一致.
測試數據可以以各種形式存放,如Excel數據表:
TestCaseName uname method Expected Result
TestCase1 aaaa GET ....
TestCase2 aaaa POST ....
TestCase3 bbbb GET ....
❾ python寫簡單的api介面
http://0.0.0.0:8070/testGet?a=12&b=43