基于 flask 的自动化测试

一、介绍

        flask是使用python语言编写的一个轻量级的web框架,能方便的实现接口自动化测试;有时候测试需要第三方接口,但第三方接口没有提供时,我们可以通过mock接口模拟第三方接口。

二、安装

        flask的安装简单通过python提供的包安装工具pip就正常安装
        命令窗口: pip install flask 

三、核心模块介绍

        flask.Flask:Flask可以构建分装完成的wsgi应用
        flask.Flask.route(path):Flask应用中的路由配置,主要由加载在视图操作函数上完成path路径和视图函数之间的路由映射关系
        flask.Flask.run():通过run()函数将web应用部署到web服务器并启动服务

四、项目搭建

        pycharm的专业版有flask项目创建,但是免费的社区版需要手动创建并配置目录。

        第一步:File -> Create project,名字随意: testFlask
        第二步:导入 Flask 库;File-》default Setting-》Project interpreter
        第三步:配项目文件;跟目录创建名为 static 的python package;static文件夹是存放 css、image、js等静态文件资源。
        第四步:创建 templates文件夹,存放HTML文件
        

        至此,基本配置完;写点代码运行起来:
        首先:在 templates 里面创建一个 index.html 文件 ;写个hello world!


<!DOCTYPE html>
<html lang="en">
<body>
    <h1>hello world!</h1>
</body>
</html>

        然后:在工程根目录创建app.py文件 
                      

        app.py的代码:
 

from flask import Flask,render_template
from flask import  jsonify

#指定templates的路径,因为templates 和 app.py文件不在同一目录;所以要指定
app = Flask(__name__,template_folder = '../templates')

#静态路由:构建url与函数的映射关系;
@app.route("/")
def index():
#    return render_template('index.html')
#    return  'hi hello world!'
    #返回json数据,需要提前导入jsonify模块
    return jsonify({'code':200,'messages':'success!'})

users_info = {'1001':['123456','zhangsan'],'1002':['123456','lisi']}

@app.route('/users',methods=['GET'])
def users():
    return users

#动态路由,可以传入不同数据;methods可以不写,默认是GET方法,users带参数;构建url与函数的映射关系;
@app.route('/users/<string:account>',methods=['GET'])
def get_user(account):
    if account in users_info:
        info = users_info[account]
        return f'你好 {info} !'
    else:
        return '用户不存在!'

#动态路由,构建url与函数的映射关系;

if __name__ == '__main__':
    #用默认的方式运行
    app.run(debug=True)
    #以调试模式启动项目
    #app.run(host='0.0.0.0’,port=5000,debug=True)  
    #host='0.0.0.0’,表示可以使用127.0.0.1、1ocahost、ip地址访问接口

五、获取请求数据

        导入request 模块,注意:是flask 的request模块,不是requests模块。
        from flask import request

        常用方法:
        method:获取客户端提交请求的方法;
        header:获取请求头
        cookies:获取cookies
        args: 获取GET请求的数据
        form:获取POST请求的数据
        values:获取POST请求提交的数据

六、服务端回话保持

        使用 cookies 或session保持会话。

        cookie:使用make_response模块,
        创建response对象:resp = make_response()
        设置cookie: resp.set_cookie(key,value,max_age)   通过键值对传参,及设置生命周期
        获取cookie:request.cookies.get(key)
        删除cookie:request.delete_cookie(key)

        session:使用 session 模块
        设置秘钥:secret_key
        设置session : session[key] = value
        获取session :session.get(key)
        删除session :session.pop(key)

from flask import Flask,render_template
from flask import make_response
from flask import jsonify
from flask import session
from flask import request

#指定templates的路径,因为templates 和 app.py文件不在同一目录;所以要指定
app = Flask(__name__,template_folder = '../templates')

#设置秘钥,用于session信息加密
app.secret_key='123'

#静态路由:构建url与函数的映射关系;
@app.route("/")
def index():
#    return render_template('index.html')
#    return  'hi hello world!'
    #返回json数据,需要提前导入jsonify模块
    return jsonify({'code':200,'messages':'success!'})

users_info = {'1001':['123456','zhangsan'],'1002':['123456','lisi']}

@app.route('/users',methods=['GET'])
def users():
    return users

#动态路由,可以传入不同数据;methods可以不写,默认是GET方法,users带参数;构建url与函数的映射关系;
@app.route('/users/<string:account>',methods=['GET'])
def get_user(account):
    if account in users_info:
        info = users_info[account]
        return f'你好 {info} !'
    else:
        return '用户不存在!'

#动态路由,构建url与函数的映射关系;不需要传参数,可以通过args方法获取
@app.route('/login2',methods=['GET'])
def login2():
    #获取客户端请求过来的login2接口的account参数
    account = request.args.get('account')
    if account in users_info:
        #登陆成功,用cookie、或session保存信息
        resp = make_response()
        #设置 user的cookie信息
        resp.set_cookie('user',account,max_age=100)

        #保存session信息;
        session['acc'] = account
        return jsonify({'code': 200, 'messages': 'success!'})
    else:
        return jsonify({'code': 2222, 'messages': 'can not find user!'})


#获取用户信息,获取前先登录,校验cookie是否存在
@app.route('/getuser',methods=['GET'])
@def getuser():
    #获取user的用户信息
    userCookie = request.cookies.get('user')
    userSession = session.get('acc')
    if userCookie:
        #成功获取user信息
        return jsonify({'code': 200, 'messages': 'success!'})
    else:
        return jsonify({'code': 2222, 'messages': 'can not find user!'})

if __name__ == '__main__':
    app.run(debug=True)


 

猜你喜欢

转载自blog.csdn.net/guanrongl/article/details/124976290