1.flask:flask是使用python语言编写的web测试框架
如果报错: Could not fetch URL https://pypi.org/simple/flask/: There was a problem confirming the ssl certificate -----因为pip是国外网站,因此用国内镜源就行。
pip install flask -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
2.最基础的代码逻辑:(默认methods=['GET'])
#初始化一个flask对象
from flask import Flask
app= Flask(__name__)
#创建一个函数,并把这个函数装饰成一个mock server
@app.route('/') #把创建的函数,放在flask对象的route装饰器里面,用来生成返回值的地址
def test1():
return "测试1" #返回值
#运行mock服务
if __name__=="__main__":
app.run()
示例:
结果:
在postman中也可以实现
如果要修改html路径,在route里面修改,如:
3.进阶一:既可以返回get方法,又可以返回post方法,同时返回值是json格式。(#用bejson可将json处理和格式化)
#初始化一个flask对象
from flask import Flask
go = Flask(__name__)
#创建一个函数,并把这个函数装饰成一个mock server
@go.route('/xinzi',methods=['GET','POST']) #把创建的函数,放在flask对象的route装饰器里面,用来生成返回值的地址
def test2():
return {
"sites": [{
"name": "cainiao",
"url": "www.runoob.com"
},
{
"name": "google",
"url": "www.google.com"
},
{
"name": "web",
"url": "www.weibo.com"
}
]}
#运行mock服务
if __name__=="__main__":
go.run()
结果:用get和post的方法都能返回json值:
4.进阶2:需求:有参数并且这个参数是需要经过加密处理的---比如在电商中,为防止用户信息被抓包泄露,程序员会写加密算法。常见的五种加密:(MD5\SHAX\Base64\RSA\SIGN)
以MD5加密为例,传入一个值,返回MD5加密后的32位大写的值。
(1)在代码里加密,看结果是否和数据库中一致:
#初始化一个flask对象
from flask import Flask,request
import hashlib
go = Flask(__name__)
#创建一个函数,并把这个函数装饰成一个mock server
def MD5(value): #对value做md5加密
value_change=str(value).encode('utf-8')#先将value转化为字符串,再做编码处理
value_final= hashlib.md5(value_change).hexdigest() #用hash算法加密
return value_final.upper() #返回32位加密大写
@go.route('/md5',methods=['GET','POST']) #把创建的函数,放在flask对象的route装饰器里面,用来生成返回值的地址
def md5_login():
user=request.values.get("username") #不是requests,requests是做接口自动化的,在flask中导入request表示请求,先取得username和password的值(参数),再和加密后的数据库中的数据做对比。
pwd=request.values.get("password")
#查询数据库中的用户名和密码(数据库中一般是已经加密的,在传值时,也得是加密过的)
db_user="21232F297A57A5A743894A0E4A801FC3"
db_pwd="0192023A7BBD73250516F069DF18B500"
if MD5(user)==db_user and MD5(pwd)==db_pwd: #调用前面写的加密函数
return "登陆成功"
else:
return "登录失败"
#运行mock服务
if __name__=="__main__":
go.run()
(2)在postman的前置脚本(pre-request script)中加密:
python脚本代码:
#初始化一个flask对象
from flask import Flask,request
import hashlib
go = Flask(__name__)
#创建一个函数,并把这个函数装饰成一个mock server
def MD5(value): #对value做md5加密
value_change=str(value).encode('utf-8')#先将value转化为字符串,再做编码处理
value_final= hashlib.md5(value_change).hexdigest() #用hash算法加密
return value_final.upper() #返回32位加密大写
@go.route('/md5',methods=['GET','POST']) #把创建的函数,放在flask对象的route装饰器里面,用来生成返回值的地址
def md5_login():
user=request.values.get("username") #不是requests,requests是做接口自动化的,在flask中导入request表示请求,先取得username和password的值(参数),再和加密后的数据库中的数据做对比。
pwd=request.values.get("password")
# print(user,pwd)
#查询数据库中的用户名和密码(数据库中一般是已经加密的,在传值时,也得是加密过的)
db_user="admin"
db_pwd="admin123"
if user==MD5(db_user) and pwd==MD5(db_pwd): #调用前面写的加密函数
return "登陆成功"
else:
return "登录失败"
#运行mock服务
if __name__=="__main__":
go.run()
postman前置中的代码:
var username=CryptoJS.MD5('admin').toString();
// 先加密,再转化为字符串
var password=CryptoJS.MD5('admin123').toString();
console.log(username);
// 类似于print
console.log(password)
pm.environment.set("user", username.toUpperCase());
// 将加密字符串大写,并设为变量
pm.environment.set("pwd", password.toUpperCase());
Base64加密:
python代码端:
#初始化一个flask对象
import base64
from flask import Flask,request
import hashlib
go = Flask(__name__)
#创建一个函数,并把这个函数装饰成一个mock server
def base_64(value): #对value做base_64加密,用base64加密的方法
value_change=str(value).encode('utf-8')#先将value转化为字符串,再做编码处理
value_final= base64.b64encode(value_change).decode(encoding='utf-8') #先用base64加密,最后结果为二进制的字符串;再用decode转化为utf8格式
return value_final.upper() #返回32位加密大写
@go.route('/base_64',methods=['GET','POST']) #把创建的函数,放在flask对象的route装饰器里面,用来生成返回值的地址
def base64_login():
user=request.values.get("username") #不是requests,requests是做接口自动化的,在flask中导入request表示请求,先取得username和password的值(参数),再和加密后的数据库中的数据做对比。
pwd=request.values.get("password")
# print(user,pwd)
#查询数据库中的用户名和密码(数据库中一般是已经加密的,在传值时,也得是加密过的)
db_user="admin"
db_pwd="admin123"
if user==base_64(db_user) and pwd==base_64(db_pwd): #调用前面写的加密函数
return "登陆成功"
else:
return "登录失败"
#运行mock服务
if __name__=="__main__":
go.run()
postman前置中的代码:
var utf8_username=CryptoJS.enc.Utf8.parse("admin");
var base64_username=CryptoJS.enc.Base64.stringify(utf8_username);
// 先base64加密,再转化为utf8格式
var utf8_password=CryptoJS.enc.Utf8.parse("admin123");
var base64_password=CryptoJS.enc.Base64.stringify(utf8_password);
console.log(base64_username);
console.log(base64_password);
pm.environment.set("user", base64_username.toUpperCase());
pm.environment.set("pwd", base64_password.toUpperCase());