接口基础知识:

简单说下接口测试,现在常用的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 flask
from flask import request
from flask import jsonify
import tools
import OP_db
import 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 flask
from flask import jsonify
from flask import request
from conf import opMysql
from 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 flask
from flask import jsonify
from flask import request
from conf import opMysql
from 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')
可以通过以下2种方式进行post请求,一种如下:
通过url拼接参数:
第二种访问方式:通过key-value方式进行访问:
redis相关操作,添加hash类型的值到redis内,接口实现如下:
import flask
from flask import jsonify
from conf import opRedis
from flask import request
'''
redis添加数据,存入数据的类型是hash类型,格式如下:
post请求,请求参数入参类型json
{name:{"key":"value"}}
{"username":"url"}
'''
server = flask.Flask(__name__)
@server.route('/set_sties', methods =['post'])
def set_sties():
# 获取url请求参数,返回结果是字典{"username":"byz","url":"http://www.baidu.com"}
res_dic = request.json
if res_dic.get('username') and res_dic.get('url'):
username = res_dic.get('username')
url = res_dic.get('url')
#调用redis的hset方法,将username、url存入redis
opRedis.get_hashall('sites', username, url)
return jsonify({"code":20})
else:
return jsonify({"code": 204, "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')
hash类型结构如下:
{name:{key,value}},接口访问成功后,redis内数据存储结构如下:
redis添加完数据后,读取redis内的数据,接口实现如下:
import flask
from flask import jsonify
from conf import opRedis
from flask import request
'''
读取redis内的数据,redis数据存储类型是hash类型,格式如下
{name:{"key":"value"}}
思路: 1.通过redis的hgetall(name)方法读取redis所有数据,返回结果类型是字典
2. 循环字典内容,将元素类型转换为str,并将结果存放到字典内
'''
server = flask.Flask(__name__)
@server.route('/get_sties', methods =['get', 'post'])
def get_sties():
#获取redis内所有的数据信息,返回结果类型是字典,里面元素是bytes类型,name=sites
dic = opRedis.get_hashall('sites')
redisList = []
for key, value in dic.items():
redis_dic = {}
#将字典内元素的类型由bytes转换为str
k = key.decode()
v = value.decode()
#字典redis_dic内结构{"username:k, "url":v}
redis_dic['username'] = k
redis_dic['url'] = v
redisList.append(redis_dic)
return jsonify({"code": 200, "msg": redisList})
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')
通过postman方法接口,返回数据如下:
查询用户,需要传token值,实现方法如下:
登录接口:
import flask
from flask import jsonify
from conf import opRedis
from conf import opMysql
from conf import md5_create
from flask import request
import time
'''
登录接口,需要传用户名、密码,通过查询数据库判断用户是否登录成功,若登录成功则将用户名和token存入redis内
'''
server = flask.Flask(__name__)
@server.route('/login', methods=['get','post'])
def set_cookies():
name = request.values.get('username')
pwd = request.values.get('pwd')
if name and pwd:
#加密后的密码
new_pwd = md5_create.md5_test(pwd)
sql = 'select username,password from lhldemo where username="%s" and password="%s" ; ' % (name, new_pwd)
res_sql = opMysql.op_select(sql)
if res_sql:
token = name + time.strftime('%Y%m%d%H%M%S')
new_token = md5_create.md5_test(token)
#用户登录成功后,将name和token存入redis,存入数据类型是hash类型
opRedis.get_hashall('user', name, new_token)
return jsonify({"code": 200})
else:
return jsonify({"code": 204})
else:
return jsonify({"code": 304})
查询用户,需要传用户名和token值,实现方法如下:
import flask
from flask import jsonify
from conf import opRedis
from conf import opMysql
from conf import md5_create
from flask import request
import time
'''
登录接口,需要传用户名、密码,通过查询数据库判断用户是否登录成功,若登录成功则将用户名和token存入redis内
'''
server = flask.Flask(__name__)
@server.route('/search_user', methods=['get','post'])
def set_cookies():
name = request.values.get('username')
token = request.values.get('token')
print('token',token)
if name and token:
#查看数据库,看查询的用户是否存在,若存在则返回用户id
sql = 'select id from lhldemo where username="%s" ; ' % (name)
res_sql = opMysql.op_select(sql)
if res_sql:
#从redis中获取user下的用户名对应的token值
res_token = opRedis.getRedis('user:'+name)26 if res_token == token:
return jsonify({"msg": "用户id", "id": res_sql})
else:
return jsonify({"msg": "token错误"})
else:
return jsonify({"code": "用户不存在"})
else:
return jsonify({"code": "必填项不能为空"})
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')
以上就是工作中常用的一些接口场景,测试支付相关接口、或者第三方接口时,可以自己mock接口返回假数据操作~~~~
# python实现接口测试
# python
# 实现接口
# 实现http接口
# 命令行运行Python脚本时传入参数的三种方式详解
# python+requests实现接口测试的完整步骤
# python+excel接口自动化获取token并作为请求参数进行传参操作
# 为空
# 必填
# 都不
# 转换为
# 都是
# 是否存在
# 可以通过
# 则将
# 方法如下
# 注册成功
# 数据存储
# 打开浏览器
# 几个
# 结果是
# 并将
# 不存在
# 要知道
# 第三方
# 用户登录
# 不正确
相关文章:
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
招商网站制作流程,网站招商广告语?
品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?
如何通过虚拟主机空间快速建站?
公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?
建站主机功能解析:服务器选择与快速搭建指南
建站上传速度慢?如何优化加速网站加载效率?
建站之星Pro快速搭建教程:模板选择与功能配置指南
专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?
seo网站制作优化,网站SEO优化步骤有哪些?
保定网站制作方案定制,保定招聘的渠道有哪些?找工作的人一般都去哪里看招聘信息?
宝塔建站无法访问?如何排查配置与端口问题?
简单实现Android文件上传
一键网站制作软件,义乌购一件代发流程?
企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?
长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?
常州企业建站如何选择最佳模板?
建站之星如何修改网站生成路径?
一键制作网站软件下载安装,一键自动采集网页文档制作步骤?
宠物网站制作html代码,有没有专门介绍宠物如何养的网站啊?
如何在IIS服务器上快速部署高效网站?
php条件判断怎么写_ifelse和switchcase的使用区别【对比】
建站之星后台密码如何安全设置与找回?
网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?
高端智能建站公司优选:品牌定制与SEO优化一站式服务
c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】
c++怎么用jemalloc c++替换默认内存分配器【性能】
C++中引用和指针有什么区别?(代码说明)
详解jQuery中基本的动画方法
建站上市公司网站建设方案与SEO优化服务定制指南
已有域名和空间,如何快速搭建网站?
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
如何快速搭建高效简练网站?
常州企业网站制作公司,全国继续教育网怎么登录?
定制建站平台哪家好?企业官网搭建与快速建站方案推荐
c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】
如何选择域名并搭建高效网站?
如何解决ASP生成WAP建站中文乱码问题?
实惠建站价格推荐:2025年高性价比自助建站套餐解析
建站之星在线版空间:自助建站+智能模板一键生成方案
家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?
青浦网站制作公司有哪些,苹果官网发货地是哪里?
C++如何编写函数模板?(泛型编程入门)
制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?
建站之星如何防范黑客攻击与数据泄露?
官网建站费用明细查询_企业建站套餐价格及收费标准指南
深圳企业网站制作设计,在深圳如何网上全流程注册公司?
浙江网站制作公司有哪些,浙江栢塑信息技术有限公司定制网站做的怎么样?
如何快速生成ASP一键建站模板并优化安全性?
如何在自有机房高效搭建专业网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。