深聊性能测试,从入门到放弃之:Locust性能自动化(一)初识Locust

2023-11-16

1. Locust基本介绍

1.1 引言

现在不管是互联网行业或者是传统行业,对性能的要求,都日渐增多,
为了能更快更准确的定位问题,发现问题,解决问题,
市面上出现了越来越多的性能测试工具,例如Jmeter,Loadrunner,Locus等,而今天,我们主要介绍的,就是Locust!
很多人并不知道什么是Locust,包括使用python的人,因为不涉及到,所以不会去可以了解,
那么,什么是Loucst,以及Locust的功能,有点是啥呢,
跟着小鱼,往下看~

1.2 简介

Locust是开源的使用Python开发,基于事件,支持分布式并且提供Web UI进行测试执行和结果展示的性能测试工具。
1.Locust 与Jmeter占用资源比较
Locust之所以在资源占用方面完胜开源的Jmeter,
主要是因为:
>>两者的模式用户方式不同:
①Jmeter是通过线程来作为虚拟用户
②Locust借助gevent库对协程的支持,以greenlet来实现对用户的模拟你。
所以,在相同配置下,Locust能支持的并发用户数相比Jmeter,就不止提升了一个Level。
2.Locust使用语言
Locust使用的是Python代码定义测试场景,目前支持Python2.7,3.3~3.7。
它自带一个Web UI,用于定义用户模型,发起测试,实时测试数据,错误统计等。

3.官方文档
更多更详细的内容,可以参考:
1.文档内容,点击:官方文档
2.源代码,点击:Github

2. Locust安装方式

同样,我们直接 pip安装即可

2.1 安装 locust

pip install  locust

2.2 安装pyzmq

如果打算运行Locust 分布在多个进程/进程,需要安装pyzmq
同样使用pip安装

pip install pyzmq

注:
如果安装 locust-1.2.3 版本,可能就不需要再次安装pyzmq了,
好像直接附带安装 pyzmq

2.3 安装成功确认

打开cmd窗口,直接输入

locust --help

如果出现下图,则说明安装成功
在这里插入图片描述

3. Locust 参数说明

针对上图的安装成功后,我们来进行参数解析

3.1 参数信息

我们先把locust --help 里面的所有信息,copy出来

Common options:
  -h, --help            show this help message and exit
  -f LOCUSTFILE, --locustfile LOCUSTFILE
                        Python module file to import, e.g. '../other.py'.
                        Default: locustfile
  --config CONFIG       Config file path
  -H HOST, --host HOST  Host to load test in the following format:
                        http://10.21.32.33
  -u NUM_USERS, --users NUM_USERS
                        Number of concurrent Locust users. Primarily used
                        together with --headless
  -r SPAWN_RATE, --spawn-rate SPAWN_RATE
                        The rate per second in which users are spawned.
                        Primarily used together with --headless
  -t RUN_TIME, --run-time RUN_TIME
                        Stop after the specified amount of time, e.g. (300s,
                        20m, 3h, 1h30m, etc.). Only used together with
                        --headless
  -l, --list            Show list of possible User classes and exit

Web UI options:
  --web-host WEB_HOST   Host to bind the web interface to. Defaults to '*'
                        (all interfaces)
  --web-port WEB_PORT, -P WEB_PORT
                        Port on which to run web host
  --headless            Disable the web interface, and instead start the load
                        test immediately. Requires -u and -t to be specified.
  --web-auth WEB_AUTH   Turn on Basic Auth for the web interface. Should be
                        supplied in the following format: username:password
  --tls-cert TLS_CERT   Optional path to TLS certificate to use to serve over
                        HTTPS
  --tls-key TLS_KEY     Optional path to TLS private key to use to serve over
                        HTTPS

Master options:
  Options for running a Locust Master node when running Locust distributed. A Master node need Worker nodes that connect to it before it can run load tests.

  --master              Set locust to run in distributed mode with this
                        process as master
  --master-bind-host MASTER_BIND_HOST
                        Interfaces (hostname, ip) that locust master should
                        bind to. Only used when running with --master.
                        Defaults to * (all available interfaces).
  --master-bind-port MASTER_BIND_PORT
                        Port that locust master should bind to. Only used when
                        running with --master. Defaults to 5557.
  --expect-workers EXPECT_WORKERS
                        How many workers master should expect to connect
                        before starting the test (only when --headless used).

Worker options:

  Options for running a Locust Worker node when running Locust distributed.
  Only the LOCUSTFILE (-f option) need to be specified when starting a Worker, since other options such as -u, -r, -t are specified on the Master node.

  --worker              Set locust to run in distributed mode with this
                        process as worker
  --master-host MASTER_NODE_HOST
                        Host or IP address of locust master for distributed
                        load testing. Only used when running with --worker.
                        Defaults to 127.0.0.1.
  --master-port MASTER_NODE_PORT
                        The port to connect to that is used by the locust
                        master for distributed load testing. Only used when
                        running with --worker. Defaults to 5557.

Tag options:
  Locust tasks can be tagged using the @tag decorator. These options let specify which tasks to include or exclude during a test.

  -T [TAG [TAG ...]], --tags [TAG [TAG ...]]
                        List of tags to include in the test, so only tasks
                        with any matching tags will be executed
  -E [TAG [TAG ...]], --exclude-tags [TAG [TAG ...]]
                        List of tags to exclude from the test, so only tasks
                        with no matching tags will be executed

Request statistics options:
  --csv CSV_PREFIX      Store current request stats to files in CSV format.
                        Setting this option will generate three files:
                        [CSV_PREFIX]_stats.csv, [CSV_PREFIX]_stats_history.csv
                        and [CSV_PREFIX]_failures.csv
  --csv-full-history    Store each stats entry in CSV format to
                        _stats_history.csv file. You must also specify the '--
                        csv' argument to enable this.
  --print-stats         Print stats in the console
  --only-summary        Only print the summary stats
  --reset-stats         Reset statistics once spawning has been completed.
                        Should be set on both master and workers when running
                        in distributed mode

Logging options:
  --skip-log-setup      Disable Locust's logging setup. Instead, the
                        configuration is provided by the Locust test or Python
                        defaults.
  --loglevel LOGLEVEL, -L LOGLEVEL
                        Choose between DEBUG/INFO/WARNING/ERROR/CRITICAL.
                        Default is INFO.
  --logfile LOGFILE     Path to log file. If not set, log will go to
                        stdout/stderr

Step load options:
  --step-load           Enable Step Load mode to monitor how performance
                        metrics varies when user load increases. Requires
                        --step-users and --step-time to be specified.
  --step-users STEP_USERS
                        User count to increase by step in Step Load mode. Only
                        used together with --step-load
  --step-time STEP_TIME
                        Step duration in Step Load mode, e.g. (300s, 20m, 3h,
                        1h30m, etc.). Only used together with --step-load

Other options:
  --show-task-ratio     Print table of the User classes' task execution ratio
  --show-task-ratio-json
                        Print json data of the User classes' task execution
                        ratio
  --version, -V         Show program's version number and exit
  --exit-code-on-error EXIT_CODE_ON_ERROR
                        Sets the process exit code to use when a test result
                        contain any failure or error
  -s STOP_TIMEOUT, --stop-timeout STOP_TIMEOUT
                        Number of seconds to wait for a simulated user to
                        complete any executing task before exiting. Default is
                        to terminate immediately. This parameter only needs to
                        be specified for the master process when running
                        Locust distributed.

User classes:
  UserClass             Optionally specify which User classes that should be
                        used (available User classes can be listed with -l or
                        --list)

3.2 参数信息解析

这里,只写了大部分,至于缺少的部分,小鱼觉得不太常用,就不浪费浪费电了~毕竟1度电 1块多钱 ! !
还有,就是小鱼要吃午饭~

-h, --help    查看帮助
-H HOST, --host=HOST    指定被测试的主机,采用以格式:http://10.21.32.33
--web-host=WEB_HOST    指定运行 Locust Web 页面的主机,默认为空 ''-P PORT, --port=PORT, --web-port=PORT    指定 --web-host 的端口,默认是8089
-f LOCUSTFILE, --locustfile=LOCUSTFILE    指定运行 Locust 性能测试文件,默认为: locustfile.py
--csv=CSVFILEBASE, --csv-base-name=CSVFILEBASE    以CSV格式存储当前请求测试数据。
--master    Locust 分布式模式使用,当前节点为 master 节点。
--slave    Locust 分布式模式使用,当前节点为 slave 节点。
--master-host=MASTER_HOST    分布式模式运行,设置 master 节点的主机或 IP 地址,只在与 --slave 节点一起运行时使用,默认为:127.0.0.1.
--master-port=MASTER_PORT    分布式模式运行, 设置 master 节点的端口号,只在与 --slave 节点一起运行时使用,默认为:5557。注意,slave 节点也将连接到这个端口+1 上的 master 节点。
--master-bind-host=MASTER_BIND_HOST    Interfaces (hostname, ip) that locust master should bind to. Only used when running with --master. Defaults to * (all available interfaces).
--master-bind-port=MASTER_BIND_PORT    Port that locust master should bind to. Only used when running with --master. Defaults to 5557. Note that Locust will also use this port + 1, so by default the master node will bind to 5557 and 5558.
--expect-slaves=EXPECT_SLAVES    How many slaves master should expect to connect before starting the test (only when --no-web used).
--no-web    no-web 模式运行测试,需要 -c 和 -r 配合使用.
-c NUM_CLIENTS, --clients=NUM_CLIENTS    指定并发用户数,作用于 --no-web 模式。
-r HATCH_RATE, --hatch-rate=HATCH_RATE    指定每秒启动的用户数,作用于 --no-web 模式。
-t RUN_TIME, --run-time=RUN_TIME    设置运行时间, 例如: (300s, 20m, 3h, 1h30m). 作用于 --no-web 模式。
-L LOGLEVEL, --loglevel=LOGLEVEL    选择 log 级别(DEBUG/INFO/WARNING/ERROR/CRITICAL). 默认是 INFO.
--logfile=LOGFILE    日志文件路径。如果没有设置,日志将去 stdout/stderr
--print-stats    在控制台中打印数据
--only-summary    只打印摘要统计
--no-reset-stats    Do not reset statistics once hatching has been completed。
-l, --list    显示测试类, 配置 -f 参数使用
--show-task-ratio    打印 locust 测试类的任务执行比例,配合 -f 参数使用.
--show-task-ratio-json    以 json 格式打印 locust 测试类的任务执行比例,配合 -f 参数使用.
-V, --version    查看当前 Locust 工具的版本.

3.3 Locust主要库

gevent
gevent是一种基于协程的Python网络库,它用到Greenlet提供的,封装了libevent事件循环的高层同步API。

flask
Python编写的轻量级Web应用框架。
如果想了解flask及代码实战,看小鱼的这篇文章:
《Python3,网站搭建之构建Flask项目》

requests
Python的HTTP库
可以参考小鱼的这篇文章《requests库常用到的7个主要方法及控制访问参数》

msgpack-python
MessagePack是一种快速、紧凑的二进制序列化格式,适用于类似JSON的数据格式。msgpack-python主要提供MessagePack数据序列化及反序列化的方法。

six
Python2和3兼容库,用来封装Python2和Python3之间的差异性

pyzmq
pyzmq是zeromq(一种通信队列)的Python绑定,主要用来实现Locust的分布式模式运行。

4. Locust类说明

4.1 client属性

在Locust类中,静态字段client即客户端的请求方法,这里的client字段没有绑定客户端请求方法,因此在使用Locust时,需要先继承Locust类class HttpLocust(Locust),然后在self.client =HttpSession(base_url=self.host)绑定客户端请求方法;

对于常见的HTTP(s)协议,Locust已经实现了HttpLocust类,其self.client=HttpSession(base_url=self.host),而HttpSession继承自requests.Session。

在测试HTTP(s)的Locust脚本中,可以通过client属性来使用Python requests库的所 有方法,调用方式与 reqeusts完全一致。

由于requests.Session的使用,client的方法调用之间就自动具有了状态记忆功能。
常见的场景就是,在登录系统后可以维持登录状态的Session,从而后续HTTP请求操作都能带上登录状态

4.2 其他属性

4.2.1 task_set

指向一个TaskSet类,TaskSet类定义了用户的任务信息,该静态字段为必填。

4.2.2 max_wait/min_wait

每个用户执行两个任务间隔的上下限(毫秒),具体数值在上下限中随机取值,若不指定则默认间隔时间为1秒。

4.2.3 host

被测试系统的host,当在终端中启动locust时没有指定–host参数时才会用到。

4.2.4 weight

同时运行多个Locust类时,用于控制不同类型的任务执行权重。

5. Loucst执行流程

具体流程如下:
先执行WebsiteTasks中的on_start(只执行一次),作为初始化;

从WebsiteTasks中随机挑选(如果定义了任务间的权重关系,那么就按照权重关系随机挑选)一个任务执行;

根据Locust类中min_wait和max_wait定义的间隔时间范围(如果TaskSet类中也定义了min_wait或者max_wait,以TaskSet中的优先),在时间范围中随机取一个值,休眠等待;

重复2~3步骤,直到测试任务终止。

6. 性能测试工具比较

关于如何选择性能测试工具,小鱼在《深聊性能测试,从入门到放弃之:初识性能测试》写过,
每个工具,都有自己存在的价值,即,存在即有意义

接下来,小鱼给大家分析一下,Jmeter、Loadrunner、Locust这三个工具。

项目 Jmeter Loadrunner Locust
授权方式 开源 商业收费 开源
开发语言 Java C/Java Pyhton
测试脚本形式 GUI C/Java Python
并发机制 线程 进程/线程 协程
单机并发能力
分布式压力 支持 支持 支持
资源监控 不支持 支持 不支持
报告与分析 简单图表 完善 简单图表
支持二次开发 支持 不支持 支持

通过对比,可以看到,Locust并不占优,但是,小鱼喜欢用这个的原因,
是因为:
1、首先是模拟用户操作
①Locust采用Pure Python脚本描述,并且HTTP请求完全基于Requests库。

②Requests这个库非常简洁易用,但功能十分强大,很多其它编程语言的HTTP库都借鉴了它的思想和模式,如果将其评选为最好用的HTTP库之一(不限语言),应该也不会有太大的争议。

③除了HTTP(S)协议,Locust也可以测试其它任意协议的系统,只需要采用Python调用对应的库进行请求描述即可。

2、并发机制
Locust的并发机制采用协程(gevent)的机制

②采用多线程来模拟多用户时,线程数会随着并发数的增加而增加,而线程之间的切换是需要占用资源的,IO的阻塞和线程的sleep会不可避免的导致并发效率下降;正因如此,LoadRunner和Jmeter这类采用进程和线程的测试工具,都很难在单机上模拟出较高的并发压力。

而协程和线程的区别在于:协程避免了系统级资源调度,由此大幅提高了性能。

④正常情况下,单台普通配置的测试机可以生产数千并发压力,这是LoadRunner和Jmeter都无法实现的。

7. Locust代码实战

代码实战部分,我放到了第二章节来展示。
可以直接点击传送
《深聊性能测试,从入门到放弃之:Locust性能自动化(二)代码实战》

小屌丝:鱼哥,你能不能先分享一点,Locust的界面是啥样子?
小鱼:额, 就不能等等嘛~~
小屌丝: 我觉得不能,你就给个图,看看,到底牛X的地方是啥?
小鱼:好的,等着明天! 我得吃饭去了!!!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

深聊性能测试,从入门到放弃之:Locust性能自动化(一)初识Locust 的相关文章

  • 在 python 程序中合并第三方库的最佳实践是什么?

    下午好 我正在为我的工作编写一个中小型Python程序 该任务需要我使用 Excel 库xlwt and xlrd 以及一个用于查询 Oracle 数据库的库 称为CX Oracle 我正在通过版本控制系统 即CVS 开发该项目 我想知道围
  • Python 的键盘中断不会中止 Rust 函数 (PyO3)

    我有一个使用 PyO3 用 Rust 编写的 Python 库 它涉及一些昂贵的计算 单个函数调用最多需要 10 分钟 从 Python 调用时如何中止执行 Ctrl C 好像只有执行结束后才会处理 所以本质上没什么用 最小可重现示例 Ca
  • 将 Matplotlib 误差线放置在不位于条形中心的位置

    我正在 Matplotlib 中生成带有错误栏的堆积条形图 不幸的是 某些层相对较小且数据多样 因此多个层的错误条可能重叠 从而使它们难以或无法读取 Example 有没有办法设置每个误差条的位置 即沿 x 轴移动它 以便重叠的线显示在彼此
  • OpenCV Python cv2.mixChannels()

    我试图将其从 C 转换为 Python 但它给出了不同的色调结果 In C Transform it to HSV cvtColor src hsv CV BGR2HSV Use only the Hue value hue create
  • 通过最小元素比较对 5 个元素进行排序

    我必须在 python 中使用元素之间的最小比较次数来建模对 5 个元素的列表进行排序的执行计划 除此之外 复杂性是无关紧要的 结果是一个对的列表 表示在另一时间对列表进行排序所需的比较 我知道有一种算法可以通过 7 次比较 总是在元素之间
  • 使用 matplotlib 绘制时间序列数据并仅在年初显示年份

    rcParams date autoformatter month b n Y 我正在使用 matpltolib 来绘制时间序列 如果我按上述方式设置 rcParams 则生成的图会在每个刻度处标记月份名称和年份 我怎样才能将其设置为仅在每
  • 如何使用Conda下载python包并随后离线安装?

    我知道通过 pip 我可以使用以下命令下载 Python 包 但 pip install 破坏了我的内部包依赖关系 当我做 pip download
  • SQLALchemy .query:类“Car”的未解析属性引用“query”

    我有一个这里已经提到的问题https youtrack jetbrains com issue PY 44557 https youtrack jetbrains com issue PY 44557 但我还没有找到解决方案 我使用 Pyt
  • 基于代理的模拟:性能问题:Python vs NetLogo & Repast

    我正在 Python 3 中复制一小段 Sugarscape 代理模拟模型 我发现我的代码的性能比 NetLogo 慢约 3 倍 这可能是我的代码的问题 还是Python的固有限制 显然 这只是代码的一个片段 但 Python 却花费了三分
  • 绘制方程

    我正在尝试创建一个函数 它将绘制我告诉它的任何公式 import numpy as np import matplotlib pyplot as plt def graph formula x range x np array x rang
  • 如何在ipywidget按钮中显示全文?

    我正在创建一个ipywidget带有一些文本的按钮 但按钮中未显示全文 我使用的代码如下 import ipywidgets as widgets from IPython display import display button wid
  • 如何使用Python创建历史时间线

    So I ve seen a few answers on here that helped a bit but my dataset is larger than the ones that have been answered prev
  • Pygame:有没有简单的方法可以找到按下的任何字母数字的字母/数字?

    我目前正在开发的游戏需要让人们以自己的名义在高分板上计时 我对如何处理按键有点熟悉 但我只处理过寻找特定的按键 有没有一种简单的方法可以按下任意键的字母 而不必执行以下操作 for event in pygame event get if
  • 在f字符串中转义字符[重复]

    这个问题在这里已经有答案了 我遇到了以下问题f string gt gt gt a hello how to print hello gt gt gt f a a gt gt gt f a File
  • 解释 Python 中的数字范围

    在 Pylons Web 应用程序中 我需要获取一个字符串 例如 关于如何做到这一点有什么建议吗 我是 Python 新手 我还没有找到任何可以帮助解决此类问题的东西 该列表将是 1 2 3 45 46 48 49 50 51 77 使用
  • Python:如何将列表列表的元素转换为无向图?

    我有一个程序 可以检索 PubMed 出版物列表 并希望构建一个共同作者图 这意味着对于每篇文章 我想将每个作者 如果尚未存在 添加为顶点 并添加无向边 或增加每个合著者之间的权重 我设法编写了第一个程序 该程序检索每个出版物的作者列表 并
  • 从列表指向字典变量

    假设你有一个清单 a 3 4 1 我想用这些信息来指向字典 b 3 4 1 现在 我需要的是一个常规 看到该值后 在 b 的位置内读写一个值 我不喜欢复制变量 我想直接改变变量b的内容 假设b是一个嵌套字典 你可以这样做 reduce di
  • Python 类继承 - 诡异的动作

    我观察到类继承有一个奇怪的效果 对于我正在处理的项目 我正在创建一个类来充当另一个模块的类的包装器 我正在使用第 3 方 aeidon 模块 用于操作字幕文件 但问题可能不太具体 以下是您通常如何使用该模块 project aeidon P
  • 导入错误:没有名为 site 的模块 - mac

    我已经有这个问题几个月了 每次我想获取一个新的 python 包并使用它时 我都会在终端中收到此错误 ImportError No module named site 我不知道为什么会出现这个错误 实际上 我无法使用任何新软件包 因为每次我
  • Python Selenium:如何在文本文件中打印网站上的值?

    我正在尝试编写一个脚本 该脚本将从 tulsaspca org 网站获取以下 6 个值并将其打印在 txt 文件中 最终输出应该是 905 4896 7105 23194 1004 42000 放置的动物 的 HTML span class

随机推荐

  • Spring Security Oauth2系列(一)

    前言 关于oauth2 其实是一个规范 本文重点讲解spring对他进行的实现 如果你还不清楚授权服务器 资源服务器 认证授权等基础概念 可以移步理解OAuth 2 0 阮一峰 这是一篇对于oauth2很好的科普文章 需要对spring s
  • MySQL之常见的CRUD面试题【上】

    Welcome Huihui s Code World 接下来看看由辉辉所写的关于MySQL数据库的相关操作吧 目录 Welcome Huihui s Code World 导读 一 数据库的连表查询是什么 二 连表查询有几种常见类型 1
  • 架构-大数据架构-阿里

    大数据架构 大数据框架从0到1整个过程的实现 根据本博客内容 可以实现整个大数据基本搭建 只是大概步骤 供学习参考 本博客从下面5个方面介绍 技术框架 技术选型 系统架构设计 业务流程 生态实现步骤 以阿里为例的大数据架构 通过学习视频 然
  • html里面行高的原理,CSS行高(line-height)及文本垂直居中原理

    在CS多现业讲进行效通近年有务这行定果过近年有S中 line height 属性设置两段段文本之间的距离 也就是行高 如果我们把一段文本的line height设置为父容器的高度就可以实现文本垂直居中了 比如二 都过发宗发数前业很断屏击和公
  • 基于AAEncode编码的解密经历

    有天 正在干活 领导突然发了一个静态页面 说通过办公网流量获取的一个url 可以查询公司所有员工的靓照 截图如下 这极大的引发了我们安全部门的高度重视 立马对页面进行了分析
  • 关于RDF的技术支持和应用部分示例

    1 RDF的应用 Mozilla XUL XML User Interface http www mozilla org rdf doc faq html xul templates IBM ORIENT by IBM CRL http w
  • Linux读写GPIO的几种方法及一些有趣的应用

    Linux读写GPIO的几种方法及一些有趣的应用 Yihui 在智能音箱的设计中 最近在写LED的控制 触摸按键的检测 这不就是在Linux下读写GPIO 太简单吧 很多人就不屑一顾了 不过 简单读写IO也可以玩出花来 得到意外的惊喜 这里
  • 江苏省对口单招计算机原理,江苏省对口单招计算机原理教案

    第三章CPU 指令系统 总线系统 一 填空题 1 指令由 和 两部分组成 2 指令中的 指明完成操作所需要的操作数的地址 3 根据地址码部分所给出的地址的个数可将指令分为 二地址指令 三地址指令等 4 指令的寻址方式与操作数可存放的位置及存
  • springboot_读取自定义配置的两种方式

    一 核心配置文件 核心配置文件是指在resources根目录下的application properties或application yml配置文件 我们写自定义配置也一般写在这个文件里 但实际上我们为了方便区分和管理 我们可以自己新建一个
  • 从结果集中取出某一列的值组装成新的数组

    从结果集中取出某一列的值组装成新的数组 package main import fmt func main data map string string name z age 18 sex nan name l age 19 sex nv
  • 【导航算法】S型速度规划笔记

    S型速度规划笔记 一 S型速度规划逻辑整理 1 根据q1 q0和速度 判断是否在约束条件下 可以规划出S型速度规划 2 假设可以找到合适的S型速度规划 确定相应的参数v max和a max a 判断是否可以达到最大速度 v max 和加速度
  • Nacos用做配置中心时启动报错SocketTimeoutException http://localhost:8848

    当使用nacos作为注册中心时 很顺利 进如下配置 仅仅配置了ip和端口 启动类加 EnableDiscoveryClient注解 nacos作为配置中心 当继续将nacos作为配置中心时 添加加依赖
  • Oracle 中的外键约束

    一 前言 在Oracle数据库中 外键是用来实现參照完整性的方法之中的一个 打个比喻 外键是指定义外键的表的列的值必须在还有一个表中出现 被參照的表称之为父表 parent table 创建外键的表称之为子表 child table 子表中
  • Samba CentOS 7 安装

    安装步骤 Samba是在Linux与Windows系统间共享文件和打印机的标准协议 要在CentOS上安装Samba 可以按以下步骤操作 安装Samba相关包 yum install samba samba client samba com
  • 【Linux】SSH、shell

    最近GET到一个学习方法 了解一个新知识是什么的最快方法 就是去看它官网首页最大的那行字 一 比如SSH到底是什么 如下图 答案 SSH就是一个安全的shell应用程序 SSH是一个软件包 使系统登陆和文件传输都建立在一个安全的网络上 二
  • C++11新特性——智能指针之shared_ptr

    此课件及源代码来自B站up主 码农论坛 该文章仅作为本人学习笔记使用 1 智能指针shared ptr shared ptr共享它指向的对象 多个shared ptr可以指向 关联 相同的对象 在内部采用计数机制来实现 当新的shared
  • Java-如何使用Java将图片和文字拼接在一起(并非是给图片加水印)

    之前有遇到一个问题 问题背景 项目中 有一个功能 管理端可以将客户创建的小程序码下载到本地 方便客户将对应门店的小程序码打印出来并张贴到门店 做门店的引流和会员入会 具体问题 当小程序码的数量较少的时候 我们是后端将小程序码的分组信息和小程
  • OnCheckedChangeListener和setChecked之间冲突问题解决

    今天遇到一个奇怪的问题 hdmi设备的usb触屏线 Usb接口 在拔掉的时候 界面的Checkbox Switch等控件会响应CompoundButton OnCheckedChangeListener 很明显 通过debug debug模
  • bugku ctf web4 (看看源代码吧)

    打开打开 刚刚有个sb问我借lol号玩 浪费时间 继续干正事 随便输入后 提示 再好好看看 出题人语文肯定不好 应该是这个 再 吧 那我们查看源码
  • 深聊性能测试,从入门到放弃之:Locust性能自动化(一)初识Locust

    初识Locust 1 Locust基本介绍 1 1 引言 1 2 简介 2 Locust安装方式 2 1 安装 locust 2 2 安装pyzmq 2 3 安装成功确认 3 Locust 参数说明 3 1 参数信息 3 2 参数信息解析