Tcloud使用介绍

前端github地址:https://github.com/bigbaser/Tcloud
后端github地址:https://github.com/bigbaser/TcloudServer
体验地址:http://tcloud-demo.innotechx.com/#/login (账号:admin 密码:123456)
功能介绍:https://testerhome.com/topics/20491

一、目录介绍

TcloudServer目录

 
目录名称 说明
TcloudServer 项目根目录
apps 多服务目录,该目录下的每个文件夹代表一个服务
deploy 部署文件存放目录
library 通用库
apidoc.json 用于生产 apidoc 文档
docker-compose.yml docker compose 配置文件
local_config.py 配置文件(本地),存放一些敏感配置
Pipfile pipenv 使用的 包管理 配置
public_config.py 通用配置文件
requirement.txt pip install -r 使用的文件

apps目录

要添加新的模块或者服务,需要放置在本目录下。

 
目录名称 说明
auth 用户以及鉴权相关
autotest 自动化测试
extention CI,小工具
flow 流程管理
interface 接口自动化
jobs 定时任务
message 站内信
project 项目
public 公共库
tcdevices 云真机
ws web socket

library目录

通用的方法提取出来分类放到对应文件中。

 
目录名称 说明
api 接口使用相关
notification.py 用来发送信息(站内信和企业微信通知)
oss.py oss 相关
tlogger.py 日志相关
trpc.py rpc 用于服务间调用,目前使用 http 协议

api

目录名称 说明
db.py 数据库相关,包括 db 和 model 定义
exceptions.py 异常定义
parse.py request 请求参数处理
render.py response 数据格式化
security.py request 请求参数格式校验
tBlueprint.py 定义 blueprint,并对 get 和 delete 进行权限校验
tFlask.py 实现 TFlask 继承自 Flask,重写了 run 用于使用 gunicorn 启动,重写了 make_response 用于处理 response 格式化
tMiddleware.py 定义了用于处理 before_request 和 error_request 的中间函数
transfer.py 用于 格式化 数据库获取的结果

单个服务的项目结构,以 auth 为例子

  • 目前整个项目后端是 多服务 结构,每个服务负责的内容相对独立。
  • 由于项目是 前后端分离的,所以后端只提供接口供前端进行调用。
  • 整体架构是基于 flask、flask-sqlalchemy 进行构建的 非典型的 mvc 架构(model-view-controller)

目录结构

 
目录名称 说明
auth 服务名称/服务根目录
business controller 所在目录,用于具体的逻辑构建
models 存放所有的 model,用于定义数据模型和数据库进行对应
settings 每个 服务独有 的配置信息
validatons 用于前面的 parse 和 security 的数据获取和数据校验 配置文件
views 存放所有 views
auth_require.py 鉴权相关
extentins.py 用于定义服务中使用的其他扩展
run.py 服务启动

 

二、新建服务示例

创建一个新的服务,以 auth 中的 user 为例子,创建一个 /v1/user/add 接口

创建目录结构

 

配置 config

apps/user/settings/config.py

try:
from public_config import *
except ImportError:
pass # 端口号是自定义的,需要规划好扩展及其他的服务端口
PORT = 9999
# 服务名称与 目录名称 相同:user
SERVICE_NAME = 'user'

添加 extentions

apps/user/extentions.py

这个文件大部分是通用的库初始化的过程,主要有 初始化 validation,parse 等工具

import os
from os.path import join, abspath, dirname, splitext import yaml from library.api.parse import TParse
from library.api.security import Validation current_path = dirname(abspath(__file__)) yml_json = {} try:
validate_yml_path = join(current_path, 'validations')
for fi in os.listdir(validate_yml_path):
if splitext(fi)[-1] != '.yml':
continue
with open(join(validate_yml_path, fi), 'rb') as f:
yml_json.update(yaml.safe_load(f.read()))
except yaml.YAMLError as e:
print(e) v = Validation(yml_json)
validation = v.validation p = TParse(yml_json)
parse_list_args = p.parse_list_args
parse_list_args2 = p.parse_list_args2
parse_json_form = p.parse_json_form
parse_pwd = p.parse_pwd

定义接口

/user/add

属性
路径 /user/add
方法 POST
参数 {"name":"hello", "nickname":"world", "password":"helloworld"}

首先定义 user 的 model

apps/user/models/users.py

from library.api.db import db, EntityWithNameModel

# 使用 含有 name 的模型进行继承,这样默认便会含有 name,creation_time, modified_time 。
# 数据库表名 与定义的模型名称的小写全拼相同,但驼峰式命名会转化为 _ 的格式。
# User == user, UserDetail == user_detail # 定义 User 模型
class User(EntityWithNameModel):
ACTIVE = 0
DISABLE = 1 nickname = db.Column(db.String(100), nullable=True) # 昵称
password = db.Column(db.String(100), nullable=False) # 密码
status = db.Column(db.Integer, default=ACTIVE) # 状态,0:存在,1:删除

然后编写 用户添加数据库逻辑

apps/user/business/users.py

from flask import current_app

from apps.user.extentions import parse_pwd
from apps.user.models.users import User
from library.api.db import db # 创建 UserBusiness
class UserBusiness(object): @classmethod
def create_new_user_and_bind_roles(cls, username, nickname, password):
# 传入 需要的参数
try:
# 查询是否已经存在当前用户名的用户
ret = User.query.filter(User.name == username, User.status == User.ACTIVE).first()
if ret:
return 103, None
# 构建 User,使用 parse_pwd 加密 password 为密文
n = User(
name=username,
nickname=nickname,
password=parse_pwd(password)
)
# 使用 db 添加到数据库
db.session.add(n)
db.session.commit()
return 0, None
except Exception as e:
current_app.logger.error(str(e))
return 102, str(e)

添加 需要校验数据的 配置文件

apps/user/validations/users.yml
required: True代表字段必填

adduser:
username:
required: True
type: basestring
nickname:
required: True
type: basestring
password:
required: True
type: basestring
returnvalue:
- username
- nickname
- password

然后编写 用户添加接口 逻辑

apps/user/views/users.py

from apps.user.business.users import UserBusiness
from apps.user.extentions import validation, parse_json_form
from library.api.tBlueprint import tblueprint # 创建 blueprint
user = tblueprint("user", __name__, bpname="user", has_view=False) # 定义 /add 路径 和 请求方法 POST
@user.route('/add', methods=['POST'])
@validation('POST:adduser') # 用于数据校验,主要从 validations/users.yml 中读取
def user_index_handler():
# 从 validations/users.yml 中读取
username, nickname, password = parse_json_form('adduser')
ret, msg = UserBusiness.create_new_user_and_bind_roles(username, nickname, password)
return {
"code": ret,
"data": [],
"message": msg
}

定义 app

apps/user/run.py


from apps.user.settings import config if config.SERVER_ENV != 'dev':
# 猴子补丁,用于 gunicorn 启动。
from gevent import monkey
monkey.patch_all()
else:
pass from apps.user.views.users import user
from library.api.tFlask import tflask # 使用 create_app 创建 app
def create_app():
app = tflask(config)
register_blueprints(app)
return app # 注册 blueprint 到 app
def register_blueprints(app):
app.register_blueprint(user, url_prefix="/v1/user") # 启动应用
if __name__ == '__main__':
create_app().run(port=config.PORT)

启动 app

python3 -m apps.user.run 

 

访问 POST

 

登录一下,将返回的 token 填入 header 的 Authorization 中

 

填写 请求的 Body (缺少参数)

类型为 json 格式

{
"username": "test"
}

可以看到 返回为 缺少参数

 

后台报错信息

 

填写 完整的 body

{
"username": "hello",
"password": "helloworld",
"nickname": "world"
}

 

平台目前在持续更新维护,如有疑问或帮助可联系QQ群:839084842

如果项目对你有所帮助或启发,希望能在GitHub点个Star,感谢阅读!

Tcloud 云测平台-使用介绍的更多相关文章

  1. Tcloud 云测平台-多服务框架开源

    技术栈 Python3.7 + Vue前端github地址:https://github.com/bigbaser/Tcloud后端github地址:https://github.com/bigbas ...

  2. APP 兼容性测试之云测平台体验

    前言 兼容性测试主要通过人工或自动化的方式,在需要覆盖的终端设备上进行功能用例执行,查看软件性能.稳定性等是否正常. 对于需要覆盖的终端设备,大型互联网公司,像BAT,基本都有自己的测试实验室,拥有大 ...

  3. 华为云测平台服务再升级!华为M5系列平板调测能力正式上线!

    ​​​6月1日,华为M5系列平板设备兼容性测试和远程真机调试功能在华为终端开放实验室正式上线!助力您的产品在大屏适配上快人一步! 华为终端开放实验室DevEco平台现已提供基于华为M5系列平板设备的兼 ...

  4. 【openstf】自己的云测平台——mac安装openstf

    openstf的github地址:https://github.com/openstf/stf 上图可以清晰看出openstf的使用场景和效果   openstf是一个web应用程序,用于远程调试智能 ...

  5. O365 Manager Plus帮助台委派介绍

    O365 Manager Plus帮助台委派介绍 虽然Office 365允许您在全球任何地方工作,但它提供的管理功能十分不足.当一个组织分布在多个国家/地区时,一个管理员很难单独管理所有用户和邮箱. ...

  6. Docker推出了Docker云,给大家介绍下哈!

    Docker推出了Docker云,给大家介绍下哈. 收到了Docker官网的邮件邀请,他们推出了Docker云:https://cloud.docker.com 账号信息栏目下有: 云提供商:眼下支持 ...

  7. 性能利器 Takin 来了!首个生产环境全链路压测平台正式开源

    6 月 25 日,国内知名的系统高可用专家数列科技宣布开源旗下核心产品能力,对外开放生产全链路压测平台产品的源代码,并正式命名为 Takin. 目前中国人寿.顺丰科技.希音.中通快递.中国移动.永辉超 ...

  8. 点云NDT配准方法介绍

    三维配准中经常被提及的配准算法是ICP迭代的方法,这种方法一般般需要提供一个较好的初值,也就是需要粗配准,同时由于算法本身缺陷,最终迭代结果可能会陷入局部最优,导致配准失败,往往达不到我们想要的效果. ...

  9. 阿里云3台机器组成集群配置ssh免密码登陆

    1 查询阿里云局网ip 注意:需要配置同一地区同一可用区的机器 才是一个局网 2 配置好hosts文件 3 hostname确认也是正确的 4 生成公钥私钥 三台机器同样操作 ssh-keygen - ...

随机推荐

  1. cmd中,查询sqlcmd命令的选项

    像我这样的小白,有时候看到-d,-S,-P这些都不知道什么意思,后面知道了是一些命令的选项.如sqlcmd,打开cmd,输入sqlcmd -?        即可获得选项的含义. .

  2. 给定n个十六进制正整数,输出它们对应的八进制数。

    问题描述 给定n个十六进制正整数,输出它们对应的八进制数. 输入格式 输入的第一行为一个正整数n (1<=n<=10). 接下来n行,每行一个由0~9.大写字母A~F组成的字符串,表示要转 ...

  3. REST 在 Java 中的使用

    REST是一种混合的架构风格,它的由来以及它的架构元素在笔者的前一篇文章<REST 架构风格的由来 & 元素>中已经描述了.本篇主要描述一下J2EE对REST的支持. Java是在 ...

  4. html利用j获取局域网内的本机IP(根据客户端浏览器的ip获取)

    根据客户端浏览器的ip获取 <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type ...

  5. mysql的优化策略

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...

  6. PL/SQL 监听程序当前无法识别连接描述符中请求的服务解决

    PL/SQL 用了几天后再登陆提示监听程序当前无法识别连接描述符中请求的服务,绞尽脑汁各种搜索找到以下解决方案-修改listener.ora文件 一般文件存在:app\Administrator\pr ...

  7. Elasticsearch核心技术(1)--- Docker容器中运行ES、Kibana、Cerebro

    Docker容器中运行ES,Kibana,Cerebro和Logstash安装与数据导入ES 想加强ES有关的知识,看了阮一鸣老师讲的<Elasticsearch核心技术与实战>收获很大, ...

  8. unity编辑器扩展_03(在组件中右击创建一个选项,并通过该选项修改该组件下面的字段的值)

    在组件中右击创建一个选项代码: [MenuItem("CONTEXT/PlayerHealth/InitHealth")]    static void Test5()    {  ...

  9. Java基础之访问权限控制

    Java基础之访问权限控制 四种访问权限 Java中类与成员的访问权限共有四种,其中三种有访问权限修饰词:public,protected,private. Public:权限最大,允许所有类访问,但 ...

  10. ESXi安装报错,No network adapters were detected...

    转载请在文章开头附上原文链接地址:https://www.cnblogs.com/Sunzz/p/11438066.html 报错内容 No network adapters No Network a ...