首页
工具
心境语句
相册
建站轨迹
关于
Search
1
微信小程序:计算属性的两种体现方式及应用场景
1,594 阅读
2
Antd Upload 组件上传文件接收数据流并下载
1,059 阅读
3
C#插件火车头采集器动态切换代理IP,及自动切换UserAgent
542 阅读
4
[C#]使用dnSpy对目标程序(EXE或DLL)进行反编译修改并编译运行
537 阅读
5
ADODB.Connection 错误 800a0e7a 未找到提供程序。该程序可能未正确安装解决方法
499 阅读
react
typecho
ASP
Centos
MYSQL
PHP
Sql server
Javascript
nodejs
数据采集
.NET
git
编程算法
管理及流程
Vue
微信小程序
android
python
mongodb
登录
Search
标签搜索
kotlin
node-sass
nuxtjs
C#火车头插件
火车头采集器
火车头代理
C#反编译
程序逆向
dnSpy教程
Antd
InputNumber
NPM教程
NPM命令
rrweb教程
git慢
git镜像
vim命令
git命令
网页音乐插件
网页播放器
Elysian
累计撰写
74
篇文章
累计收到
0
条评论
首页
栏目
react
typecho
ASP
Centos
MYSQL
PHP
Sql server
Javascript
nodejs
数据采集
.NET
git
编程算法
管理及流程
Vue
微信小程序
android
python
mongodb
页面
工具
心境语句
相册
建站轨迹
关于
搜索到
74
篇与
Elysian
的结果
2022-12-12
git如何修改其不区分文件大小写(默认忽略大小写)的设置
因为git默认的设置是忽略文件大小写的,这就会有可能导致不同分支拉取下来的同一文件的文件名大小写却不同,从而导致代码中对应的路径找不到而报错,那么这种问题怎么处理呢?很简单,直接使用 git config core.ignorecase false 命令 把git忽略大小写的配置关掉;我们可以使用 git config core.ignorecase 命令来检查当前git配置的是否忽略大小写的配置,默认情况下应该是返回true,表示是忽略大小写的,不区分大小写;当我们执行 git config core.ignorecase false 后 再去 执行 git config core.ignorecase 会发现这时候返回值是 false 代表我们成功关掉了git的忽略大小写配置;PS:在linux系统中,大小写是敏感的,所以配置GIT的时候需要设置一下,再就是设置命令时使用git的命令工具,不要使用cmd
2022年12月12日
164 阅读
0 评论
0 点赞
2022-11-24
centos7 防火墙常用命令
CentOS7 以上机器一些命令和低版本CentOS是有些差异的,本文只针对CentOS7 以上版本。CentOS7使用firewalld打开关闭防火墙与端口1、firewalld的基本使用启动: systemctl start firewalld关闭: systemctl stop firewalld查看状态: systemctl status firewalld开机禁用 : systemctl disable firewalld开机启用 : systemctl enable firewalld2.systemctl是CentOS7的服务管理工具中主要的工具,它融合之前service和chkconfig的功能于一体。启动一个服务:systemctl start firewalld.service关闭一个服务:systemctl stop firewalld.service重启一个服务:systemctl restart firewalld.service显示一个服务的状态:systemctl status firewalld.service在开机时启用一个服务:systemctl enable firewalld.service在开机时禁用一个服务:systemctl disable firewalld.service查看服务是否开机启动:systemctl is-enabled firewalld.service查看已启动的服务列表:systemctl list-unit-files|grep enabled查看启动失败的服务列表:systemctl --failed3.配置firewalld-cmd查看版本: firewall-cmd --version查看帮助: firewall-cmd --help显示状态: firewall-cmd --state查看所有打开的端口: firewall-cmd --zone=public --list-ports更新防火墙规则: firewall-cmd --reload查看区域信息: firewall-cmd --get-active-zones查看指定接口所属区域: firewall-cmd --get-zone-of-interface=eth0拒绝所有包:firewall-cmd --panic-on取消拒绝状态: firewall-cmd --panic-off查看是否拒绝: firewall-cmd --query-panic如何开启一个端口添加firewall-cmd --zone=public --add-port=80/tcp --permanent (–permanent永久生效,没有此参数重启后失效)重新载入firewall-cmd --reload查看firewall-cmd --zone= public --query-port=80/tcp删除firewall-cmd --zone= public --remove-port=80/tcp --permanent原文链接:https://blog.csdn.net/sinat_26476047/article/details/116192448
2022年11月24日
40 阅读
0 评论
0 点赞
2022-11-22
Mysql常用语法备忘录【常用函数、特殊语法、特殊需求实现方式】(持续更新中......)
一、排序函数RANK():1,1,3 在计算排序时,若存在相同的位次,会跳过之后的位次DENSE_RANK():1,1,2 在计算排序时,若存在相同的位次,不会跳过之后的位次ROW_NUMBER():1,2,3 这个函数赋予唯一的连续位次二、日期函数DATEDIFF(data1,date2):date1-date2DATE_FORMAT(date,format):日期格式转换TIMESTAMPDIFF(second/minute/hour/day/week/month,date1,date2):date2-date1DATE_ADD(curdate(),interval 1 day):返回当前日期增加1天后的日期DATE_SUB(curdate(),interval 1 day):返回当前日期减少1天的日期YEAR(date1)、MONTH(date1) 、DAY(date1):返回年、月、日 。例如:DAY(‘2021-08-02’):返回的是2LAST_DAY(date1):返回当月的最后一天 。例如:LAST_DAY(‘2021-08-02 11:41:01’) 返回:2021-08-31小tips:DAY(LAST_DATE(date1))返回这个月的天数三、字符串函数1)转换Lcase(str):将字符串str的所有字母变成小写字母Ucase(str):将字符串str的所有字母变成大写字母2)计算长度Length(str):计算str的长度Char_length():计算字符串的长度3)位置Locate(substr,str):返回子串substr在字符串中第一次出现的位置,如果子串substr在字符串str中不存在,则返回0;POSITION(substr IN str):返回子串substr在字符串str中第一次出现的位置,如果字符substr在字符串中不存在,与locate函数作用一样。4)截取Right(s,n):返回字符串s的后n个字符Left(s,n):返回字符串s的前n个字符Mid(s,n,len):返回从字符串s的n位置截取的长度为len的子字符串,同substring(s,n,len)Substring_index(str,n,m):返回字符串str从第n个字符截取到第m个字符Substring_index(str,separator,count),截取count个分隔符之前的字符串,如果count为正,则从左边开始截取,如果count为负,则从右边开始截取Replace(str,n,m):将字符串str中的第n个字符替换成m字符Replace(s,s1,s2):替换函数,用s2替换s中的s15)连接group_concat([DISTINCT] 要连接的字段 [Order BY 排序字段 ASC/DESC] [Separator '分隔符']) 这个函数必须和group by语句一起使用,将goup by产生的一个分组中的值连接起来,返回一个字符串结果CONCAT_WS(’分隔符‘,str1,str2) 第一个参数为分隔符,相比于concat函数可以一次性指定分隔符CONCAT(str1,str2,...) :将多个字符串连接成一个字符串6)去除空格Rtrim():去除字符串右端空格Ltrim():去除字符串左端空格Trim():去除字符串两端空格7)匹配Like 完全匹配Rlike 不完全匹配,只要字段中的值存在要查找的部分,就会被选择出来Regexp 不完全匹配. 匹配任意单个字符匹配0个或者多个前一个得到的字符[] 匹配任意一个[]内的字符^ 匹配开头$ 匹配结尾{n} 匹配前一个字符反复n次1 [!abd] 不包含括号中的字符四、分析函数LEAD(x)、LAG(x):分别返回传入的列x对于当前行的 下一行/前一行 的值LEAD(x,y)、LAG(x,y):分别返回传入的列x对于当前的 后y行/前y行 的值First_Value(x)、Last_value(x):分别返回列x的 第一个值/最后一个值Nth_value(x,n):返回x列的第n个值注意:last_value nth_value 通常需要把window frame 修改成 rows between unbounded preceding and unbounded following五、其他函数Ceil(x):返回大于或者等于x的最小整数Floor(x):返回小于或者等于x的最大整数CAST(expression AS date_type)将一种数据类型显示转换成另一种数据类型,可转换的数据类型为:二进制binary、字符型char、日期date、时间time、日期和时间datetime、浮点数decimal、整数signed、无符号整数unsigned。在创建表格的时候,SELECT * FROM 表名 LIMIT 3,1; #从第4条数据开始取数,取1条数据,即只取第四条 SELECT * FROM 表名 LIMIT 1 OFFSET 3; #从第4条数据开始取数,取1条数据,即只取第四条 SELECT * FROM 表名 LIMIT 3,2; #从第4条数据开始取数,取2条数据,即取第4条,第5条 SELECT * FROM 表名 LIMIT 2 OFFSET 3; #从第4条数据开始取数,取2条数据,即取第4条,第5条LIMIT1 OFFSET2:从第3条数据开始取数,返回1条记录,类似于LIMIT 2,1LIMIT1,3 :分页,从第2条记录开始,返回3条记录,类似于LIMIT 3 OFFSET 1IF(true,a,b):IF 函数,如果为真,则返回a,否则,返回bIFNULL(expression1,expression2): 如果expression1不为null,则返回expression1,否则返回expression2abc ↩
2022年11月22日
79 阅读
0 评论
0 点赞
2022-09-28
python 优秀的语法糖及需要记录备忘的内容(持续更新...)
python3 入门知识(难点、语法糖、备忘)内容循环中的else一、while...else...1. 格式while 条件: # 条件满足时执行的代码... else: # 如果上述的while循环没有调用break,就执行的代码...说明:只要while循环体中没有执行break,那么当while循环体中所有的代码执行完后,else中的代码也会执行如果while循环中有break那么表示整个while介绍,else中的代码也不会被执行2. 示例有break时i = 1 while i <= 3: print("哈哈,我是超神,double kill......") if i == 1: print("调用了break") break i += 1 else: print("我是else中的代码")运行结果哈哈,我是超神,double kill...... 调用了break没有break时i = 1 while i <= 3: print("哈哈,我是超神,double kill......") i += 1 else: print("我是else中的代码")运行结果哈哈,我是超神,double kill...... 哈哈,我是超神,double kill...... 哈哈,我是超神,double kill...... 我是else中的代码3. 案例i = 3 while i > 0: password = input("请输入密码:(还剩%d次机会)" % i) if password == "123456": print("密码输入正确") break i -= 1 else: print("密码输入3次全部错误,请明日再试")三、for...else...1. 格式for 变量 in 可迭代对对象: # 正常执行的代码 else: # for未使用break时执行的代码2. 示例未使用breakfor i in range(5): print("i=%d" % i) else: print("我是else中的代码...")运行结果:i=0 i=1 i=2 i=3 i=4 我是else中的代码....使用breakfor i in range(5): print("i=%d" % i) if i == 1: print("我是break哦...") break else: print("我是else中的代码...")运行结果:i=0 i=1 我是break哦...3. 案例for i in range(3, 0, -1): password = input("请输入密码:(还剩%d次机会)" % i) if password == "123456": print("密码输入正确") break else: print("密码输入3次全部错误,请明日再试")字符串切片一、是什么较为官方的说法:切片是指对操作的对象截取其中一部分的操作通俗来说:一种能够从数据中取到一部分数据的方式例如,有一个字符串"abcdef",我们可以通过切片取到"cde"切片不仅可以在字符串中应用,还可以对列表、元组等进行操作,简言之“切片”功能很重要。本节课我们以字符串为例讲解“切片”二、怎样用1. 语法[起始:结束:步长]注意选取的区间从"起始"位开始,到"结束"位的前一位结束(不包含结束位本身),步长表示选取间隔默认“步长”为1,即取完一个下标的数据之后,第二个下标的是在刚刚下标基础上+1步长为正数,表示从左向右取数据步长为负数,表示从右向左取数据2. 示例demo1name = 'abcdef' print(name[0:3]) # 取下标为0、1、2的字符,注意取不到下标为3的空间 运行结果:abc推导式一、是什么推导式:就是一种能够快速生成数据的方式例如,想要快速生成由1~20内所有奇数数组成的列表,就可以用"推导式",代码如下[x for x in range(1, 21) if x % 2 == 0]运行结果如下:[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]二、分类推导式,根据最终要生成的数据,简单划分为列表推导式集合推导式字典推导式注意:没有元组推导式,而是生成器(在Python高级进阶课程中在学习)三、列表推导式列表推导式:一种可以快速生成列表的方式1. 格式[变量 for 变量 in 可迭代对象]四、集合推导式集合推导式:一种快速生成集合的方式示例:In [5]: a = {x for x in range(1, 21) if x % 2 == 0} In [6]: type(a) Out[6]: set In [7]: a Out[7]: {2, 4, 6, 8, 10, 12, 14, 16, 18, 20}集合推导式中也可以用if等,与列表推导式在格式上很类似,这里就不做过多的介绍,请类别列表推导式进行学习五、字典推导式字典推导式:一种快速生成字典的方式示例1:快速生成一个1~10内key为某个数此时value为平方的字典{x:x**2 for x in range(1, 11)}拆包一、是什么拆包:是一种快速提取数据的方式例如,有一个元组(11, 22, 33, 44)想快速的提取每个元素且赋值给num1, num2, num3, num4这4个变量普通的做法,较为繁琐nums = (11, 22, 33, 44) # 定义一个元组 num1 = nums[0] # 通过下标来提取 num2 = nums[1] # 通过下标来提取 num3 = nums[2] # 通过下标来提取 num4 = nums[3] # 通过下标来提取拆包的方式,可以见非常简洁num1, num2, num3, num4 = (11, 22, 33, 44) # 一行代码搞定二、拆列表示例a, b = [11, 22] print(a) print(b) 运行结果:11 22三、拆元组示例a, b = (11, 22) print(a) print(b) 运行结果:11 22四、拆集合示例a, b = {11, 22} print(a) print(b) 运行结果:11 22五、拆字典1. 一般用法示例a, b = {"name": "王老师", "web_site": "http://www.codetutor.top"} print(a) print(b) 运行结果:name web_site默认取到的是字典的key,而不是value六、注意点=右边要拆的数据元素的个数 要 与=左边存的变量个数相同错误示例如下:a, b = [11, 22, 33]函数参数高级用法一、缺省参数1. 是什么缺省参数也叫做默认参数,是指定义函数时形参变量有默认值,如果调用函数时没有传递参数,那么函数就用默认值,如果传递了参数就用传递的那个数据2. 做什么当调用函数时,有些参数不必传递,而是用默认值,这样的场景往往都用缺省参数例如,一个学校现在开始检查每个学生的信息,学生说:报告老师我是xxx学校xxx系xxx年级xxx班学生,名字叫xxxx,大家想只要是这学校的学生那么“xxx学校”就可以省略不用说了,因为大家都知道。所以就可以认为默认的学校就是xxx,而当其他学校的学生介绍时yyy学校名字案例说就一定要说清楚,否则让人弄混了来个demo试试看def print_info(name, class_name, grade, department_name, school_name="通俗易懂"): print("老师好:我是来自 %s学校 %s系 %s年级 %s班级 的学生,我叫%s" % ( school_name, department_name, grade, class_name, name )) print_info("dong", "超牛", "二", "软件工程") print_info("dong", "超牛", "二", "软件工程", "codetutor.top") 运行结果老师好:我是来自 通俗易懂学校 软件工程系 二年级 超牛班级 的学生,我叫dong 老师好:我是来自 codetutor.top学校 软件工程系 二年级 超牛班级 的学生,我叫dong3. 注意点缺省参数只能在形参的最后(即最后侧)缺省参数全挨在一起(在右侧),不是缺省参数挨在一起(在左侧)>>> def printinfo(name, age=35, sex): ... print name ... File "<stdin>", line 1 SyntaxError: non-default argument follows default argument二、命名参数1. 是什么命名参数是指:在调用函数时,传递的实参带有名字,这样的参数叫做命名参数2. 做什么命名参数能够在调用函数的时候,不受位置的影响,可以给需要的参数指定传递数据3. 注意点命名参数的名字要与形参中的名字相同,不能出现命名参数名字叫做num,而形参中没有变量num如果形参左侧有普通的形参,调用函数时传递的参数一定要先满足这些形参,然后再根据需要编写命名参数def test(a, b, c=100, d=200): print("a=%d, b=%d, c=%d, d=%d" % (a, b, c, d)) # 下面的方式都成功 test(11, 22) test(11, 22, 33) test(11, 22, 33, 44) test(11, 22, d=33, c=44) # 下面的方式都失败 test(c=1, d=2) # 缺少a、b的值 test(c=1, d=2, 11, 22) # 11, 22应该在左侧三、不定长参数1. 是什么不定长参数:定义函数的时候形参可以不确定到底多少个,这样的参数就叫做不定长参数不定长参数有2种方式表示*args :表示调用函数时多余的未命名参数都会以元组的方式存储到args中**kwargs:表示调用函数时多余的命名参数都会以键值对的方式存储到kwargs中注意:*和**是必须要写的,否则就变成了普通的形参了当我们说不定长参数的时候,就是指*args和**kwargs2. 做什么通过不定长参数,能够实现调用函数时传递实参个数可以随意变换的需求例如def test(a, b, *args, **kwargs): print("-------------------------------") print(a, type(a)) print(b, type(b)) print(args, type(args)) print(kwargs, type(args)) test(11, 22) test(11, 22, 33, 44, 55, 66) test(11, 22, 33, 44, 55, 66, name="wanglaoshi", web_site="http://www.codetutor.top") 运行结果:------------------------------- 11 <class 'int'> 22 <class 'int'> () <class 'tuple'> {} <class 'tuple'> ------------------------------- 11 <class 'int'> 22 <class 'int'> (33, 44, 55, 66) <class 'tuple'> {} <class 'tuple'> ------------------------------- 11 <class 'int'> 22 <class 'int'> (33, 44, 55, 66) <class 'tuple'> {'name': 'wanglaoshi', 'web_site': 'http://www.codetutor.top'} <class 'tuple'>3. 注意点加了星号*的变量args会存放所有未命名的变量参数,args为元组而加**的变量kwargs会存放命名参数,即形如key=value的参数, kwargs为字典一般情况下*args、**kwargs会在形参的最右侧args与kwargs的名字可以变,例如叫*aa,**bb都是可以,但一般为了能够让其他的开发者快速读懂我们的代码最好还是不改4. 特殊情况缺省参数在*args后面def sum_nums_3(a, *args, b=22, c=33, **kwargs): print(a) print(b) print(c) print(args) print(kwargs) sum_nums_3(100, 200, 300, 400, 500, 600, 700, b=1, c=2, mm=800, nn=900) 说明:*args后可以有缺省参数,想要给这些缺省参数在调用时传递参数,需要用命名参数传递,否则多余的未命名参数都会给args如果有**kwargs的话,**kwargs必须是最后的通过*、**拆包一、引入假如有函数def test(a, b, c): print(a + b + c) 现在自己拥有的数据nums = [11, 22, 33]怎样养才能在调用test函数的时候,将nums给传递过去呢?def test(a, b, c): print(a + b + c) nums = [11, 22, 33] test(nums[0], nums[1], nums[2]) 上述代码用的方式虽然能行,但不是很简洁为了能够用更加简洁的方式实现上述场景需求,Python可以通过*、**将数据拆包后传递二、使用*拆包有时在调用函数时,这个函数需要的是多个参数,而自己拥有的是一个列表或者集合这样的数据,此时就用可以用*拆包使用方式*列表 *元组 *集合用*拆包的方式实现上述功能def test(a, b, c): print(a + b + c) nums = [11, 22, 33] test(*nums) # 此时的*的作用就是拆包,此时*nums相当于11, 22, 33 即test(11, 22, 33) 当是元组时依然可以拆def test(a, b, c): print(a + b + c) nums = (11, 22, 33) test(*nums) 当时集合是也是可以拆的def test(a, b, c): print(a + b + c) nums = {11, 22, 33} test(*nums) 注意:*对列表、元组、集合可以拆包,但一般都是在调用函数时用三、使用**拆包使用**可以对字典进行拆包,拆包的结果是命名参数例如def test(name, web_site, age): print(name) print(web_site) print(age) info = { "name": "王老师", "web_site": "www.codetutor.top", "age": 18 } test(**info) 四、难点1. 疑惑点学习不定长参数时,掌握了*args、**kwargs现在学习拆包时,也用到了*、**那它们之间有什么关系呢?答:没有任何关系,只是长得像罢了2. 示例def test1(*args, **kwargs): print("----在test1函数中----") print("args:", args) print("kwargs", kwargs) def test2(*args, **kwargs): print("----在test2函数中----") print("args:", args) print("kwargs", kwargs) test1(args, kwargs) test2(11, 22, 33, name="王老师", age=18) 运行结果----在test2函数中---- args: (11, 22, 33) kwargs {'name': '王老师', 'age': 18} ----在test1函数中---- args: ((11, 22, 33), {'name': '王老师', 'age': 18}) kwargs {}3. 示例2def test1(*args, **kwargs): print("----在test1函数中----") print("args:", args) print("kwargs", kwargs) def test2(*args, **kwargs): print("----在test2函数中----") print("args:", args) print("kwargs", kwargs) test1(*args, **kwargs) test2(11, 22, 33, name="王老师", age=18) 运行结果----在test2函数中---- args: (11, 22, 33) kwargs {'name': '王老师', 'age': 18} ----在test1函数中---- args: (11, 22, 33) kwargs {'name': '王老师', 'age': 18}匿名函数一、是什么匿名函数:没有名字的函数,在Python中用lambda定义示例lambda x, y: x + y # 定义了一个匿名函数 1.没有名字 2.完成2个数的加法操作二、做什么可以用一行代码完成简单的函数定义可以当做实参快速传递到函数中去三、怎样用用lambda关键词能匿名函数。这种函数得名于省略了用def声明函数的标准步骤1. 格式lambda函数的语法只包含一个语句,如下:lambda 形参1, 形参2, 形参3: 表达式2. 注意lambda函数能接收任何数量的参数但只能返回一个表达式的值,其默认就是返回的,不用写return3. 使用方式既然我们已经知道def定义函数时的变量存储的是函数的引用,所以只要有了这个函数的引用,也就可以通过变量名()的方式调用函数而,函数分为def定义的普通函数,和用lambda定义的匿名函数,所以无论一个变量例如b保存的是普通函数的引用,还是匿名函数的引用,都可以用b()方式调用b指向的函数一般情况下对匿名函数的使用有2种方式通过lambda定义匿名函数,然后用一个变量指向这个匿名函数,然后通过变量名()调用这个匿名函数直接在调用其它函数实参的位置通过lambda定义匿名函数,会将这个匿名函数的引用当做实参进行传递方式1示例:# 定义了一个匿名函数,然后让变量add_2_nums指向它 add_2_nums = lambda x, y: x + y # 调用add_2_nums指向的匿名函数 print("10+20=" % add_2_nums(10, 20)) 以上实例输出结果:0+20=30方式2示例:def fun(a, b, opt): print("a = %d" % a) print("b = %d" % b) print("result = %d" % opt(a, b)) # 此时opt指向了第7行定义的匿名函数,所以opt(a, b)就相当于调用匿名函数 fun(1, 2, lambda x, y: x + y) # 定义一个匿名函数,且将它的引用当做实参进行传递 其他语言匿名函数及Lambda:javascript、ES6新增语法“箭头函数”,例:(a,b)=>{return a+b;}C#的匿名函数,例:var func = ((Func<int, int, int>)((x, y) => { return x+y; }));引用id(a)可以查询a变量地址文章转自:https://doc.itprojects.cn/0001.zhishi/python.0001.python3kuaisurumen/index.html#/README截取部分需要备忘和语法糖部分记录
2022年09月28日
136 阅读
0 评论
0 点赞
2022-08-24
jmeter教程——从入门到熟练,jmeter常用基础教程
安装与配置一:下载jdk——配置jdk环境变量1.新建环境变量变量名:JAVA_HOME变量值:(即JDK的安装路径)2.编辑Path%JAVA_HOME%bin;%JAVA_HOME%jrebin;3.新建环境变量变量名:CLASSPATH变量值: .;%JAVA_HOME%lib;%JAVA_HOME%libtools.jar4.验证在cmd窗口中输入java二:下载JMeter——配置环境变量(下载地址: Apache JMeter - Download Apache JMeter )1.下载后无需安装,解压后即可使用。解压后目录如下2.环境配置新增JMETER_HOME环境变量,变量值为JMeter解压的路径编辑CLASSPATH变量,加上%JMETER_HOME%libextApacheJMeter_core.jar;%JMETER_HOME%libjorphan.jar;%JMETER_HOME%liblogkit-2.0.jar;完成以上操作后打开JMeter中bin目录下面的jmeter.bat文件即可打开JMeter了打开的时候会有两个窗口,Jmeter的命令窗口和Jmeter的图形操作界面,不要关闭命令窗口设置成中文方法一: 方法二:永久设置成中文 找到jmeter下的bin目录,打开jmeter.properties 文件第三十七行修改为 language=zh_CN 去掉前面的#jmeter——接口测试一.线程组——选择测试计划,右键-->添加-->线程-->线程组线程数:虚拟用户数。一个虚拟用户占用一个进程或线程。准备时长:设置的虚拟用户数需要多长时间全部启动。如果线程数为20 ,准备时长为10 ,那么需要10秒钟启动20个线程。也就是每秒钟启动2个线程。循环次数:每个线程发送请求的次数。如果线程数为20 ,循环次数为100 ,那么每个线程发送100次请求。总请求数为20*100=2000 。如果勾选了“永远”,那么所有线程会一直发送请求,一到选择停止运行脚本。二.HTTP请求——选择线程组:右键-->添加-->取样器-->HTTP请求请求名称,可不改Web服务器信息,网络协议、域名或IP、端口号,可自行修改接口请求:请求方法、请求路径、编码格式,可自行修改参数传递:消息体数据存储JSON信息三.HTTP信息头管理器——选择线程组:右键-->添加-->配置元件-->HTTP信息头管理器作用:可以存储请求头里面的信息四.查看结果——选择线程组:右键-->添加-->监听器-->查看结果树1.开始测试 接口调用成功,通过修改http请求来验证返回值是否符合预期!jmeter——Http请求默认值选择测试计划:右键-->添加-->配置元件-->HTTP请求默认值一个线程下可以同时存在多个http请求,可以把公共参数,提取到HTTP请求默认值组件中比如:协议、IP、端口号、编码等然后在每个http请求的元件中,编辑自己独有的信息即可。注:加了http请求默认值之后,在单个http请求里面还填写了同样的数据,那么以哪个为准就近原则——就近原则!jmeter——Http cookie管理器 1.添加HTTP cookie管理器之前:有报错,缺少cookies2.选择测试计划:右键-->添加-->配置元件-->HTTP cookie管理器3.添加HTTP cookie管理器之后再次测试,不报错。作用描述:HTTP Cookie管理器可以像浏览器一样存储和发送cookie,如果你要发送一个带cookie的http请求,cookie manager会自动存储该请求的cookies,并且后面如果发送同源站点的http请求时,都可以用这个cookies。jmeter——接口与线程之间的传参以查询全部课程接口为例,希望提取课程id一.添加json提取器:右键http请求-》添加-》后置处理器-》json提取器JSON提取公式:$..字段名查看提取结果——调试取样器:course_id=63提取全部id如下:二.引用提取出来的参数1.同一线程下引用:${引用名} 2.跨线程引用:后置处理程序 直接把进入课程详情接口拉到另一个线程下,课程id没有成功被引用跨线程需要把提取出来的值设置为全局变量:右键http请求-》添加-》后置处理器-》后置处理程序在BeanShell后置处理器中使用__setProperty()函数把courses_id设置为全局变量${__setProperty(新值,${提取值},)};设置全局变量成功,再次引用查看效果跨线程引用方法:${__property(变量名)}跨线程调用成功!报错是因为没有cookies,下面解决no cookies问题三.跨线程调用cookies1.找到需要提取的内容 2.添加正则表达式提取器:右键http请求-》添加-》后置处理器-》json提取器 3.查看提取结果——调试取样器 4.成功提取!同样,跨线程需要把提取出来的值设置为全局变量: 右键http请求-》添加-》后置处理器-》后置处理程序${__setProperty(nlqtoken,${lqtoken},)};5.在第二个线程下添加信息头管理器 6.跨线程引用函数:lqtoken=${__property(nlqtoken)} 7.开始测试 跨线程cookies调用成功!jmeter——参数化一.CSV Data Set Config方式1.新建CSV格式文件 2.CSV——选择测试计划,右键-->添加-->元件-->CSV data Sat config 3.使用参数化变量:${变量名} 4.开始测试 三个登录接口分别使用了不同的账号密码————————————————版权声明:本文为CSDN博主「Mr. G K」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/weixin_45014379/article/details/124190381
2022年08月24日
61 阅读
0 评论
0 点赞
1
2
3
...
15