首页 > 编程语言 >借用python的flask库写一个mock实现一个自定义接口服务

借用python的flask库写一个mock实现一个自定义接口服务

时间:2022-09-30 03:33:20浏览次数:55  
标签:库写 name 自定义 python res request json login password

mock在接口测试中可以发挥很大的作用,其中之一便是实现自定义接口服务。
python中可以使用flask库实现mock,
写一个简单的登录接口,以及调用,直接上代码:
第一部分:实现登录接口
import json
import flask
import hashlib

from sql_util import SqlUtil


server = flask.Flask(__name__)   # 创建一个服务,把当前这个python文件当做一个服务


@server.route('/login', methods=['get', 'post'])
def login_server():
    """实现一个登录功能的接口,自定义接口响应头、响应body、响应状态码"""
    if flask.request.is_json:
        name = flask.request.json.get('name')  # 获取json请求的参数值name
        password = flask.request.json.get('password')  # 获取json请求的参数值password
        if name in SqlUtil().user() and SqlUtil().user()[name] == password:
            data = {'name': name,
                    'password': hashlib.sha256(password.encode('utf-8')).hexdigest(),
                    'access_token': hashlib.md5('12345678'.encode('utf-8')).hexdigest()
                    }
            res = flask.make_response(json.dumps(data, ensure_ascii=False))  # 构造接口响应体
            res.headers = {'content-length': res.content_length}  # 构造接口响应头
            res.status_code = '200'  # 构造接口状态码
        else:
            data = {'msg': '用户名或密码错误!'}
            res = server.make_response(json.dumps(data, ensure_ascii=False))
            res.status_code = '400'
        return res
    else:
        return json.dumps({"msg": '请传json格式参数!'}, ensure_ascii=False)


if __name__ == '__main__':
    server.run(host='127.0.0.1', port=8888, debug=True)  # 运行服务

第二部分:调用接口

import hashlib
import pytest

from common.request_util import AllRequestMethod as aqm
from common.extract_util import ExtractUtil

@pytest.fixture()
def login(self, request):   # request.param是pytest内request传参固定用法,用于接收传入的值并调用
    method = request.param[0]
    url = request.param[1]
    data = request.param[2]
    res = aqm().request_method(method=method, url=url, json=data)

    return res, data

@pytest.mark.smoke
@pytest.mark.parametrize('login',
                             [("post", "http://127.0.0.1:8888/login", 
                             {'name': 'Millie', 'password': '123456'})],
                             ids=['用户名和密码正确登录成功'],
                             indirect=True)  # 'login'是fixture名称,若多个fixture,使用字符串+逗号隔开的形式,同argnames=的写法
    # [("post", "http://127.0.0.1:8888/login", {'name': 'Millie', 'password': '123456'})同argvalues=的写法
    # ids设置用例名称, indirect=True调用fixture
def test_0_login(self, login):  # excute_sql
    res = login[0]
    data = login[1]
    # 获取access_token
    access_token = res.json().get("access_token")
    # 将access_token写入yaml文件
    ExtractUtil().write_yaml({"access_token": access_token})
    assert res.status_code == 200
    assert res.json().get("name") == data['name']
    assert res.json().get("password") == hashlib.sha256(data['password'].encode('utf-8')).hexdigest()

        
啊哈,失业使我爱上思考。

 

 

标签:库写,name,自定义,python,res,request,json,login,password
From: https://www.cnblogs.com/chxtdbk/p/16743633.html

相关文章

  • Python实验报告——第4章 序列的应用
    实验报告实例01:输出每日一贴代码如下:importdatetime#导入日期时间类#定义一个时间表mot=['今天星期一:\n坚持下去不是因为我很强,而是因为我别无选择。',......
  • Python第四章实验
    importdatetime#导入日期时间类#定义一个列表mot=["今天星期一:\n坚持下去不是因为我很坚强,而是因为我别无选择。","今天星期二:\n含泪播种......
  • 富文本编辑器 quill.js 开发(一): 自定义工具栏
    前言在前端开发中,富文本是一种常见的业务场景,而本文要讲的就是富文本框架quill.js中的自定义工具栏的开发介绍Quill.js是一个具有跨平台和跨浏览器支持的富文本......
  • Effective Python pdf
    高清扫描版下载链接:https://pan.baidu.com/s/1EsEfj690uy-s5LrkVYyIIQ点击这里获取提取码 ......
  • python 连接 sqlite3 文件
     #0.pipinstallpymysql#1.导入pymysqlimportpymsql#2.创建一个数据库连接对象#3.创建游标cursor=conn.cursor()#4.SQL执行cursor.execute(sql)......
  • Taurus.MVC 微服务框架 入门开发教程:项目集成:4、默认安全认证与自定义安全认证。
    系列目录:本系列分为项目集成、项目部署、架构演进三个方向,后续会根据情况调整文章目录。开源地址:​​https://github.com/cyq1162/Taurus.MVC​​本系列第一篇:​​Taurus.MV......
  • 使用python——matplotlib绘制的图表
    #绘制饼状图importmatplotlib.pyplotaspltimportnumpyasnpman=2245505woman=3254584man_prec=man/(man+woman)woman_prec=woman/(man+woman)labels=['男','女']col......
  • python如何依次打印出列表中的元素
    list1=[]forjinrange(1,100):list1.append(j)list2=[]sum1=int(input("输入一个数字:"))#定义一个int类型i=0while(i<=len(list1)):#对输入......
  • python今日分享(内置方法)
    目录一、习题详解二、数据类型的内置方法理论三、整型相关操作四、浮点型相关操作五、字符串相关操作六、列表相关操作今日详解一、习题详解1.计算1-100所有......
  • Python基础入门(七)
    Python基础入门(七)一、数据类型内置方法理论数据类型的内置方法是Python为提高开发效率,每个数据类型内置一些快速实现效果的快捷代码。数据类型调用内置方法格式:数据类......