基于Flask框架实现Mock Server

38 篇文章 6 订阅
6 篇文章 0 订阅


1.目录结构

目录结构

2.UnitTest Mock Server

# A开发 注册功能

def test_demo1():
    pass

# B开发 登录

def test_login():
    pass

# C开发 首页 用到注册和登录的功能数据
# 调用 接口 C开发调用ab开发的功能写完了模块 静静等着 ab开发 测试
# 调试
from class41.demo1 import test_demo1
from class41.demo2 import test_login


def fun():
    # res1和res2都有值 返回1
    res1 = test_demo1()
    res2 = test_login()
    if res1 and res2:
        return 1
    else:
        return 2

import unittest
from unittest import mock

from class41 import demo1, demo2, demo3


class TestCase(unittest.TestCase):
    # 注册的功能 有值给我
    # 登录的功能 有值给我
    def testcase01(self):
        demo3.test_demo1 = mock.Mock(return_value=1)
        demo3.test_login = mock.Mock(return_value=0)
        self.assertEqual(2,demo3.fun())

if __name__ == '__main__':
    unittest.main()

# mock 创建真实的数据 a开发 b开发的功能也没动 不能动他们的代码
# 数据 用mock去创建数据 返回数据 真实的数据 看你写的代码 能不能去使用这些数据
# 开发 a 注册
# b 登录
# c 首页 登录 注册 没注册
# unittest的mock 构造了返回值 给到 a注册 给到了b开发登录的值
# 断言

3.基于Flask框架实现Mock Server


<!doctype html>
<html lang="en">
<head>
<meta http-equiv="Refresh" content="30">
<meta charset="utf-8">
<title>登录界面</title>
<meta name="Keywords" content="用户登录界面" >
<meta name="Description" content="只需登录的时候输入正确,你就可以放心上网,玩得更嗨。">
<link rel="stylesheet" href="css/style.css" type="text/css">
</head>

<body>
<p>显示所有界面</p>
{% for project in projects %}
    项目名称:
    <a href="/build?project={{project}}">{{project}}</a>
{% endfor %}
</body>
</html>


from time import sleep

from selenium import webdriver


def test_baidu():
    driver = webdriver.Chrome()
    driver.get('http://www.baidu.com')
    sleep(3)
    driver.quit()

from time import sleep

from selenium import webdriver


def test_jd():
    driver = webdriver.Chrome()
    driver.get('http://www.jd.com')
    sleep(3)
    driver.quit()

# flask
# 1.导包 from flask import Flask
# 2.实例化 Flask
# 3.创建路由
'''
@app.route('/home')
def first_flask():
    return 'hello flask'
'''
# @app.route(页面路径,请求方式)
# 函数体
# 运行app.run() 实时更新代码 debug = True app.run(debug=True)
from pathlib import Path

import pytest
from flask import Flask, request, jsonify, render_template

app = Flask(__name__)
# 没写请求方式 默认get访问
# @app.route('/api/login')
# def first_flask():
#     return 'hello flask'

# 改成post请求
# @app.route('/api/login',methods=['post'])
# def first_flask():
#     return 'hello flask'

# @app.route('/api/login',methods=['post','get'])
# def first_flask():
#     return 'hello flask'


# 里面 函数传参进来 接受 与requests不同
# @app.route('/api/login',methods=['post','get'])
# def login():
#     print(request.get_json())
#     print(request.get_data())
# 传参

# 题目:
#传参数 登录 传过来的数据 是admin和123456 认为登录成功 否则认为登录失败
# 1.先要获得postman里面传输了什么数据
# 2.拿到对应的数据 判断
# 3.如果传过来的值是admin和123456 登录成功 否则登录失败
# 4.判断传过来的值是admin和123456
# @app.route('/api/login',methods=['post','get'])
# def login():
#     # print(request.get_json())
#     data = request.get_json()
#     username = data['username']
#     password = data['password']
#     if (2 < len(username) <18) and (2<len(password)<18):
#         if username == 'admin' and password == '123456':
#             return '用例成功'
#         else:
#             return '用例失败'
#     else:
#         return '用户名或者密码不符合要求'

# 如果说 登录 需求 用户名和密码长度 不能小于2 大于18 再来一个if
# 这个if再加到上一层 符合日常思维

# 返回数据的 返回的是登录成功 登录失败
# 返回真实点
# @app.route('/api/login',methods=['post','get'])
# def login():
#     # print(request.get_json())
#     data = request.get_json()
#     username = data['username']
#     password = data['password']
#     if (2 < len(username) <18) and (2<len(password)<18):
#         if username == 'admin' and password == '123456':
#             return jsonify({ "adress": { "city": "changsha" }, "httpstatus": 200, "info": { "age": 18, "name": "admin" }, "msg": "success", "token": "23657DGYUSGD126731638712GE18271H" })
#         else:
#             return jsonify({ "code": "001", "msg": "用户名或密码错误" })
#     else:
#         return '用户名或者密码不符合要求'

# 百度 返回来的数据格式 返回来的是html页面
# @app.route('/api/login',methods=['post','get'])
# def home():
#     return '''
#     请输入用户名: <input type='text' name = 'username'>
#     请输入密码: <input type='password' name = 'password'>
#     '''

# 直接返回一个html页面
# @app.route('/api/login',methods=['post','get'])
# def home():
#     return render_template('index2.html')

# 页面中显示数据 html页面中要拿到传过来的数据 html循环数据 projects
# @app.route('/api/login',methods=['post','get'])
# def home():
#     projects = ['project1','project2']
#     return render_template('index3.html',projects = projects)

# 练习 扩展
# 通过在页面上点击链接 能自动触发到我的项目 触发百度启动 文件夹的名称
# app.root_path 根目录 class41
# 这个函数我想要实现的事情是拿到workspace文件中的目录文件和文件名称
@app.route('/api/login',methods=['post','get'])
def home():
    workspace = Path(app.root_path)/'workspace'
    projects = [projects.name for projects in workspace.iterdir()]
    return render_template('index3.html', projects=projects)


# 拿到文件名称之后 点击文件 点击request就运行百度 点击selenium就运行京东
# 在页面上点击request 跳转到build这个路由里面就用pytest触发百度执行 京东执行
@app.route('/build',methods=['post','get'])
def build():
    project_name = request.args.get('project')
    pytest.main([f'workspace/{project_name}'])
    return '构建成功'

# 运行
if __name__ == '__main__':
    # 启动服务 实时更新
    # app.run('127.0.0.1','5555')
    app.run(debug = True)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

司小幽

真诚赞赏,手留余香。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值