Locust初次体验【解决webUI没数据】

news2024/12/23 16:50:22

官方文档:What is Locust? — Locust 2.14.2 documentation

webUI模式跑起来没有数据。。。。???;

E:\T_Work\other\WB_Locust\my_locustfiles>locust
[2023-02-14 09:57:44,530] PC-20190108TSZQ/INFO/locust.main: Starting web interface at http://127.0.0.1:8089
[2023-02-14 09:57:44,575] PC-20190108TSZQ/INFO/locust.main: Starting Locust 2.14.2
[2023-02-14 09:57:44,708] PC-20190108TSZQ/WARNING/root: Exception in keyboard input poller: (8, 'PeekConsoleInput', '存储空间不足,无法处理
此命令。')
[2023-02-14 10:00:13,088] PC-20190108TSZQ/INFO/locust.runners: Ramping to 5 users at a rate of 1.00 per second
[2023-02-14 10:00:17,090] PC-20190108TSZQ/INFO/locust.runners: All users spawned: {"Boon_User": 1, "JUM_User": 1, "My_App": 1, "My_User": 1, "My_talent_rig": 0, "My_talent_swagger": 0, "Myc_User": 0, "VI_Us
[2023-02-14 10:00:17,090] PC-20190108TSZQ/INFO/locust.runners: All users spawned: {"Boon_User": 1, "JUM_User": 1, "My_App": 1, "My_User": 1,
er": 0, "ZJ_User": 1} (5 total users)
End-My_App
[2023-02-14 10:01:52,372] PC-20190108TSZQ/INFO/locust.runners: Ramping to 1 users at a rate of 1.00 per second
[2023-02-14 10:01:52,373] PC-20190108TSZQ/INFO/locust.runners: All users spawned: {"Boon_User": 1, "JUM_User": 0, "My_App": 0, "My_User": 0,
er": 0, "ZJ_User": 0} (1 total users)
WARNING: gevent: Unhandled error with no watcher
Traceback (most recent call last):
  File "E:\Python\Lib\site-packages\gevent\libuv\loop.py", line 44, in python_queue_callback
    def python_queue_callback(self, watcher_ptr, revents):
KeyboardInterrupt
Traceback (most recent call last):
  File "E:\Python\Lib\site-packages\gevent\_ffi\loop.py", line 270, in python_check_callback
    def python_check_callback(self, watcher_ptr): # pylint:disable=unused-argument
KeyboardInterrupt

原因是gevent(协程,locust 压测要用到的)这个库版本不一致导致的,更新一下:

python.exe -m pip install --upgrade gevent==21.12.0 -i https://mirrors.aliyun.com/pypi/simple/


再次运行就可以打开Web-ui界面了

指定访问页面地址
locust --web-host="127.0.0.1"

 

 

安装Locust

命行模式:python.exe -m pip install locust

代码段主要作用为创建用户或用户组角色【按wait_time、weight自定义选择执行】

User :表示要生成进行负载测试的系统的 HTTP“用户”

---HttpUser:比User类更常用,因为它添加了一个client属性,用来发送HTTP请求

task :表示用户要进行的操作【用户行为】

  • 方法前添加@task才会执行操作
  • 访问首页 → 登录 → 增、删改查 → homPage

tasks:指定为一个列表,那么每次执行任务时,它将从tasks属性中随机选择

tasks = {My_talent_rig: 1} 
--->每次执行
tasks = {My_talent_rig: 1,My_talent_swagger:5} 
--->My_talent_swagger执行次数是My_talent_rig的五倍

wait_time:时间间隔

  • 固定时间, 由constant(wait)函数提供

  • 区间随机时间: `between(min_wait, max_wait)函数

  • 自适应节奏时间: constant_pacing用于确保任务每 X 秒(最多)运行一次

  • 固定吞吐量,由constant_throughput函数提供

weight

        测试中,存在多个User Class,默认情况下locust将为每个User Class的实例的数量是相同的。通过设置weight属性,来控制locust为我们的User Class生成不同数量的实例。

命令行模式启动:locust --headless --users 5 --spawn-rate 1 --run-time 30m --csv=wb_example

框架是通过命令locust运行的,常用参数有:

  • -H:指定测试的主机地址(注:会覆盖Locust类指定的主机地址)
  • -f:指定测试脚本地址(注:脚本中必须包含一个Locust的衍生类)
  • --no-web:不启动web网页,而是直接开始运行测试,需提供属性-c和-r
  • -u or users:并发的用户数,与--no-web一起使用
  • -r or spawn-rate:每秒启动的用户数,与--no-web一起使用
  • -t or run-time:运行时间(单位:秒),与--no-web一起使用
  • csv : 保存CSV报告数据,默认保存文件【wb_example_exceptions.csv、wb_example_failures.csv、wb_example_stats.csv、wb_example_stats_history.csv】

import os,sys
pathS = os.getcwd()
Project_Path = os.path.dirname(os.path.dirname(os.path.dirname(pathS)))
root_Path = os.path.dirname(pathS)
sys.path.append(Project_Path)
sys.path.append(root_Path)

from locust import HttpUser, task , between , User,constant,constant_pacing, constant_throughput,events
import os
from other.WB_Locust.my_locustfiles.locustfile01 import B_Set_UP,M_Get
from other.WB_Locust.my_locustfiles.locustfile_php import My_talent_swagger
from other.WB_Locust.my_locustfiles.locustfile_php import My_talent_rig
from other.WB_Locust.my_locustfiles.locustfile01 import My_App

class My_User(User): # 请求一个任务
    host = "http://m-test.xxxxtest.cn"
    wait_time = between(0.5, 5)
    weight = 1
    @task
    def My_User(self):
        pass

class VI_User(User): # 请求一个任务
    host = "http://m-test.xxxxtest.cn"
    wait_time = constant(3)
    weight = 1
    @task
    def VI_User(self):
        pass

class JUM_User(User): # 请求一个任务
    host = "http://m-test.xxxxtest.cn"
    wait_time = constant_pacing(3)
    weight = 2
    @task
    def JUM_User(self):
        pass

class Boon_User(User): # 请求一个任务
    host = "http://m-test.xxxxtest.cn"
    wait_time = constant_throughput(5)
    weight = 2
    @task
    def Boon_User(self):
        pass

class ZJ_User(HttpUser): # 请求一个任务组【TaskSet】
    host = "http://m-test.xxxxtest.cn"
    wait_time = between(2,3)
    weight = 2
    tasks = {B_Set_UP:1}
    @task
    def ZJ_User(self):
        pass

class Myc_User(HttpUser): # 请求一个任务组【TaskSet】
    host = "http://member-service.xxxxtest.cn"
    tasks = {M_Get:2}
    @task
    def Myc_User(self):
        pass
class My_App(HttpUser): # 请求一个任务组【TaskSet】
    host = "http://api-service.xxxxtest.cn"
    tasks = {My_App:1}
    @task
    def My_App(self):
        pass

class My_talent_swagger(HttpUser): 
    wait_time = between(10,20)
    host = "http://member-service.xxxxtest.cn"
    tasks = {My_talent_swagger: 1}
    @task
    def My_talent_swagger(self):
        pass
class My_talent_rig(HttpUser):
    wait_time = between(5,6)
    host = "http://rig-portal.xxxxtest.cn"
    tasks = {My_talent_rig: 1}
    @task
    def My_talent_rig(self):
        pass

if __name__ == '__main__':
    os.system("locust --headless --users 5 --spawn-rate 1 --run-time 30m --csv=wb_example")

# 命令行执行locust
# locust --headless --users 10 --spawn-rate 1 --tun-time 1m -l -H https://m-test.xxxxtest.cn
# --tags WB 只执行标记为WB的任务[debug调试]
# locust --headless --users 10 --spawn-rate 1 --tun-time 1m -l -H https://m-test.xxxxtest.cn --tags WB
# exclude-tags WB 执行标识不为WB的任务
前端--逻辑代码文件

请求值参:catch_response = True 为检查点,结合with使用

@ 多重嵌套任务
class xxx(TaskSet):
        class AAA(TaskSet):
                @task
                def BBB(self):
                    print('000')
        class CCC(TaskSet):
                @task
                def EEE(self):
                    print('123')
                    with self.client.get("/shop/introduce/59/",catch_response=True) as Res:
                        if "万表网" in Res.text:
                            Res.success()
                        else:
                            Res.failure("No member message!")

# locustfile01.py 



import os,sys
pathS = os.getcwd()
Project_Path = os.path.dirname(os.path.dirname(os.path.dirname(pathS)))
root_Path = os.path.dirname(pathS)
sys.path.append(Project_Path)
sys.path.append(root_Path)

from locust import HttpUser, task , between , tag,User,constant,constant_pacing,TaskSet,constant_throughput,events
from other.WB_Locust.common.api_token import *
from other.WB_Locust.Config import Config
import json,time,random,requests

class SSet_UP():
    def START_009(self):
        K_token = WB_ApiMD.MD5_token(self,1,1)
        Api_HeaderToKen = HeaderToken.Header_token(self,3, K_token)
        Member_HeaderToKen = HeaderToken.Header_token(self, 5, K_token)
        # PHP专用
        # PHP_mParams = Config.php_mParams
        # P_token = WB_ApiMD.MD5_token(self, 7, 5)
        # Php_HeaderToKen = HeaderToken.Header_token(self, 2, P_token)
        PHP_mParams = ""
        P_token = ""
        Php_HeaderToKen = ""
        return K_token,Api_HeaderToKen,Member_HeaderToKen,Php_HeaderToKen,P_token,PHP_mParams

class B_Set_UP(TaskSet):
    @task
    class Test_HttpUser(TaskSet):
        @tag('42470')
        @task(3)
        def view_goods(self):
            self.client.get("/goods/42470")

        @tag('shoubiao')
        @task(2)
        def view_shoubiao(self):
            self.client.get("/shoubiao.html")

        @tag('fenlei')
        @task(1)
        def view_fenlei(self):
            self.client.get("/fenlei.html")
            self.interrupt()

    @task
    class Woman_UserA(TaskSet):
        @task
        def Woman_UserA(self):
            self.client.get("/shop/59/")
            self.interrupt()

    @task
    class Woman_UserB(TaskSet):
        @task
        def Woman_UserB(self):
            self.client.get("/goods/42471")

        @task
        def Woman_UserC(self):
            self.client.get("/goods/67")
            self.interrupt()

    @task
    class Woman_UserS(TaskSet):
        @task
        def Woman_UserB1(self):
            self.client.get("/goods/16641")

        @task
        def Woman_UserC2(self):
            self.client.get("/goods/42823")
            self.interrupt()

    @task
    class SWoman_UserS(TaskSet):
        '商城静态页面接口请求'
        @tag('WB')
        @task(2)
        def SWoman_UserB1(self):
            with self.client.get("/shop/introduce/59/",catch_response=True) as Res:
                if "万表网" in Res.text:
                    Res.success()
                else:
                    Res.failure("No member message!")
        @tag('WB')
        @task(2)
        def SWoman_UserC2(self):
            with self.client.get("/shop/dynamic/59/",catch_response=True) as Res:
                if "万表网" in Res.text:
                    Res.success()
                else:
                    Res.failure("No member message!")
            self.interrupt()

class M_Get(TaskSet):
    '会员资料接口请求'
    def on_start(self):
        Data_key = SSet_UP().START_009()
        self.My_y = Data_key[2]

    def on_stop(self):
        self.client.get('/member/loginOut',headers=self.My_y)

    @tag('WB')
    @task(5)
    def login(self):  # 会员登录接口请求
        Url_headers = {'Content-Type': 'application/json', 'Connection': 'keep-alive',
                    'User-Agent': 'Dalvik/2.1.0 (Linux; U; Android 8.1.0; Redmi Note 5 MIUI/V9.6.4.0.OEICNFD) WBIAO_MARKET_20190471_8.1.0 com.wbiao.wbapp 3.4.9#huawei# runningIn_1'}
        Pcontent = {"identity": '188000000' + str(random.randint(00,99)), "identityType": "1", "password": 111111, "platformSource": "Mall",
                    "remember": "true", "terminalType": "PC"}
        Url_loring = 'http://member-service.xxxxtest.cn/member/login'
        with self.client.post(url=Url_loring,data=json.dumps(Pcontent),catch_response=True,headers=Url_headers) as Res:
            if "memberCode" in Res.text:
                Res.success()
            else:
                Res.failure("Wrong")

    @tag('SH')
    @task
    def member_get(self):  # 获取个人资料
        with self.client.get('/member/center/get',catch_response=True, headers=self.My_y) as Res:
            if "5102252" in Res.text:
                Res.success()
            else:
                Res.failure("No member message!")

    @tag('SH')
    @task
    def member_message(self):  # 获取会员基本信息
        with self.client.get('/member/center/getMember',
                             catch_response=True,
                             headers=self.My_y) as Res:
            if "5102252" in Res.text:
                Res.success()
            else:
                Res.failure("No member message!")

class My_App(TaskSet): #api-APP请求
    def on_start(self):
        Data_key = SSet_UP().START_009()
        self.K_token = Data_key[0]
        self.HeaderToKen = Data_key[1]
    def on_stop(self):
        print("End-My_App")

    @tag('debug')
    @task
    def My_Cart(self):
        app_mParams = ""
        api_key = WB_ApiMD.api_get(app_mParams,'1','1')
        K_word = api_key + '&wb-token=' + self.K_token + Config.T_keyword
        with self.client.get('/api/cart/getList?' + api_key + WB_ApiMD.sign_R(K_word),
                             headers=self.HeaderToKen,
                             catch_response=True) as Res:
            if "cartGoodsList" in Res.text:
                Res.success()
            else:
                Res.failure("Faile")
'''
class My_talent_swagger(TaskSet): # Member swagger
    def on_start(self):
        Data_key = SSet_UP().START_009()
        self.K_token = Data_key[0]
        self.HeaderToKen = Data_key[3]
    def on_stop(self):
        self.interrupt()
    @task
    def talent_get(self): # 达人-获取图文信息
        with self.client.get('/member/talentImageText/get?talentImageTextId=122',
                             headers=self.HeaderToKen,
                             catch_response=True) as Res:
            if "talentImageTextId" in Res.text:
                Res.success()
            else:
                Res.failure("Wrong")
    @task
    def talent_list(self): # 达人-查询列表
        list_data = {
          "pager": {
            "now": 0,
            "size": 5,
            "total": 5
          },
          "search": [
            {
              "name": "string",
              "value": "string"
            }
          ],
          "sort": [
            {
              "asc": 'true',
              "name": "string"
            }
          ]
        }
        with self.client.post('/member/talentImageText/getList',
                              data=json.dumps(list_data),
                              headers=self.HeaderToKen,
                              catch_response=True) as Res:
            if "talentImageTextId" in Res.text:
                Res.success()
            else:
                Res.failure("Wrong")

class My_talent_rig(TaskSet): # Rig Console
    def on_start(self):
        Data_key = SSet_UP().START_009()
        self.K_token = Data_key[4]
        self.HeaderToKen = Data_key[3]
        self.php_mParams = Data_key[5]
    def on_stop(self):
        self.interrupt()
    @task
    def rig_t_get(self): # 达人类目详情
        with self.client.get('/back/member/talent/class/get?id=1'+ self.php_mParams +'&sign='+self.K_token,
                             headers=self.HeaderToKen,
                             catch_response=True) as Res:
            if 'name' in Res.text:
                Res.success()
            else:
                Res.failure('Wrong')

    @task
    def rig_t_list(self): # 达人类目列表
        with self.client.get('/back/member/talent/class/list?' + self.php_mParams + '&sign=' + self.K_token,
                             headers=self.HeaderToKen,
                             catch_response=True) as Res:
            if 'name' in Res.text:
                Res.success()
            else:
                Res.failure('Wrong')

    @task
    def rig_t_highCommissionGoods(self):  # 高佣金比例的商品列表
        Pcontent = {"brandCodes":[70,176],"goodsCode":"","models":""}
        with self.client.post('/back/member/talent/highCommissionGoods/list?' + self.php_mParams + '&sign=' + self.K_token,
                              data= json.dumps(Pcontent),
                              headers=self.HeaderToKen,
                              catch_response=True) as Res:
            if 'name' in Res.text:
                Res.success()
            else:
                Res.failure('Wrong')
'''

# class My_cart(HttpUser):
#     host = "http://api-service.xxxxtest.cn"
#     tasks = {My_cart:1}
# if __name__ == '__main__':
#     os.system("locust -f locustfile01.py --headless --users 1 --spawn-rate 1 --run-time 10")
后台-逻辑代码文件
# locustfile_php.py



import os,sys
pathS = os.getcwd()
Project_Path = os.path.dirname(os.path.dirname(os.path.dirname(pathS)))
root_Path = os.path.dirname(pathS)
sys.path.append(Project_Path)
sys.path.append(root_Path)

from locust import HttpUser, task , between , tag,User,constant,constant_pacing,TaskSet,constant_throughput,events
from other.WB_Locust.common.api_token import *
from other.WB_Locust.Config import Config
import json,time,random,requests

class SSet_UP():
    def START_009(self):
        # K_token = WB_ApiMD.MD5_token(self,1,1)
        # Api_HeaderToKen = HeaderToken.Header_token(self,3, K_token)
        # Member_HeaderToKen = HeaderToken.Header_token(self, 5, K_token)
        # PHP专用
        PHP_mParams = Config.php_mParams
        P_token = WB_ApiMD.MD5_token(self, 7, 5)
        Php_HeaderToKen = HeaderToken.Header_token(self, 2, P_token)
        # Rig_HeaderToKen = HeaderToken.Header_token(self, 2, K_token)
        # app_mParams = ""
        # api_key = WB_ApiMD.api_get(app_mParams, str(1), str(1))
        # K_word = api_key + '&wb-token=' + K_token + Config.T_keyword
        # Res = requests.get(url='http://api-service.xxxxtest.cn/api/cart/getList?' + api_key + WB_ApiMD.sign_R(K_word),
        #                    headers=HeaderToKen)
        # print(Res.text)
        # print(Res.url)
        # print(api_key)
        # print(K_word)
        # return K_token,Api_HeaderToKen,Member_HeaderToKen,Php_HeaderToKen,P_token,PHP_mParams
        return Php_HeaderToKen, P_token, PHP_mParams

class My_talent_swagger(TaskSet): # Member swagger
    def on_start(self):
        print("My_talent_swagger")
        Data_key = SSet_UP().START_009()
        self.HeaderToKen = Data_key[0]
    def on_stop(self):
        self.interrupt()
    @task
    def talent_get(self): # 达人-获取图文信息
        with self.client.get('/member/talentImageText/get?talentImageTextId=122',
                             headers=self.HeaderToKen,
                             catch_response=True) as Res:
            if "talentImageTextId" in Res.text:
                Res.success()
            else:
                Res.failure("Wrong")
    @task
    def talent_list(self): # 达人-查询列表
        list_data = {
          "pager": {
            "now": 0,
            "size": 5,
            "total": 5
          },
          "search": [
            {
              "name": "string",
              "value": "string"
            }
          ],
          "sort": [
            {
              "asc": 'true',
              "name": "string"
            }
          ]
        }
        with self.client.post('/member/talentImageText/getList',
                              data=json.dumps(list_data),
                              headers=self.HeaderToKen,
                              catch_response=True) as Res:
            if "talentImageTextId" in Res.text:
                Res.success()
            else:
                Res.failure("Wrong")

class My_talent_rig(TaskSet): # Rig Console
    def on_start(self):
        print("My_talent_rig")
        Data_key = SSet_UP().START_009()
        self.K_token = Data_key[1]
        self.HeaderToKen = Data_key[0]
        self.php_mParams = Data_key[2]
    def on_stop(self):
        self.interrupt()
    @task
    def rig_t_get(self): # 达人类目详情
        with self.client.get('/back/member/talent/class/get?id=1'+ self.php_mParams +'&sign='+self.K_token,
                             headers=self.HeaderToKen,
                             catch_response=True) as Res:
            if 'name' in Res.text:
                Res.success()
            else:
                Res.failure('Wrong')

    @task
    def rig_t_list(self): # 达人类目列表
        with self.client.get('/back/member/talent/class/list?' + self.php_mParams + '&sign=' + self.K_token,
                             headers=self.HeaderToKen,
                             catch_response=True) as Res:
            if 'name' in Res.text:
                Res.success()
            else:
                Res.failure('Wrong')

    @task
    def rig_t_highCommissionGoods(self):  # 高佣金比例的商品列表
        Pcontent = {"brandCodes":[70,176],"goodsCode":"","models":""}
        with self.client.post('/back/member/talent/highCommissionGoods/list?' + self.php_mParams + '&sign=' + self.K_token,
                              data= json.dumps(Pcontent),
                              headers=self.HeaderToKen,
                              catch_response=True) as Res:
            if 'name' in Res.text:
                Res.success()
            else:
                Res.failure('Wrong')



# class My_cart(HttpUser):
#     host = "http://api-service.xxxxtest.cn"
#     tasks = {My_cart:1}
# if __name__ == '__main__':
#     os.system("locust -f locustfile01.py --headless --users 1 --spawn-rate 1 --run-time 10")
执行
locust --headless --users 5 --spawn-rate 1 --run-time 30m --csv=wb_example
  • Type: 请求的类型,例如GET/POST。

  • Name:请求的路径。

  • reqs:当前请求的数量。

  • Fails:当前请求失败的数量。

  • Med:中间值,单位毫秒,一半的服务器响应时间低于该值,而另一半高于该值。

  • Avg:平均值,单位毫秒,所有请求的平均响应时间。

  • Min:请求的最小服务器响应时间,单位毫秒。

  • Max:请求的最大服务器响应时间,单位毫秒。

  • Average size:平均请求的大小,单位字节。

  • Req/s:是每秒钟请求的个数。

  • Failures/s:瞬时每秒失败数。

WebUI启动,均需要在命令行切换到执行文件的目录下,执行【locust】,对应打开链接即可 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/344320.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java 基础面试题——基本数据类型与包装类

目录1.Java 有哪几种基本数据类型?分别对应哪些包装类?2.Java 中为什么要保留基本数据类型?为什么要使用包装类?3.基本数据类型的转换规则有哪些?4.基本数据类型与包装类有什么区别?5.什么是装箱&#xff1…

MongoDB--》索引的了解及具体操作

目录 索引—index 索引的类型 索引的管理操作 索引的使用 索引—index 使用索引的原因:索引支持在MongoDB中高效地执行查询。如果没有索引,MongoDB必须执行全集合扫描,即扫描集合中的每个文档,以选择与查询语句匹配的文档。这…

基于android的即时通讯APP 聊天APP

基于android的即时通讯APP 或者 聊天APP 一 项目概述 该项目是基于Android 的聊天APP系统,该APP包含前台,后台管理系统,前台包含用户通讯录,用户详情,用户聊天服务,用户二维码,发现功能,发现详情 , 个人中心, 个人信…

【RSTP的原理和配置】

一、RSTP 概述 RSTP使用了IEEE 802.1W协议,视为STP的改进版本,收敛速度快,兼容STP。 RSTP可以兼容STP,但是会丧失快速收敛等优势; 1、RSTP对STP的改进; 1.1、端口角色的增补、简化了生成树协议的理解及部…

【基于transform和CNN的多级蒸馏:超分】

A hybrid of transformer and CNN for efficient single image super-resolution via multi-level distillation (基于transform和CNN的多级蒸馏单幅图像超分辨率算法) 近年来,基于卷积神经网络(CNN)的单幅图像超分辨…

Boost库的编译

废话就不多说了,直接上boost编译的方法。 1、下载boost库源码 https://github.com/missionlove/boost 2、使用vs命令行工具,选择对应的Command工具 3、切换目录到Boost源码 bootstrap.bat 文件所在的目录下 4、运行bootstrap.bat 脚本 start bootst…

CSS单位之vw、vh、vmin、vmax、%

CSS单位之vw、vh、vmin、vmax、% vm/vh:相对于视窗(Viewport)的高度和宽度。 1vh 等于1/100的视窗高度,1vw 等于1/100的视窗宽度。 视窗(Viewport)是指浏览器内部的可视区域大小,即window.innerWidth/window.innerHei…

研报精选230213

目录 【行业230213西南证券】医疗创新器械-内窥镜行业专题:核心三问,内窥镜技术趋势图谱和投资机会【行业230213国金证券】基础化工行业研究:成长接力,继续看好有边际变化的新材料【行业230213民生证券】有色金属周报:…

Hazel游戏引擎(004)

本人菜鸟,文中若有代码、术语等错误,欢迎指正 我写的项目地址:https://github.com/liujianjie/GameEngineLightWeight(中文的注释适合中国人的你) 文章目录前言操作步骤讲解GitHubHazel项目此项目定位项目属性修改Sand…

【蓝桥集训】第一天——前缀和

作者:指针不指南吗 专栏:Acwing 蓝桥集训每日一题 🐾输出的时候,注意数据类型🐾 文章目录1.截断数组2.前缀和3.子矩阵的和4.k倍区间1.截断数组 给定一个长度为 n 的数组 a1a_1a1​,a2a_2a2​,…,ana_nan​。 现在&…

Windows提权流程及手法

Windows提权一、信息收集二、WinSystemHelper三、Sherlock四、MSF提权五、参考链接一、信息收集 收集本机systeminfo中补丁信息 在提权辅助平台 https://i.hacking8.com/tiquan/ 中查询可利用exp 查询exp,选择对应的Exp下载运行 https://i.hacking8.com/ https:/…

在google设置静态页面 CDN加速

一、 创建bucket,设置bucket 链接:https://console.cloud.google.com/storage/browser 创建bucket 设置bucket公开访问 在bucket列表中,进入刚创建的bucket。 选择页面顶部附近的权限标签。 在权限部分中,点击 person_add 授…

Linux操作系统学习(了解环境变量)

文章目录环境变量初识除了上述介绍的PATH&#xff0c;还有一些常见的环境变量如&#xff1a;查看环境变量方法 &#xff1a;环境变量的基本概念&#xff1a;本地变量&#xff1a;环境变量初识 环境变量解释起来比较抽象&#xff0c;先看示例&#xff1a; #include <stdio.…

如果你是O型血的准妈妈,新生儿溶血症一定要提前了解,有备无患

婚姻&#xff0c;最重要的是同理心&#xff0c;合适的家庭&#xff0c;但一个刚刚分娩的宝贝妈妈认为&#xff0c;爱也可能需要血型匹配。原因是宝马刚出生的宝宝在医院治疗黄疸&#xff0c;因为宝马是O型血&#xff0c;而丈夫不是O型血&#xff0c;医院治疗黄疸的宝宝很多。这…

完美解决:重新安装VMware Tools灰色。以及共享文件夹的创建(centos8)

解决&#xff1a;重新安装VMware Tools灰色问题&#xff1a;重新安装VMware Tools灰色解决方案-挂载VMware中的linux.iso1. vmtools的linux.iso挂载及安装2. 共享文件夹的创建及配置问题&#xff1a;重新安装VMware Tools灰色 发现一个小问题&#xff0c;我的vm虚拟机安装后发…

前后端一些下载与配置(第二篇 第10天过后)nuxt banner redis 短信服务

NUXT 应该是不用怎么装&#xff1f; 有现成的 axios 还需要在npm吗 好像已经有现成的了 banner banner 笔记汇总P396 Redis Linux安装redis tar -xzvf redis-6.2.6.tar.gz cd redis-6.2.6 照着他做 然后 cd /usr/local/redis/bin ./redis-server /usr/local/redis…

微信小程序 事件传参,参数同步显示 button提交内容,读取input内容

我们先来回顾一下之前学的内容 我们可以在button组件中加入bindtap参数进行事件绑定 <button type"primary" bindtap"onbutton">按钮</button> onbutton(e){console.log(按钮被按下)}, 然后我们也能在input组件中加入bindinput参数进行事件绑…

Django框架之模型系列

模型 重点 模型配置 数据的增删改 增:book BookInfo() book.save() 和BookInfo.objects.create() 删:book.delete() 和BookInfo.objects.get().delete() 改:book.namexxx book.save() 和 BookInfo.objects.get().update(namexxx) 数据的查询 基础查询 F对象和Q对象 关联…

C语言刷题——“C”

各位CSDN的uu们你们好呀&#xff0c;今天&#xff0c;小雅兰要巩固一下之前学过的知识&#xff0c;那么&#xff0c;最好的复习方式就是刷题啦&#xff0c;现在&#xff0c;我们就进入C语言的世界吧 从最简单的开始噢 完完全全零基础都能看懂 题目来源于牛客网 编程语言初学训…

微信小程序开发笔记 进阶篇⑧——Java后端推送订阅消息 | HTTPS调用,消息卡片,跳转页面

文章目录一、前言二、接口说明三、access_token 获取四、消息模板五、参数page六、参考一、前言 微信小程序开发笔记——导读 微信小程序开发笔记 进阶篇⑦——小程序订阅消息 | 发起订阅&#xff0c;获取当前设置 小程序前端做好消息订阅的准备工作Java后端将数据按照消息模板…