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

python寫介面

發布時間: 2023-04-20 14:42:34

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

熱點內容
怎麼給自己手機寫一個腳本 發布:2024-11-01 20:23:41 瀏覽:241
c語言大小寫判斷 發布:2024-11-01 20:21:53 瀏覽:130
php的點餐系統源碼 發布:2024-11-01 20:13:53 瀏覽:714
拜占庭演算法 發布:2024-11-01 20:10:31 瀏覽:357
xcode編譯參數 發布:2024-11-01 20:00:04 瀏覽:665
蘋果5怎麼設置密碼鎖屏 發布:2024-11-01 19:54:55 瀏覽:124
寶塔上傳文件夾 發布:2024-11-01 19:39:50 瀏覽:257
java雲編譯器 發布:2024-11-01 19:34:24 瀏覽:385
免費源碼分享網 發布:2024-11-01 19:29:19 瀏覽:855
硬碟8mb緩存 發布:2024-11-01 19:20:02 瀏覽:192