测试平台开发

常用技术架构与组件

前端技术架构 bootstrap antd vue react
后端技术架构 django flask spring boot
数据存储 mysql es neo4j
任务调度架构 jenkins
数据报表 echarts vega kibana grafana


测试平台基本流程

后端开发主要技术点

  • 页面渲染:客户端渲染页面(SPA) 服务端渲染页面(模板技术)
  • 数据库连接技术:数据库连接池 数据访问
  • 服务管理:接口 路由 协议
  • 异步任务调度:异步 同步 回调
开发框架
  • 迷你型
    • python Flask
    • java sparkjava
  • 大而全的框架
    • python django
    • java spring全家桶
Flask
  • 路由:get post path 权限控制
  • 请求: get请求 form请求 json请求 cookie管理
  • session: 基于cookie的session机制
  • 模板技术:jinjia2 mustache 建议使用独立的前端技术框架构建SPA
from flask import Flask,escape,request

app=Flask(__name__)

@app.route('/')
def hello():
    name=request.args.get("name","World")
    return f'Hello ,{escape(name)}!'

运行方法:

set FLASK_APP=test_flask.py
flask run

访问方法:


访问效果
数据持久化

传统数据库连接方式:pymysql 纯sql
ORM模型:sqlalchemy mybatis hebernate

pymysql

connect cursor(游标) excute(执行) fetch(获取结果)

import pymysql

db = pymysql.connect(host='localhost',
                     user='user',
                     password='password',
                     db='db',
                     charset='utf8mb4',
                     cursorclass=pymysql.cursors.DictCursor)

def test_db():
    with db.cursor() as cursor:
        #create a new record
        sql = 'show tables'
        cursor.excute(sql)
        res=cursor.fetchall()
        print(res)

def test_select():
    with db.cursor() as cursor:
        #create a new record
        sql = 'select * from table1 where name=%s'
        cursor.excute(sql,["name1"])
        res=cursor.fetchall()
        print(res)
ORM 对象关系映射(object-relational mapping)

简介
是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的“虚拟对象数据库”
ORM模型,脱离SQL,编程模式


连接池管理
from sqlalchemy import create_eninge
from sqlalchemy import Column,Integer,String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

host='localhost'
user='username'
password='password'
db='dbname'
charset='utf8mb4'

Base=declarative_base()

#声明表结构
class User(Base):
    __tablename__ ='tablename1'
    id = Column(Integer,primary_key=True)
    username=Column(String)
    password=Column(String)
    email=Column(String)

def test_orm():
    engine = create_eninge('mysql+pymysql"//{user}:{password}@{host}/{db}'.format(host=host,db=db,user=user,password=password),echo=True)
    #sessionmaker 创建连接
    Session = sessionmaker(bind=engine)
    session=Session()
    #数据插入
    u1=User(
        username='name1',
        password='pwd1',
        email='123@123'
    )
    session.add(u1)
    session.commit()
    #数据查询
    u2=session.query(User).filter_by(username='name1').first()
    print(u2.username)

前端开发主要技术点

vue.js框架

  • vue.js是一套用于构建用户界面的渐进式框架
  • 被设计成自顶向上逐层应用
  • 核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合
  • 学习vue.js 需要一定的html、css、javascript基础
    MVVM模式

    常用组件库
    ElementUI:https://element.eleme.io/#/
    Bootstrap Vue:https://bootstrap-vue.org/
    Vuetify:https://vuetifyjs.com/zh-Hans/
    安装方法
    1.cdn
使用最新版
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
使用明确版本号和构建文件,避免新版本造成的不可预期的破坏
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.11"></script>

2.npm
通过webpack和CLI安装使用
使用

  • 创建挂载元素
  • 引入vue.js
  • 创建一个vue实例
<html>
<body>
<div id="app">
    {{msg}}
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
    new Vue({
        el:'#app',
        data:{
            msg:'hello world123'
        }
    })
</script>
</body>
</html>

vue内部指令

  • v-if v-else 元素是否存在 不存在的话不会在dom元素中展示
  • v-show 元素是否显示 不管是否显示都会在dom元素中展示
  • v-for 循环
  • v-on 绑定事件 可以简写成@
  • v-bind 绑定动态属性 可以简写成:
  • v-model 绑定数据 可以绑定数据,若是数据发生更改,也随之更改
<html>
<body>
<div id="app">{{msg}}
    <div v-if="show">展示</div>
    <div v-else>不展示</div>
    <div v-show="show">show展示</div>
    <p v-for="(value,index) in arr">{{value}}:{{index}}</p>
    <p v-for="(value,key) in obj">{{value}}:{{key}}</p>
    <p v-for="value in obj1">{{value.name}}:{{value.age}}:{{value.sex}}</p>
    <!-- v-on 可以简写成@ <button @:click="add">加一</button> -->
    <button v-on:click="add">加一</button>
    <div>{{count}}</div>
    <!---v-bind可以简写成冒号的方式 <div style="height:100px;width:100px;border:1px solid #000" v-bind:style="bgcolor"></div> -->
    <div style="height:100px;width:100px;border:1px solid #000" :style="bgcolor"></div>
    <input type="text" v-model="text">
    <button @click="showtext">打印</button>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
    new Vue({
        el:'#app',
        data:{
            msg:'hello world123',
            show:false,
            arr:['a','b'],
            obj:{'name':'zhangsan','age':20,'sex':'男'},
            obj1:[{'name':'A1','age':20,'sex':'男'},{'name':'A2','age':21, 'sex':'女'},{'name':'A3','age':22,'sex':'男'}],
            count:1,
            bgcolor:{ backgroundColor: '#ccc'},
            text:'123'
        },
        methods:{
            add(){ this.count++ },
            showtext(){console.log(this.text)}
        }
    })
</script>
</body>
</html>

vue生命周期

  • beforeCreate
  • created
  • beforeMount 在dom元素加载完成之前
  • mounted
  • beforeUpdate
  • updated
  • beforeDestroy
  • destroyed
    用法示例:
<script>
    new Vue({
        el:'#app',
        data:{ msg:'hello world123', },
        methods:{
            showtext(){console.log(this.text) } },
        created(){
            console.log('加载完成')
        }
    })

vue-cli
基于webpack构建,并带有合理的默认配置
webpack是一个javascript应用程序的静态模块打包器

技术栈

  • vue.js 前端页面数据渲染
  • vue-router 路由管理
  • vurtify ui组件
  • axios 网络请求
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,490评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,581评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,830评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,957评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,974评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,754评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,464评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,357评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,847评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,995评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,137评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,819评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,482评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,023评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,149评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,409评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,086评论 2 355

推荐阅读更多精彩内容