精华内容
下载资源
问答
  • 如何写测试案例

    2019-09-16 08:12:11
    测试文档主要包括: 1.测试计划 2.测试用例 3.测试记录报告 4.测试问题报告 5.测试评估报告 一、测试计划 1.引言 1 ...1.2项目背景 2 1.3定义 2 1.4参考资料 ...
    测试文档主要包括: 
    1.测试计划 
    2.测试用例 
    3.测试记录报告 
    4.测试问题报告 
    5.测试评估报告 

    一、测试计划 


    1.引言 1 
    1.1编写目的 1 
    1.2项目背景 2 
    1.3定义 2 
    1.4参考资料 2 
    2.任务概述 2 
    2.1目标 2 
    2.2运行环境 2 
    2.3需求概述 2 
    2.4条件与限制 2 
    3.计划 3 
    3.1测试方案 3 
    3.2测试项目 3 
    3.3测试准备 3 
    3.4测试机构及人员 3 
    4.测试项目说明 3 
    4.1测试项目名称及测试内容 3 
    4.2测试用例 3 
    4.3进度 3 
    4.4条件 3 
    4.5测试资料 3 
    5.评价 3 
    5.1范围 3 
    5.2准则 3 


    1.引言 
    1.1编写目的 
    【阐明编写测试计划的目的,指明读者对象。】 

    1.2项目背景 
    【说明项目的来源、委托单位及主管部门。】 
    1.3定义 
    【列出测试计划中所用到的专门术语的定义和缩写词的原意。】 
    1.4参考资料 
    【列出有关资料的作者、标题、编号、发表日期、出版单位或资料来源,可包括:   
    a. 项目的计划任务书、合同或批文; 
    b. 项目开发计划; 
    c. 需求规格说明书; 
    d. 概要设计说明书; 
    e. 详细设计说明书; 
    f. 用户操作手册; 
    g. 本测试计划中引用的其他资料、采用的软件开发标准或规范。】 
    2.任务概述 
    2.1目标 
    2.2运行环境 
    2.3需求概述 
    2.4条件与限制 


    3.计划 
    3.1测试方案 
    【说明确定测试方法和选取测试用例的原则。】 
    3.2测试项目 
    【列出组装测试和确认测试中每一项测试的内容、名称、目的和进度。】 
    3.3测试准备 

    3.4测试机构及人员 
    【测试机构名称、负责人和职责。】 
    4.测试项目说明 
    【按顺序逐个对测试项目做出说明:】 
    4.1测试项目名称及测试内容 
    4.2测试用例 
    4.2.1输入 
    【输入的数据和输入命令。】 
    4.2.2输出 
    【预期的输出数据。】 
    4.2.3步骤及操作 
    4.2.4允许偏差 
    【给出实测结果与预期结果之间允许偏差的范围。】 
    4.3进度 
    4.4条件 
    【给出测试对资源的特殊要求,如设备、软件、人员等。】 
    4.5测试资料 
    【说明测试所需的资料。】 


    5.评价 
    5.1范围 
    【说明所完成的各项测试说明问题的范围及其局限性。】 
    5.2准则 
    【说明评价测试结果的准则。】 

    二、测试分析报告 

    1.引言 1 
    1.1编写目的 1 
    1.2项目背景 1 
    1.3定义 1 
    1.4参考资料 2 
    2.测试计划执行情况 2 
    2.1测试项目 2 
    2.2测试机构和人员 2 
    2.3测试结果 2 
    3.软件需求测试结论 2 
    4.评价 3 
    4.1软件能力 3 
    4.2缺陷和限制 3 
    4.3建议 3 
    4.4测试结论 3 


    1.引言 
    1.1编写目的 
    【阐明编写测试分析报告的目的,指明读者对象。】 

    1.2项目背景 
    【说明项目的来源、委托单位及主管部门。】 
    1.3定义 
    【列出测试分析报告中所用到的专门术语的定义和缩写词的原文。】 
    1.4参考资料 
    【列出有关资料的作者、标题、编号、发表日期、出版单位或资料来源,可包括:   
    a. 项目的计划任务书、合同或批文; 
    b. 项目开发计划; 
    c. 需求规格说明书; 
    d. 概要设计说明书; 
    e. 详细设计说明书; 
    f. 用户操作手册; 
    g. 测试计划; 
    h. 测试分析报告所引用的其他资料、采用的软件工程标准或软件工作规范。】 
    2.测试计划执行情况   
    2.1测试项目 
    【列出每一测试项目的名称、内容和目的。】 
    2.2测试机构和人员 
    【给出测试机构名称、负责人和参与测试人员名单。】 
    2.3测试结果 
    【按顺序给出每一测试项目的: 
    a. 实测结果数据; 
    b. 与预期结果数据的偏差; 
    c. 该项测试表明的事实; 
    d. 该项测试发现的问题。】 

    3.软件需求测试结论 
    【按顺序给出每一项需求测试的结论。包括: 
    a. 证实的软件能力;   
    b. 局限性(即项需求未得到充分测试的情况及原因)。】 
    4.评价 
    4.1软件能力 
    【经过测试所表明的软件能力。】 
    4.2缺陷和限制 
    【说明测试所揭露的软件缺陷和不足,以及可能给软件运行带来的影响。】 
    4.3建议 
    【提出为弥补上述缺陷的建议。】 
    4.4测试结论 
    【说明能否通过。】 

    转载于:https://my.oschina.net/abcijkxyz/blog/720150

    展开全文
  • 需求背景描述 想对mycat进行实践操作,结合一个数据库集群是必不可少的,因为它是一款数据库中间件产品,如果没有数据库作为基础,它的存在如同空中楼阁。 所以我们在进行实践mycat案例之前,需要搭建一个数据库集群...

    前置文章:MyCat入门篇-下载安装

    MyCat的使用案例

    需求背景描述

    想对mycat进行实践操作,结合一个数据库集群是必不可少的,因为它是一款数据库中间件产品,如果没有数据库作为基础,它的存在如同空中楼阁。

    所以我们在进行实践mycat案例之前,需要搭建一个数据库集群,我们这里选择比较轻量级的MySQL数据库来作为mycat数据库中间件的底层数据库集群环境。

    那么如何快速搭建一个MySQL集群环境呢?
    使用docker容器技术将是最佳的选择。接下来我将带领大家使用docker容器技术快速的搭建一个MySQL的主从复制的集群环境。

    完成了MySQL组从复制的搭建之后,我会把数据库中间件mycat也集成到MySQL集群环境中来,结合mycat中间件来对MySQL实现读写分离、垂直拆分、水平拆分等操作。

    容器节点信息

    使用docker启动如下容器

    • 6个MySQL容器,3主3从;
    • 2个mycat容器,1主1备;
    • 2个搭建mycat高可用的HAProxy+Keepalive容器,在每台服务器上面都安装上HAProxy和Keepalive;

    具体信息如下:

    序号 主机名称 IP地址 角色 简称 MySQL用户名 MySQL密码 容器内端口 容器外映射端口
    1 master1.mysql 172.19.0.11 主节点1 M1 root root 3306 3311
    2 slave1.mysql 172.19.0.12 从节点1 S1 root root 3306 3312
    3 master2.mysql 172.19.0.21 主节点2 M2 root root 3306 3321
    4 slave2.mysql 172.19.0.22 从节点2 S2 root root 3306 3322
    5 master3.mysql 172.19.0.31 主节点3 M3 root root 3306 3331
    6 slave3.mysql 172.19.0.32 从节点3 S3 root root 3306 3332
    7 mycat1.mycat 172.19.0.41 mycat主节点1 MY1 mycat mycat 8066,9066 8041,9041
    8 mycat2.mycat 172.19.0.42 mycat备用节点 MY2 mycat mycat 8066,9066 8042,9042
    9 haproxy1.mysql 172.19.0.51 节点1 HK1
    10 keepalive1.mysql 172.19.0.51 节点1 HK1
    11 haproxy2.mysql 172.19.0.52 节点2 HK2
    12 keepalive2.mysql 172.19.0.52 节点2 HK2

    整体网络拓扑如下所示:
    在这里插入图片描述

    启动MySQL容器

    拉取MySQL镜像

    我们实验的时候是基于MySQL5.7.31的版本,所以我们从docker hub上拉取的时候,指定拉取的MySQL版本号。

    • 使用如下命令拉取并查看拉取结果:
    docker pull mysql:5.7.31
    docker images
    
    • 具体示例如下所示:
    ➜  Data docker pull mysql:5.7.31
    5.7.31: Pulling from library/mysql
    bb79b6b2107f: Downloading [==>              ]  1.089MB/27.09MB
    49e22f6fb9f7: Download complete
    842b1255668c: Downloading [===================>]  1.609MB/4.178MB
    9f48d1f43000: Downloading
    c693f0615bce: Waiting
    8a621b9dbed2: Waiting
    0807d32aef13: Waiting
    6d2fc69dfa35: Waiting
    56153548dd2c: Waiting
    3bb6ba940303: Waiting
    3e1888da91a7: Waiting
    5.7.31: Pulling from library/mysql
    bb79b6b2107f: Pull complete
    49e22f6fb9f7: Pull complete
    842b1255668c: Pull complete
    9f48d1f43000: Pull complete
    c693f0615bce: Pull complete
    8a621b9dbed2: Pull complete
    0807d32aef13: Pull complete
    6d2fc69dfa35: Pull complete
    56153548dd2c: Pull complete
    3bb6ba940303: Pull complete
    3e1888da91a7: Pull complete
    Digest: sha256:b3dc8d10307ab7b9ca1a7981b1601a67e176408be618fc4216d137be37dae10b
    Status: Downloaded newer image for mysql:5.7.31
    docker.io/library/mysql:5.7.31
    ➜  Data docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    mysql               5.7.31              42cdba9f1b08        10 days ago         448MB
    ➜  Data
    
    准备MySQL配置文件

    因为我们是使用容器启动MySQL服务,所以在启动MySQL服务之前,先准备好MySQL的配置文件,然后把配置文件挂载到容器当中,方便在后面配置主从同步的时候直接在本地挂载的目录下面修改配置文件。

    我在本地的家目录下面,创建了一个docker_mysql_conf文件夹,这个文件夹下面分了6个子目录文件夹,如下所示:

    • MySQL的配置文件目录如下:
    ➜  docker_mysql_conf ll
    total 0
    drwxr-xr-x  3 fengwenjian  staff    96B 10 19 14:31 master1
    drwxr-xr-x  3 fengwenjian  staff    96B 10 19 14:32 master2
    drwxr-xr-x  3 fengwenjian  staff    96B 10 19 14:32 master3
    drwxr-xr-x  3 fengwenjian  staff    96B  9 29 15:49 slave1
    drwxr-xr-x  3 fengwenjian  staff    96B  9 29 15:50 slave2
    drwxr-xr-x  3 fengwenjian  staff    96B 10 18 12:17 slave3
    
    • MySQL的配置文件如下:
    ➜  docker_mysql_conf pwd
    /Users/fengwenjian/docker_mysql_conf
    ➜  docker_mysql_conf ll */my.cnf
    -rw-r--r--@ 1 fengwenjian  staff   1.3K 10 19 14:31 master1/my.cnf
    -rw-r--r--  1 fengwenjian  staff   1.1K 10 19 14:32 master2/my.cnf
    -rw-r--r--  1 fengwenjian  staff   1.1K 10 19 14:32 master3/my.cnf
    -rw-r--r--  1 fengwenjian  staff   1.2K  9 29 15:49 slave1/my.cnf
    -rw-r--r--  1 fengwenjian  staff   1.2K  9 29 15:50 slave2/my.cnf
    -rw-r--r--  1 fengwenjian  staff   1.2K 10 18 12:17 slave3/my.cnf
    ➜  docker_mysql_conf
    

    具体每一个节点的配置文件,下面分别贴出各自my.cnf的内容

    • master1的my.cnf配置如下:
    ➜  docker_mysql_conf cat master1/my.cnf
    [mysqld]
    
    # 主服务器唯一ID,使用主机IP地址的最后一个域值来作为MySQL集群中的serverid
    server-id=11
    
    # 启用二进制日志
    log-bin=mysql-bin
    
    # 设置不要复制的数据库(可设置多个)
    #binlog-ignore-db=mysql
    #binlog-ignore-db=information_schema
    
    # 设置需要复制的数据库
    #binlog-do-db=test_slave
    
    # 设置logbin格式
    #binlog_format=STATEMENT
    binlog_format=row
    binlog_row_image=minimal
    
    # 在作为从数据库的时候,有写入操作也要更新二进制日志文件
    #log-slave-updates
    log_slave_updates=on
    
    # 表示自增长字段每次递增的量,指自增字段的起始值,其默认值是1,取值范围是1 .. 65535
    auto-increment-increment=2
    
    # 表示自增长字段从哪个数开始,指字段一次递增多少,他的取值范围是1 .. 65535
    auto-increment-offset=1
    
    # 数据库编码设置
    character-set-server=utf8mb4
    collation-server=utf8mb4_general_ci
    #collation-server=utf8mb4_unicode_ci
    
    # 开启记录日志位置的方式为表的方式,而不是使用文件的方式。
    master_info_repository=TABLE
    relay_log_info_repository=TABLE
    
    # 从库需要配置下面的选项
    #read_only=on
    
    # 慢查询日志
    slow_query_log=ON
    #log_output=table
    slow_query_log_file=/var/lib/mysql/master1-slow.log
    #slow_query_log_file=/opt/mysql-5.7.29/data/slow.log
    long_query_time=3
    
    # 配置从库同步数据的线程数
    slave_parallel_type='logical_clock'
    slave_parallel_workers=6
    
    ➜  docker_mysql_conf
    

    • slave1的my.cnf配置如下:
    ➜  docker_mysql_conf cat slave1/my.cnf
    [mysqld]
    
    # 主服务器唯一ID,使用主机IP地址的最后一个域值来作为MySQL集群中的serverid
    server-id=12
    
    # 启用二进制日志
    #log-bin=mysql-bin
    
    # 设置不要复制的数据库(可设置多个)
    #binlog-ignore-db=mysql
    #binlog-ignore-db=information_schema
    
    # 设置需要复制的数据库
    #binlog-do-db=test_slave
    
    # 设置logbin格式
    #binlog_format=STATEMENT
    #binlog_format=row
    #binlog_row_image=minimal
    
    # 在作为从数据库的时候,有写入操作也要更新二进制日志文件
    #log-slave-updates
    #log_slave_updates=on
    
    # 表示自增长字段每次递增的量,指自增字段的起始值,其默认值是1,取值范围是1 .. 65535
    #auto-increment-increment=2
    
    # 表示自增长字段从哪个数开始,指字段一次递增多少,他的取值范围是1 .. 65535
    #auto-increment-offset=1
    
    # 数据库编码设置
    character-set-server=utf8mb4
    collation-server=utf8mb4_general_ci
    #collation-server=utf8mb4_unicode_ci
    
    # 开启记录日志位置的方式为表的方式,而不是使用文件的方式。
    master_info_repository=TABLE
    relay_log_info_repository=TABLE
    
    # 从库需要配置下面的选项
    read_only=on
    
    # 启用中继日志
    relay-log=mysql-relay
    
    
    # 配置从库同步数据的线程数
    slave_parallel_type='logical_clock'
    slave_parallel_workers=6
    
    ➜  docker_mysql_conf
    

    • master2的my.cnf配置如下:
    ➜  docker_mysql_conf cat master2/my.cnf
    [mysqld]
    
    # 主服务器唯一ID,使用主机IP地址的最后一个域值来作为MySQL集群中的serverid
    server-id=21
    
    # 启用二进制日志
    log-bin=mysql-bin
    
    # 设置不要复制的数据库(可设置多个)
    #binlog-ignore-db=mysql
    #binlog-ignore-db=information_schema
    
    # 设置需要复制的数据库
    #binlog-do-db=test_slave
    
    # 设置logbin格式
    #binlog_format=STATEMENT
    binlog_format=row
    binlog_row_image=minimal
    
    # 在作为从数据库的时候,有写入操作也要更新二进制日志文件
    #log-slave-updates
    log_slave_updates=on
    
    # 表示自增长字段每次递增的量,指自增字段的起始值,其默认值是1,取值范围是1 .. 65535
    auto-increment-increment=2
    
    # 表示自增长字段从哪个数开始,指字段一次递增多少,他的取值范围是1 .. 65535
    auto-increment-offset=2
    
    # 数据库编码设置
    character-set-server=utf8mb4
    collation-server=utf8mb4_general_ci
    #collation-server=utf8mb4_unicode_ci
    
    # 开启记录日志位置的方式为表的方式,而不是使用文件的方式。
    master_info_repository=TABLE
    relay_log_info_repository=TABLE
    
    # 从库需要配置下面的选项
    #read_only=on
    
    # 配置从库同步数据的线程数
    slave_parallel_type='logical_clock'
    slave_parallel_workers=6
    
    ➜  docker_mysql_conf
    

    • slave2的my.cnf配置如下:
    ➜  docker_mysql_conf cat slave2/my.cnf
    [mysqld]
    
    # 主服务器唯一ID,使用主机IP地址的最后一个域值来作为MySQL集群中的serverid
    server-id=22
    
    # 启用二进制日志
    #log-bin=mysql-bin
    
    # 设置不要复制的数据库(可设置多个)
    #binlog-ignore-db=mysql
    #binlog-ignore-db=information_schema
    
    # 设置需要复制的数据库
    #binlog-do-db=test_slave
    
    # 设置logbin格式
    #binlog_format=STATEMENT
    #binlog_format=row
    #binlog_row_image=minimal
    
    # 在作为从数据库的时候,有写入操作也要更新二进制日志文件
    #log-slave-updates
    #log_slave_updates=on
    
    # 表示自增长字段每次递增的量,指自增字段的起始值,其默认值是1,取值范围是1 .. 65535
    #auto-increment-increment=2
    
    # 表示自增长字段从哪个数开始,指字段一次递增多少,他的取值范围是1 .. 65535
    #auto-increment-offset=1
    
    # 数据库编码设置
    character-set-server=utf8mb4
    collation-server=utf8mb4_general_ci
    #collation-server=utf8mb4_unicode_ci
    
    # 开启记录日志位置的方式为表的方式,而不是使用文件的方式。
    master_info_repository=TABLE
    relay_log_info_repository=TABLE
    
    # 从库需要配置下面的选项
    read_only=on
    
    # 启用中继日志
    relay-log=mysql-relay
    
    
    # 配置从库同步数据的线程数
    slave_parallel_type='logical_clock'
    slave_parallel_workers=6
    
    ➜  docker_mysql_conf
    

    • master3的my.cnf配置如下:
    ➜  docker_mysql_conf cat master3/my.cnf
    [mysqld]
    
    # 主服务器唯一ID,使用主机IP地址的最后一个域值来作为MySQL集群中的serverid
    server-id=31
    
    # 启用二进制日志
    log-bin=mysql-bin
    
    # 设置不要复制的数据库(可设置多个)
    #binlog-ignore-db=mysql
    #binlog-ignore-db=information_schema
    
    # 设置需要复制的数据库
    #binlog-do-db=test_slave
    
    # 设置logbin格式
    #binlog_format=STATEMENT
    binlog_format=row
    binlog_row_image=minimal
    
    # 在作为从数据库的时候,有写入操作也要更新二进制日志文件
    #log-slave-updates
    log_slave_updates=on
    
    # 表示自增长字段每次递增的量,指自增字段的起始值,其默认值是1,取值范围是1 .. 65535
    auto-increment-increment=2
    
    # 表示自增长字段从哪个数开始,指字段一次递增多少,他的取值范围是1 .. 65535
    auto-increment-offset=1
    
    # 数据库编码设置
    character-set-server=utf8mb4
    collation-server=utf8mb4_general_ci
    #collation-server=utf8mb4_unicode_ci
    
    # 开启记录日志位置的方式为表的方式,而不是使用文件的方式。
    master_info_repository=TABLE
    relay_log_info_repository=TABLE
    
    # 从库需要配置下面的选项
    #read_only=on
    
    # 配置从库同步数据的线程数
    slave_parallel_type='logical_clock'
    slave_parallel_workers=6
    
    ➜  docker_mysql_conf
    

    • slave3的my.cnf配置如下:
    ➜  docker_mysql_conf cat slave3/my.cnf
    [mysqld]
    
    # 主服务器唯一ID,使用主机IP地址的最后一个域值来作为MySQL集群中的serverid
    server-id=32
    
    # 启用二进制日志
    #log-bin=mysql-bin
    
    # 设置不要复制的数据库(可设置多个)
    #binlog-ignore-db=mysql
    #binlog-ignore-db=information_schema
    
    # 设置需要复制的数据库
    #binlog-do-db=test_slave
    
    # 设置logbin格式
    #binlog_format=STATEMENT
    #binlog_format=row
    #binlog_row_image=minimal
    
    # 在作为从数据库的时候,有写入操作也要更新二进制日志文件
    #log-slave-updates
    #log_slave_updates=on
    
    # 表示自增长字段每次递增的量,指自增字段的起始值,其默认值是1,取值范围是1 .. 65535
    #auto-increment-increment=2
    
    # 表示自增长字段从哪个数开始,指字段一次递增多少,他的取值范围是1 .. 65535
    #auto-increment-offset=1
    
    # 数据库编码设置
    character-set-server=utf8mb4
    collation-server=utf8mb4_general_ci
    #collation-server=utf8mb4_unicode_ci
    
    # 开启记录日志位置的方式为表的方式,而不是使用文件的方式。
    master_info_repository=TABLE
    relay_log_info_repository=TABLE
    
    # 从库需要配置下面的选项
    read_only=on
    
    # 启用中继日志
    relay-log=mysql-relay
    
    
    # 配置从库同步数据的线程数
    slave_parallel_type='logical_clock'
    slave_parallel_workers=6
    
    ➜  docker_mysql_conf
    

    准备虚拟网段

    做这一步的原因主要是避免容器再次启动的时候,容器的IP地址变动导致,从而导致MySQL主从同步的时候出现主从节点混乱问题的发生。

    一开始的时候我没有指定MySQL各个容器的IP地址和hostname,后来我验证mycat读写分离和自动切换的时候,不断的启动和停止MySQL的容器,导致同一个容器镜像重启的IP地址和第一次创建的时候IP地址不一致,进而导致MySQL主从复制的关系混乱了。所以在创建容器的时候,指定好每一个容器的IP地址和hostname。

    • 使用下面命令创建虚拟网段
    docker network create --subnet=172.19.0.0/24 mysql-cluster-network
    

    参数解释说明:

    1. –subnet=172.19.0.0/24:指定网段
    2. mysql-cluster-network:网段的名字
    • 使用下面命令查看网段内容:
    docker inspect mysql-cluster-network
    docker network ls
    

    • 网段创建示例:
    ➜  docker_mysql_conf docker network ls
    NETWORK ID          NAME                DRIVER              SCOPE
    c2c0f3ce99ae        bridge              bridge              local
    20a529083ab9        host                host                local
    e550bcb69d18        none                null                local
    ➜  docker_mysql_conf
    ➜  docker_mysql_conf docker network create --subnet=172.19.0.0/24 mysql-cluster-network
    3192d3b2360eedf304023e616a7256254622031368d215146e6b28a09a11932f
    ➜  docker_mysql_conf
    ➜  docker_mysql_conf docker network ls
    NETWORK ID          NAME                    DRIVER              SCOPE
    c2c0f3ce99ae        bridge                  bridge              local
    20a529083ab9        host                    host                local
    3192d3b2360e        mysql-cluster-network   bridge              local
    e550bcb69d18        none                    null                local
    ➜  docker_mysql_conf
    

    启动MySQL容器

    使用docker run命令启动容器,具体命令参考如下。

    • 启动MySQL容器的命令如下:
    docker run --net=mysql-cluster-network --hostname master1.mysql --ip 172.19.0.11 --name mysql-master1 -d -v /Users/fengwenjian/docker_mysql_conf/master1:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -e TZ="Asia/Shanghai" -p 3311:3306 mysql:5.7.31
    
    docker run --net=mysql-cluster-network --hostname slave1.mysql --ip 172.19.0.12 --name mysql-slave1 -d -v /Users/fengwenjian/docker_mysql_conf/slave1:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -e TZ="Asia/Shanghai" -p 3312:3306 mysql:5.7.31
    
    docker run --net=mysql-cluster-network --hostname master2.mysql --ip 172.19.0.21 --name mysql-master2 -d -v /Users/fengwenjian/docker_mysql_conf/master2:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -e TZ="Asia/Shanghai" -p 3321:3306 mysql:5.7.31
    
    docker run --net=mysql-cluster-network --hostname slave2.mysql --ip 172.19.0.22 --name mysql-slave2 -d -v /Users/fengwenjian/docker_mysql_conf/slave2:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -e TZ="Asia/Shanghai" -p 3322:3306 mysql:5.7.31
    
    docker run --net=mysql-cluster-network --hostname master3.mysql --ip 172.19.0.31 --name mysql-master3 -d -v /Users/fengwenjian/docker_mysql_conf/master3:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -e TZ="Asia/Shanghai" -p 3331:3306 mysql:5.7.31
    
    docker run --net=mysql-cluster-network --hostname slave3.mysql --ip 172.19.0.32 --name mysql-slave3 -d -v /Users/fengwenjian/docker_mysql_conf/slave3:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -e TZ="Asia/Shanghai" -p 3332:3306 mysql:5.7.31
    

    • 创建示例如下:
    ➜  docker_mysql_conf docker run --net=mysql-cluster-network --hostname master1.mysql --ip 172.19.0.11 --name mysql-master1 -d -v /Users/fengwenjian/docker_mysql_conf/master1:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -e TZ="Asia/Shanghai" -p 3311:3306 mysql:5.7.31
    f3a642b89001be6c066c293721a4024dcc3ad4ebc65a4e3076ebfc0ec8077d6f
    ➜  docker_mysql_conf
    ➜  docker_mysql_conf docker run --net=mysql-cluster-network --hostname slave1.mysql --ip 172.19.0.12 --name mysql-slave1 -d -v /Users/fengwenjian/docker_mysql_conf/slave1:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -e TZ="Asia/Shanghai" -p 3312:3306 mysql:5.7.31
    cb5c2dbb291b7e25756b4ed2b2851aa8ca4ac312992955db88454e46b0059b98
    ➜  docker_mysql_conf
    ➜  docker_mysql_conf docker run --net=mysql-cluster-network --hostname master2.mysql --ip 172.19.0.21 --name mysql-master2 -d -v /Users/fengwenjian/docker_mysql_conf/master2:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -e TZ="Asia/Shanghai" -p 3321:3306 mysql:5.7.31
    0756b65f118821f80cc396d4e80b7c7aa14c5a07a82637022a927dbef93e892e
    ➜  docker_mysql_conf
    ➜  docker_mysql_conf docker run --net=mysql-cluster-network --hostname slave2.mysql --ip 172.19.0.22 --name mysql-slave2 -d -v /Users/fengwenjian/docker_mysql_conf/slave2:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -e TZ="Asia/Shanghai" -p 3322:3306 mysql:5.7.31
    87e4940f6e2c8acafcdb42d673de2b55986870ebaaa779613480c5479dfaae6a
    ➜  docker_mysql_conf
    ➜  docker_mysql_conf docker run --net=mysql-cluster-network --hostname master3.mysql --ip 172.19.0.31 --name mysql-master3 -d -v /Users/fengwenjian/docker_mysql_conf/master3:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -e TZ="Asia/Shanghai" -p 3331:3306 mysql:5.7.31
    5841f97bc021358ab9d355521749d6c905a49ff6ac79e7617da910d8b1d6f1ef
    ➜  docker_mysql_conf
    ➜  docker_mysql_conf docker run --net=mysql-cluster-network --hostname slave3.mysql --ip 172.19.0.32 --name mysql-slave3 -d -v /Users/fengwenjian/docker_mysql_conf/slave3:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -e TZ="Asia/Shanghai" -p 3332:3306 mysql:5.7.31
    8a54ec54de08f7c3fb5e8771ded7195d6593fbb633269a51f72e46f6c9970c71
    ➜  docker_mysql_conf
    

    • 容器启动后的结果如下所示:
    ➜  docker_mysql_conf docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                               NAMES
    8a54ec54de08        mysql:5.7.31        "docker-entrypoint.s…"   About a minute ago   Up About a minute   33060/tcp, 0.0.0.0:3332->3306/tcp   mysql-slave3
    5841f97bc021        mysql:5.7.31        "docker-entrypoint.s…"   About a minute ago   Up About a minute   33060/tcp, 0.0.0.0:3331->3306/tcp   mysql-master3
    87e4940f6e2c        mysql:5.7.31        "docker-entrypoint.s…"   About a minute ago   Up About a minute   33060/tcp, 0.0.0.0:3322->3306/tcp   mysql-slave2
    0756b65f1188        mysql:5.7.31        "docker-entrypoint.s…"   About a minute ago   Up About a minute   33060/tcp, 0.0.0.0:3321->3306/tcp   mysql-master2
    cb5c2dbb291b        mysql:5.7.31        "docker-entrypoint.s…"   About a minute ago   Up About a minute   33060/tcp, 0.0.0.0:3312->3306/tcp   mysql-slave1
    f3a642b89001        mysql:5.7.31        "docker-entrypoint.s…"   About a minute ago   Up About a minute   33060/tcp, 0.0.0.0:3311->3306/tcp   mysql-master1
    ➜  docker_mysql_conf
    

    • 查看各个容器启动后的主机名称和IP地址,结果如下所示:

    从下面的结果可以看出,每一个MySQL数据库实例的IP地址和主机名称和我们前面规划的IP地址和主机名称是可以对上的。

    ➜  docker_mysql_conf docker exec mysql-master1 /bin/cat /etc/hosts
    127.0.0.1	localhost
    ::1	localhost ip6-localhost ip6-loopback
    fe00::0	ip6-localnet
    ff00::0	ip6-mcastprefix
    ff02::1	ip6-allnodes
    ff02::2	ip6-allrouters
    172.19.0.11	master1.mysql master1
    ➜  docker_mysql_conf
    ➜  docker_mysql_conf docker exec mysql-slave1 /bin/cat /etc/hosts
    127.0.0.1	localhost
    ::1	localhost ip6-localhost ip6-loopback
    fe00::0	ip6-localnet
    ff00::0	ip6-mcastprefix
    ff02::1	ip6-allnodes
    ff02::2	ip6-allrouters
    172.19.0.12	slave1.mysql slave1
    ➜  docker_mysql_conf
    ➜  docker_mysql_conf docker exec mysql-master2 /bin/cat /etc/hosts
    127.0.0.1	localhost
    ::1	localhost ip6-localhost ip6-loopback
    fe00::0	ip6-localnet
    ff00::0	ip6-mcastprefix
    ff02::1	ip6-allnodes
    ff02::2	ip6-allrouters
    172.19.0.21	master2.mysql master2
    ➜  docker_mysql_conf
    ➜  docker_mysql_conf docker exec mysql-slave2 /bin/cat /etc/hosts
    127.0.0.1	localhost
    ::1	localhost ip6-localhost ip6-loopback
    fe00::0	ip6-localnet
    ff00::0	ip6-mcastprefix
    ff02::1	ip6-allnodes
    ff02::2	ip6-allrouters
    172.19.0.22	slave2.mysql slave2
    ➜  docker_mysql_conf
    ➜  docker_mysql_conf docker exec mysql-master3 /bin/cat /etc/hosts
    127.0.0.1	localhost
    ::1	localhost ip6-localhost ip6-loopback
    fe00::0	ip6-localnet
    ff00::0	ip6-mcastprefix
    ff02::1	ip6-allnodes
    ff02::2	ip6-allrouters
    172.19.0.31	master3.mysql master3
    ➜  docker_mysql_conf
    ➜  docker_mysql_conf docker exec mysql-slave3 /bin/cat /etc/hosts
    127.0.0.1	localhost
    ::1	localhost ip6-localhost ip6-loopback
    fe00::0	ip6-localnet
    ff00::0	ip6-mcastprefix
    ff02::1	ip6-allnodes
    ff02::2	ip6-allrouters
    172.19.0.32	slave3.mysql slave3
    ➜  docker_mysql_conf
    
    连接MySQL服务

    在本地使用mysql命令来连接MySQL服务,测试是否可以正常连接到各个MySQL实例。
    各个MySQL服务实例,用端口号来区分开来。

    • 使用如下命令来连接MySQL服务
    # 登录master1
    mysql -uroot -proot -P3311 -h127.0.0.1
    # 登录slave1
    mysql -uroot -proot -P3312 -h127.0.0.1
    
    # 登录master2
    mysql -uroot -proot -P3321 -h127.0.0.1
    # 登录slave2
    mysql -uroot -proot -P3322 -h127.0.0.1
    
    # 登录master3
    mysql -uroot -proot -P3331 -h127.0.0.1
    # 登录slave3
    mysql -uroot -proot -P3332 -h127.0.0.1
    

    到此为止,MySQL集群各个容器已经成功启动,并且能够正常访问各个容器。

    后续会配置他们的主从同步和验证主从同步的效果。敬请期待…​


    微信搜索“coder-home”或扫一扫下面的二维码,
    关注公众号,第一时间了解更多干货分享,还有各类视频教程资源。扫描它,带走我。
    在这里插入图片描述

    展开全文
  • 如何写好数学建模竞赛答卷及案例 0.摘要 1. 问题的叙述,问题的分析,背景的分析等,略 2. 模型的假设,符号说明(表) 3. 模型的建立(问题分析,公式推导,基本模型,最终或简化模型 等) 4. 模型的求解...
  • 一、案例背景 用Python了个脚本,需要部署到Linux环境的服务器上,由于服务器linux系统(centos,redhat等)自带的是python2,现在的python萌新都是从python3开始学习,所以需要给服务器配置一个python3环境,一番...

    Python项目部署
    同步更新在个人网站:http://www.wangpengcufe.com/machinelearning/python-python2/

    一、案例背景

    用Python写了个脚本,需要部署到Linux环境的服务器上,由于服务器linux系统(centos,redhat等)自带的是python2,现在的python萌新都是从python3开始学习,所以需要给服务器配置一个python3环境,一番摸索过后,踩过一些坑,也总结了一下经验,故留此文。

    二、主要应用技术

    2.1、linux 命令

    linux命令

    **三、实施步骤 **

    3.1、安装python3

    开始安装之前先看一下机器的环境,主要看一下操作系他的环境和python版本。
    查看环境
    操作系统:

    [root@reportweb]#  cat /etc/redhat-release
    CentOS release 6.5 (Final)
    

    查看python版本:

    [root@reportweb]# python -V
    Python 2.6.6
    
    
    [root@reportweb]# python3 -V
    -bash: python3: command not found
    

    可以看到操作系统是CentOS 6.5 ,python此时只有一个python2,没有python 3 。

    下面开始进入正式安装:
    第1步:下载python安装包,准备编译环境:

    [root@reportweb]# yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make
    

    第2步:下载python源码

    [root@reportweb src]# wget https://www.python.org/ftp/python/3.6.6/Python-3.6.6.tgz
    

    第3步:解压

    [root@reportweb src]# tar -zxvf Python-3.6.6.tgz
    

    第4步:安装,编译

    [root@reportweb src]# cd Python-3.6.2
    [root@reportweb Python-3.6.2] # mkdir /usr/local/python3.6
    [root@reportweb Python-3.6.2] # ./configure --prefix=/usr/local/python3.6
    [root@reportweb Python-3.6.2] # make
    [root@reportweb Python-3.6.2] # make install
    

    第5步:建立软链

    [root@reportweb Python-3.6.2] # ln -s /usr/local/python3.6/bin/python3.6  /usr/bin/python3
    

    第6步:查询python版本

    [root@reportweb]# python3 -V
    Python 3.6.6
    
    [root@reportweb]# python -V
    Python 2.6.6
    

    至此,python3安装完毕。

    3.2、安装pip3

    下面开始安装pip3的步骤。
    第1步:安装setuptools

    [root@reportweb src]# wget --no-check-certificate  https://pypi.python.org/packages/source/s/setuptools/setuptools-19.6.tar.gz#md5=c607dd118eae682c44ed146367a17e26
    

    第2步:解压

    [root@reportweb src]# tar -zxvf setuptools-19.6.tar.gz
    

    第3步:编译,安装

    [root@reportweb src] # cd setuptools-19.6/
    [root@reportweb setuptools-19.6] # python3 setup.py build
    [root@reportweb setuptools-19.6] # python3 setup.py install
    

    第4步:建立软链

    [root@reportweb setuptools-19.6] #  ln -s /usr/local/python3.6/bin/pip3 /usr/bin/pip3
    

    第5步:查看pip3版本

    [root@reportweb] # pip3 -V
    pip 8.0.2 from /usr/local/python3.6/lib/python3.6/site-packages/pip-8.0.2-py3.6.egg (python 3.6)
    

    第6步:更新

    [root@reportweb] # pip3 install --upgrade pip
    Collecting pip
      Downloading https://files.pythonhosted.org/packages/00/b6/9cfa56b4081ad13874b0c6f96af8ce16cfbc1cb06bedf8e9164ce5551ec1/pip-19.3.1-py2.py3-none-any.whl (1.4MB)
        100% |████████████████████████████████| 1.4MB 172kB/s 
    Installing collected packages: pip
      Found existing installation: pip 8.0.2
        Uninstalling pip-8.0.2:
          Successfully uninstalled pip-8.0.2
    Successfully installed pip-19.3.1
    [root@reportweb]# pip3 -V
    pip 19.3.1 from /usr/local/python3.6/lib/python3.6/site-packages/pip (python 3.6)
    

    至此,pip3安装完毕。

    3.3、启动服务

    启动服务分为前台启动和后台启动。

    前台启动,就是应用直接由窗口运行,能在窗口直接打印出日志信息,如果手动 ctrl + C 打断时,应用停止。当使用前台启动时,如果我们退出终端,服务就会停止。
    后台启动,就是用nohup等命令,执行应用,在窗口关闭后,或者 执行其他命令时,该应用仍然可以再后台运行。

    使用前台启动python项目:

    [root@reportweb]# python3 test.py
    2020-01-02 16:00:47 读取原日志信息:00:00:01.560 [http-nio-8605-exec-5] [DEBUG] Bound request context to thread: org.apache.catalina.connector.RequestFacade@2dc071e6 org.springframework.boot.web.filter.OrderedRequestContextFilter [RID:] [TID:] [MID:]
    2020-01-02 16:00:47 转换格式前信息:00:00:01.560 [http-nio-8605-exec-5] [DEBUG] Bound request context to thread: org.apache.catalina.connector.RequestFacade@2dc071e6 org.springframework.boot.web.filter.OrderedRequestContextFilter [RID:] [TID:] [MID:]
    ^CTraceback (most recent call last):
      File "test.py", line 174, in <module>
        read_rawlog()
      File "test.py", line 79, in read_rawlog
        line_json = log_data_to_json(line_temp)
      File "test.py", line 120, in log_data_to_json
        logger = re.findall(logger_rule, line)
      File "/usr/python3/lib/python3.6/re.py", line 222, in findall
        return _compile(pattern, flags).findall(string)
    KeyboardInterrupt
    [root@reportweb data]# 
    

    前台会输出正常的日志信息,直到你按下 ctrl + c 打断它,就会报KeyboardInterrupt。
    下面演示后台启动python文件:

    [root@reportweb data]# nohup python3 test.py &
    

    简单介绍一下nohup 命令

    用途:不挂断地运行命令。

    语法:nohup Command [ Arg … ] [ & ]

    描述:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。nohup就是不挂起的意思( no hang up)。nohup 执行 默认会自动生成一个 nohup.out 记录文件。

    3.4、停止服务

    前台启动的服务,直接 ctrl + c 停止服务,或者退出终端,服务就会停止。

    后台启动的服务,用命令查看pid,然后 kill -9 pid 杀死任务。

    [root@reportweb]# ps -ef|grep python
    root      9233  2598 95 16:22 pts/0    00:00:16 python3 test.py
    root      9244  2598  0 16:22 pts/0    00:00:00 grep python
    [root@reportweb]# kill -9 9233
    [root@reportweb]# ps -ef|grep python
    [root@reportweb]# ps -ef|grep python
    root      9257  2598  0 16:23 pts/0    00:00:00 grep python
    [1]+  已杀死               nohup python3 test.py
    

    3.5、查看python执行的日志

    查看前10行命令:
    [root@reportweb]# head -n 10 nohup.out
    
    查看后10行命令:
    [root@reportweb]# tail -n 10 nohup.out
    
    显示文件 nohup.log 的内容,从第 20 行至文件末尾:
    [root@reportweb]# tail +20 nohup.out
    
    要跟踪名为 nohup.log 的文件的增长情况,请输入以下命令:
    [root@reportweb]# tail -f nohup.out
    

    tail -f filename 会把 filename 文件里的最尾部的内容显示在屏幕上,并且不断刷新,只要 filename 更新就可以看到最新的文件内容。

    命令格式:
    tail [参数] [文件]
    参数:

    -f 循环读取
    -q 不显示处理信息
    -v 显示详细的处理信息
    -c<数目> 显示的字节数
    -n<行数> 显示文件的尾部 n 行内容
    –pid=PID 与-f合用,表示在进程ID,PID死掉之后结束
    -q, --quiet, --silent 从不输出给出文件名的首部
    -s, --sleep-interval=S 与-f合用,表示在每次反复的间隔休眠S秒
    立个flag:五一假学数据分析,争取年底升职加薪!有一起的吗?求组队
    立个flag:学数据分析,争取年底升职加薪!有一起的吗?求组队

    展开全文
  • 背景介绍 今天翻网页学习FPGA的相关知识时,无意翻到了一...本博文使用两个案例来说明如何画波形图,这两个案例,都是之前我过的博文,由于波形图手画不标准(我没尺子),我就没有画,而是直接仿真得出的,这不利于

    背景介绍

    今天翻网页学习FPGA的相关知识时,无意翻到了一个画波形图的工具,激起了我的兴趣,有的时候我是需要画波形图的,用手画十分的麻烦且不标准,难以对齐,且要花费大量的时间,果然,前人大牛们已经经历了这个过程并写出了一个工具来解决此问题,真是有一种膜拜的感觉,我感觉自己真的很菜,需要学习的东西太多,想法很多,先是学会如何使用这个工具。画出一些基本的波形图。

    本博文使用两个案例来说明如何画波形图,这两个案例,都是之前我写过的博文,由于波形图手画不标准(我没尺子),我就没有画,而是直接仿真得出的,这不利于原理分析,今天来完善下。顺便学会了这个工具的使用方法。


    工具介绍

    首先贴出来工具的下载地址:Wavedrom

    最上方有4个选项,第一个是tutorial(教程),点击进去,有软件或工具的使用方法,语法等。

    第二个是Editor(编辑器),点击进去,就可以在线编写波形,无需下载软件,当然人家也把软件做好了,各种平台上的软件,真的很崇拜呀。

    第三个是source,点击进去会进入这个开源项目的各种源文件,里面由所有你想知道的东西,就看你能不能看懂了。

    最下方的第一项是Download editor,下载这个编辑器,可以离线编辑。

    其他的自己查看吧,我就不介绍了。


    再我的博文案例贴出来:

    【FPGA】分频电路设计(Verilog HDL设计)(良心博文)

    模6计数器以及模10计数器(Verilog HDL语言设计)(Modelsim仿真与ISE综合)


    下面这段代码是这个工具默认的一段示例代码,先贴出来供大致了解,参观参观:

    
     
    1. {signal: [

    2. {name: 'clk', wave: 'p.....|...'},

    3. {name: 'dat', wave: 'x.345x|=.x', data: ['head', 'body', 'tail', 'data']},

    4. {name: 'req', wave: '0.1..0|1.0'},

    5. {},

    6. {name: 'ack', wave: '1.....|01.'}

    7. ]}

    这段代码描述出来的波形图为:

    从代码看,几乎可以说是一目了然,很容易上手,画出来的波形图也很美观,简直了。

    虽然代码简单,但是细节还是需要认真的研究一下的,多找几个案例练手,达到熟练的目的。


    案例分析:

    案例一

    偶分频电路波形图(以10分频电路为例)

    下面默认你看过这篇博文了,分频电路设计,不看也没关系,我说的直接一些吧。

    这篇博文中要实现一个偶分频电路,原理是对时钟的上升沿进行计数,从0开始计数,计数到4(相当于经过了5个时钟周期),分频时钟clk_div翻转一次。

    在Modelsim进行功能仿真得到的电路图如下:

    下面我就要画出类似这个的原理图:

    先看软件提供的示例代码:

    
     
    1. {signal: [

    2. {name: 'clk', wave: 'p.....|...'},

    3. {name: 'dat', wave: 'x.345x|=.x', data: ['head', 'body', 'tail', 'data']},

    4. {name: 'req', wave: '0.1..0|1.0'},

    5. {},

    6. {name: 'ack', wave: '1.....|01.'}

    7. ]}

    从示例代码可以看出,这个波形描述语言的总体框架如下:

    
     
    1. {signal: [

    2.  
    3.  
    4. ]}

    5.  

    在两个中括号里面填充你需要描述的波形,首先是时钟波形描述如下:

    
     
    1. {signal: [

    2. {name: 'clk', wave:'p...........|...'},

    3.  
    4.  
    5. ]}

    6.  

    每个波形的描述都在一个大括号内,别忘了大括号的结尾有一个逗号(,),name: 以及 wave:后面都要有一个' ',单引号内部写相关信息,例如波形名字(name),wave:'p...'中p代表一个时钟周期,后面的点是p的重复,有几个点就重复几次,p也算一次;

    wave:'p...|...'中,|代表省略了一系列时钟,没画出来。

    上面的那段代码描述的波形为:

    当然也可以添加上升沿标识,只需要将代码中的p换成大写的P(Positive)就好了,如下:

    
     
    1. {signal: [

    2. {name: 'clk', wave:'P...........|...'},

    3.  
    4.  
    5. ]}

    6.  

    描述的波形如下:

    下面添加一个计数,从0开始计数,计数到4,然后计数器清零:

    
     
    1. {signal: [

    2. {name: 'clk', wave:'P...........|...'},

    3. {name: 'cnt', wave:'============|===',data:['0','1','2','3','4','0','1','2','3','4','0','1','2','3','4']},

    4.  
    5.  
    6. ]}

    描述出的波形为:

    至于怎么写的,wave中=代码那一个个数字框,后面的data是填充数据用的。见下图:

    这段描述很清晰了。

    下面添加一个分频时钟,五个时钟周期翻转一次:

    
     
    1. {signal: [

    2. {name: 'clk', wave:'P...........|...'},

    3. {name: 'cnt', wave:'============|===',data:['0','1','2','3','4','0','1','2','3','4','0','1','2','3','4']},

    4. {name: 'clk_div10', wave:'0....1....0.|1..'},

    5.  
    6.  
    7. ]}

    有了上面的基础,就逐渐上手了,这段代码描述的波形是:

    这就是10分频,clk_div10的时钟周期是clk的10倍,频率是其1/10,这也是10分频的意思。



    奇分频(5分频为例)

    画分频电路波形图的所用的这些简单的语言上面已经讲完了,下面直接画出5分频电路的波形图。

    先简要的说明一下原理:

    假如是一个占空比为50%的5分频电路,那么就需要在基准时钟clk的2.5个时钟周期,分频时钟clk_div5翻转一次,如何实现2.5个时钟周期翻转一次呢?

    这就需要产生一个与clk完全相反的时钟clk1,此时钟与clk相位相差180°,然后对这两个时钟的上升沿计数,计数到4,计数器初始值为0,那么就代表2.5个clk时钟周期。

    且看下图:

    从图中可以看出,clk与clk1的上升沿都进行计数,计数到4,clk_div5翻转一次,这样就实现了5分频电路。

    描述这个波形图的代码为:

    
     
    1. { signal: [

    2. { name: "clk", wave: "P........", period: 2 },

    3. { name: "clk1", wave: "n........", period:2 },

    4. { name: "cnt", wave: "==================", data: "0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1 2" },

    5. {},

    6. { name: "clk_div5", wave: "0....1....0....1.." },

    7. ]}

    这张图的精髓在于调节周期和相位,见下图:

    不做过多解释,应该能看懂。在源代码的基础上该就是了。

    如果占空比为3:2呢?波形图如何画?

    同样很简单,就是clk的三个周期翻转一次,然后再过两个周期翻转一次 ,再过三个周期翻转一次,依次循环即可:

    描述代码为:

    
     
    1. {signal: [

    2. {name: 'clk', wave:'P...........|'},

    3. {name: 'cnt', wave:'============|',data:['0','1','2','0','1','0','1','2','0','1','0','1']},

    4. {name: 'clk_div5', wave:'0..1.0..1.0.|'},

    5.  
    6.  
    7. ]}

    案例二

    这个案例就是模10计数器了,见原博文:模6计数器以及模10计数器(Verilog HDL语言设计)(Modelsim仿真与ISE综合),这个波形就好画的多了,权当练手:

    每个时钟上升沿到来时,计数一次,计数到9后计数器清零。

    直接给图:

    代码:

    
     
    1. {signal: [

    2. {name: 'clk', wave:'p...........|'},

    3. {name: 'cnt', wave:'============|',data:['复位0','1','2','3','4','5','6','7','8','9','0','1']},

    4.  
    5.  
    6.  
    7. ]}

    结束语

    最后贴出,教程:Hitchhiker's Guide to the WaveDrom

    Hitchhiker's Guide to the WaveDrom (Part 2)

    最后再次贴出在线编辑界面:

    WaveDrom Editor

    展开全文
  • 阅读本文大约需要1分钟 项目报告做得好与不好能决定一个项目管理者的职业发展。...”,无论你和领导/老板做过多少次汇报,在项目报告中一定要上项目的背景。 出色的项目背景应该是一个完整的故事,
  • 这是我2021年的第20篇原创文章,原汁原味的技术之路尽在Jerrycodes案例背景案例分析MySQL 主从结构案例解答总结案例背景假设你公司面临双 11 大促,投入了大量营销费用用于平...
  • jQuery小案例

    2021-05-18 10:54:28
    这篇文章我们主要是讲如何改变网页的背景颜色和改变背景图片以及计算器这三个小案例,我们将用到jQuery的方式去实现效果 我们先开始如何该表网页的背景颜色: 第一步:还是老规矩,先把页面新建好,在开始我们的...
  • 问题应该不难,项目用的是...我了个类似的案例如下(不可以贴公司原代码,否则被发现会蛮惨): ``` 表格背景颜色 .style1{ background-color: red; } .style2{ background-color:blue; } ...
  • 用户案例-携程

    千次阅读 2018-05-16 10:48:36
    公司简介 携程是一个在线票务服务公司,创立于1999年,总部设在中国上海。...案例背景 如何把手工测试变为自动化测试是每个软件开发公司的课题。测试方案 龙测的解决方案是用机器测试代码,从而...
  • 案例背景 假设你公司面临双 11 大促,投入了大量营销费用用于平台推广,这带来了巨大的流量,如果你是订单系统的技术负责人,要怎么应对突如其来的读写流量呢? 这是一个很典型的应用场景,我想很多研发工程师会回答...
  • 盒子模型的背景

    2021-03-16 18:59:52
    提示:文章完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、盒子的背景颜色二、盒子的背景图片1.注意细节2.当图片比较小时,控制是否平铺3.设置背景图片在盒子上的位置三、精灵图(雪碧图...
  • HTML全屏背景

    千次阅读 2019-12-05 16:46:15
    当我们在前端页面的时候为了页面的美观我们通常会为页面设置图片背景,那么我们如何来设置全屏的背景图呢??? 设置全屏背景图需要三个属性 background-image: url(img/untitled.png); background-repeat: ...
  • 结合多个优秀的需求文档案例,总结了下面的需求文档的框架,希望对想学习需求文档的朋友有帮助。 二、框架 2.1 需求文档的架构 主要围绕着需求来,包括需求的背景、价值、专业的名词解释...
  • 龙测案例-阳光守护

    千次阅读 2018-07-09 18:19:41
    案例背景 “阳光守护”是守护孩子的上网安全与身心健康的APP,如何深入测试这款APP并发现其中Bug是客户最关心的。测试方案 龙测的解决方案是针对APP用机器测试代码,从而能在数天内出成百...
  • CSS - 背景位置

    2021-05-19 15:28:53
    提示:文章完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的...
  • 使用StackBlur.js做图片背景模糊

    千次阅读 2020-10-10 17:52:23
    提示:文章完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结 前言 WEB前端功能越来越强大了,很多时候需要前端...
  • MNIST手写数字识别-01

    2020-09-24 11:05:26
    案例演示了如何训练简单的卷积神经网络(CNN)来对MNIST数字进行分类。这个简单的网络将在MNIST测试集上实现99%以上的准确率。 背景介绍 当我们学习编程的时候,编写的第一个程序一般是实现打印"Hello World"。而...
  • 测试报告如何编写

    千次阅读 2019-09-28 16:57:10
    测试报告如何编写 #测试报告主要包含测试范围、测试环境、遗留的bug有哪些、测试用例覆盖率、bug统计回归测试 引言部分 1、项目背景 主要描述此项目的背景和需要实现的一些功能。 2、参考资料 参考的一些主要资料 ...
  • 第4章介绍CSS3背景功能,着重阐述了多背景背景尺寸、背景原点方面的使用,以让大家掌握如何使用CSS3背景功能的新特性。 第5章介绍CSS3文本功能。以前大家在网页制作时,只是设置文本的颜色、字体、字号等。通过...
  • 在前面 5月18日,选型直播曾做过一期题为“移动+社交时代,如何治理大数据洪水?”的节目,在那期节目中,Informatica北方区总经理李晨先生系统地介绍了Informatica公司的背景、大数据治理的完整框架,以及最新的...
  • 今天遇到的问题是如何在unity中添加背景图片。其中主要是结合网上博客大牛的案例,总结一下,希望大家少走弯路。具体方法: 1.添加一个摄像机,命名为background Camera,然后在Layer添加一个background层。并且将...
  • 提示:文章完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录一级标题前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结二级标题三级标题四级标题五级标题六级标题 前言 提示:这里可以...
  • 软件测试-测试报告如何编写

    千次阅读 多人点赞 2019-02-05 11:54:53
    测试报告如何编写 #测试报告主要包含测试范围、测试环境、遗留的bug有哪些、测试用例覆盖率、bug统计回归测试 引言部分 1、项目背景 主要描述此项目的背景和需要实现的一些功能。 2、参考资料 参考的一些主要资料 ...
  • 文章目录如何将COMSOL与MATLAB联合前言一、背景二、使用步骤1. 找到 COMSOL Multiphysics 5.5 with MATLAB2. **双击COMSOL Multiphysics 5.5 with MATLAB** 前言 网上搜索教程,发现大部分教程讲得比较初略,或者...
  • 如何多平台批量加压缩文件一:故事背景:二:注意事项三:命令介绍3.1 Windows平台3.1.1 Bandizip命令介绍3.1.2 WinRAR命令介绍3.2 Linux平台四:案例介绍4.1 Windows平台4.2 Linux平台 一:故事背景: 之前在做测试...

空空如也

空空如也

1 2 3 4 5 ... 12
收藏数 221
精华内容 88
关键字:

案例背景如何写