JMeter接口测试-5.JMeter高级使用

news2025/1/11 10:14:02

JMeter高级使用

案例:

  • 用户登录后-选择商品-添加购物车-创建订单-验证结果

问题:

  • JMeter测试中,验证结果使用断言,但断言都是固定的内容
  • 假如要判断的内容(预期内容)是在变化的, 有时候还是不确定的, 那该怎么办呢?

解决:

  • 1.通过查询数据库获取动态的结果
  • 2.使用beanshell断言进行结果验证

实现步骤:

  • 创建登录接口HTTP请求

  • 创建添加购物车接口HTTP请求

  • 创建订单接口HTTP请求,通过数据查看订单号

  • 对订单接口结果验证,是否创建订单号

    • 查询数据库获取结果

    • 使用beanshell断言进行动态结果验证

1. JMeter连接数据库

1.1 数据库配置信息

配置信息:

  • ip:192.168.1.242
  • port:7090
  • 用户名:test
  • 密码:test123456
  • 数据库名称:xxxx

可使用数据库连接工具进行连接,例如:navicat

image-20240730150454330

1.2 连接数据库

  • 元件JDBC Connection Configuration进行连接数据库

实现步骤:

  • 1.下载MySQL的jdbc驱动(mysql-connector-java.jar)

    • https://mvnrepository.com/artifact/mysql/mysql-connector-java
      • image-20200209163119761
    • 将其放到放在指定的目录,或者放在 …\apache-jmeter\lib\ 目录下

    在这里插入图片描述

  • 在测试计划下添加驱动地址

    • 在这里插入图片描述

    • 备注:

      • 如果放在jmeter/bin目录,则不需要在测试计划下添加jar包
  • 选择线程组-添加-配置原件-JDBC Connection Configuration

    • 主要配置

      • Variable Name Bound to Pool
        • 配置变量名称
        • Variable Name不能为空
      • Database connection
        • DataBase URL 格式为:jdbc:mysql://服务器ip:端口号/数据库
        • 在数据库后加参数?allowMultiQueries=true,可同时执行多条mysql语句;否则报错
        • select语句中含有中文字符的缘故,jmeter识别不了。
          • 解决办法:就是在JDBC 的连接中,增加useUnicode=true&characterEncoding=utf8
    • jdbc:mysql://211.103.136.242:7090/db-name
      test
      test123456
      

在这里插入图片描述

  • 添加JDBC Request

    • 添加-> 取样器-> JDBC Request
      • 添加变量和查询语句
      • 变量名必须和JDBC Connection Configuration中的变量名保持一致
  • image-20200209224521555

  • 查询语句

    • select order_id from tb_order_info where user_id='1' order by order_id desc limit 3
      
  • Variable names:将查询结果当做一个参数使用

  • 查出来的数据有好些内容,调用方式

    ```
    取数据第1值调用:$ {test_01}
    取数据第5值调用:$ {test_05}
    取数据第n值调用:$ {test_n}
    

    image-20200209224750397

2. Beanshell使用

2.1 介绍

什么是Bean Shell?

  • BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法;

  • BeanShell是一种松散类型的脚本语言(这点和JS类似);

  • BeanShell是用Java写成的,一个小型的、免费的、可以下载的、嵌入式的Java源代码解释器,具有对象脚本语言特性,非常精简的解释器jar文件大小为175k。

  • BeanShell执行标准Java语句和表达式,另外包括一些脚本命令和语法。

官网:http://www.BeanShell.org/

JMeter中用BeanShell的好处

  • JMeter也是由java编写的,而java运行时需要先编译,然后才可以运行
  • 而BeanShell是一款解释器,直接可能运行源代码

BeanShell在JMeter的作用

  • 对JMeter的功能的扩展
  • 对jmeter变量的一些操作

2.2 Jmeter有哪些BeanShell

  • 定时器:  BeanShell Timer
  • 前置处理器:BeanShell PreProcessor
  • 取样器:  BeanShell Sampler
  • 后置处理器:BeanShell PostProcessor
  • 断言:   BeanShell断言
  • 监听器:  BeanShell Listener

备注:

  • 一般归属于线程组或逻辑控制器,相对独立
  • 而BeanShell PreProcessor和BeanShell PostProcessor归属于sampler(取样器)
    • 前者是固定在sampler运行前运行
    • 后者是在sampler运行后运行,二者都依赖于sampler而存在
  • BeanShell断言同样依赖于sampler,作用是断言sampler是否成功

应用场景

  • 生成变量
  • 解析响应结果
  • 定制化逻辑处理
  • Beanshell还常用于请求发送前后的加密解密

2.3 Bean Shell常用内置变量

JMeter在它的BeanShell中内置了变量,用户可以通过这些变量与JMeter进行交互,其中主要的变量

  • log

    • 打印日志
  • ctx

    • 该变量引用了当前线程的上下文
  • vars - (JMeterVariables)

    • 操作jmeter变量
  • props - (JMeterProperties)

    • 操作jmeter属性,该变量引用了JMeter的配置信息,可以获取Jmeter的属性
  • prev - (获取sample返回的信息)

    • 获取前面的sample返回的信息
  • Response

    • 获取Response对象,能通过这个对象获取响应信息
  • Failure

    • 查看接口调使用能否成功,假如返回false是成功的,true是失败的
  • FailureMessage

    • 失败信息,没有设置的时候失败信息是空的,可自定义相关信息
  • ResponseCode

    • 返回接口code成功是200
  • SampleLabel

    • 获取接口请求的名称
  • SamplerData

    • 获取请求的url和body

备注:

  • 变量只对当前线程组有效,属性是全局的。变量和属性的值只能是字符串。

2.4 内置变量详解介绍

2.4.1 log

介绍

  • 用于打印日志,最常用,也最简单;
  • 打印在 jmeter.log 中,可以设置打印级别,可以打印字符串、变量等。

使用方法

参考:http://excalibur.apache.org/apidocs/org/apache/log/Logger.html

  1. 打印 info 形式的普通字符串日志:

    log.info("hello world"); 
    #输出 hello world
    
  2. 拼接字符串和变量 (其中 token 是 jmeter 局部变量):

    log.info("hello world" + "${token}"); 
    #输出 hello world 和 token 变量的拼接结果
    
  3. 打印自定义变量

    str = "hello world";
    log.info(str);
    #输出 hello world
    
  4. 打印 error 形式的普通字符串日志,修改JMeter日志输出级别,否则看不到

    log.error("ERROR-ERROR");
    

备注:

  • print() 打印日志
  • print() 是在控制台中输出信息,log() 默认是在 jmeter.log 中输出信息
  • 日志文件在安装路径下bin\Jmeter.log中

2.4.2 vars

介绍

  • 用于存取 jmeter 局部变量
  • 通常用于存取字符串内容,也可以存取对象;

使用方法

参考:http://jmeter.apache.org/api/org/apache/jmeter/threads/JMeterVariables.html

  1. 获取变量

    • vars.get()
  2. String key = vars.get("name");
    #获取变量名为 name 的值,并保存在 key 中
    
  3. 保存变量

    • vars.put()

      vars.put("name","value"); 
      #把变量 name(值为 value)保存到jmeter变量中
      
  4. 对象保存JMeter变量中

    • vars.putObject()

      vars.putObject("Object_name",new Object()); 
      把对象Object_name保存到jmeter变量中
      
  5. 变量删除

    • vars.remove()

      vars.remove("name");
      #从jmeter变量中删除name
      

print() 是在控制台中输出信息,log() 默认是在 jmeter.log 中输出信息。

备注:

  • bean shell提供了一个内置变量Parameters,来保存参数的集合

    • log.info(Parameters);
      
  • Parameters

    • #输入${name1}${name2}
      #脚本 
      //打印
      log.info("传递的参数列表"+Parameters);
      log.info("name1:"+bsh.args[0]);
      
      log.info("name2:"+bsh.args[1]);
      log.info("name3:"+bsh.args[2]);
      log.info("name3:"+bsh.args[3]);
      //获取参数传递过来的值存在变量里
      vars.put("v1","bsh.args[1]");
      vars.put("v2","bsh_args[2]");
      vars.put("v3","bsh_args[3]");
      
      log.info("v1:");
      log.info("v2:");
      log.info("v3:");
      
2.4.3 props

介绍:

  • 设置 jmeter 全局的静态变量;

使用方法:

  1. 获取属性变量

    • props.get

    • ymd = props.get("START.YMD");
      #获取属性 START.YMD 的值(脚本启动日期)
      #其中的 key 和 value 均是字符串形式;
      
  2. 存入全局属性

    • props.put

    • props.put("token","12ddb123")
      
  3. 判断某属性是否存在, 返回布尔值

`props.containsKey(``"PROPERTY_NAME"``)  `
  1. 判断某项值是否存在,返回布尔值:
props.contains("PROPERTY_VALUE")
  1. 删除某个值
props.remove("PROPERTY_NAME")
  1. 所有属性以字符串形式表示
props.toString()

备注:

  • 操作jmeter属性,该变量引用了JMeter的配置信息,可以获取Jmeter的属性,它的使用方法与vars类似,但是只能put进去String类型的值,而不能是一个对象
  • 变量只对当前线程组有效,属性props是全局的
  • 变量和属性的值只能是字符串
2.4.4 ctx/prev

介绍:

  • ctx当前线程的上下文信息
  • prev等同于ctx.getPreviousResult,通过prev可以直接获取前一个取样器返回的信息

使用方法:

参考:ctx:http://jmeter.apache.org/api/org/apache/jmeter/threads/JMeterContext.html

参考:prev:http://jmeter.apache.org/api/org/apache/jmeter/samplers/SampleResult.html

  • prev.getResponseDataAsString():获取响应信息
  • prev.getResponseCode() :获取响应code
String response_data = prev.getResponseDataAsString();
log.info("res:"+response_data);
String response_code = prev.getResponseCode();
log.info("res_code:"+response_code);
2.4.5 其它

使用方法:

参考:http://jmeter.apache.org/api/org/apache/jmeter/samplers/Sampler.html其它

  1. ResponseCode响应码

    • 代码:
    ResponseCode = 500;
    
    • 结果

    在这里插入图片描述

  2. ResponseMessage响应结果

    • 代码

    • ResponseMessage="自定义返回结果"
      
    • 结果

      image-20200216215902169

  3. SampleResult

    • 代码

    • SampleResult.setResponseData("Hello world");
      
    • 与ResponseMessage功能类似

  4. IsSuccess设置返回是否成功

    • 代码

    • IsSuccess=false
      
    • 结果

      image-20200216220205122

  5. Label取样器的名称

    log.info(Label);
    
  6. Sample

    通过sampler来访问当前取样器;

    使用方法参考:http://jmeter.apache.org/api/org/apache/jmeter/samplers/Sampler.html

2.4.6 Beanshell线程共享变量

分析:

  • 变量只对当前线程组有效,属性是全局的

  • 使用beanshell把变量设置为全局变量

线程共享变量

  • Beanshell取样器设置全局属性

    • 使用函数助手

    • ${__setProperty(authorizations,${token},)}
      
    • 使用props

    • props.put("authorizations","${token}")
      
  • 其它线程组通过JWT ${__property(authorizations,,)}

  • HTTP响应信息头更新

    • JWT ${__property(authorizations,)}
    • image-20200209232842519

    JMeter中线程间共享变量可以通过定义属性值来完成,JMeter启动时会读取一些属性文件,比如jmeter.properties、user.properties,这些属性

值是可以增加的,也可以修改的,通过BeanShell可以对其进行更改。

以BeanShell Sampler为例,在其中通过props.put()来增加属性,props.get()来获取属性。

在其它Sampler中,比如Java Sampler中通过 ${__property(【属性名称】,)}来获取。

2.5 Beanshell

通过Beanshell Sampler,测试人员可以编写一些特定逻辑生成的数据,并且通过vars.get、vars.put 或者props.get、props.put 把相应的变量传递到Jmeter脚本当中

vars.get(String,String) 可以获取Jmeter中已经生成的变量

vars.put(String,String) 可以创建和更新Jmeter变量

props.get(String,String) 可以获取Jmeter中已经生成的属性

props.put(String,String) 可以创建和更新Jmeter属性

vars和props的区别是前者是变量,只能在同一线程组内传递,后者是属性,可以在整个测试计划中跨线程组传递。

beanshell参数详解:

  • 勾选每次调用前重置,里面定义的变量就会被重置。

  • 脚本文件可以导入beanshell脚本

  1. 调用java文件

java源文件

public class Myclass
{
    public int add(int a, int b)
    {
        return a + b;
    }    
}

步骤:

  • 在bean shel中通过source(“代码路径”)方法引入java,然后调用方法和java一样,new一个class,再调用里面的add 方法
//引入java文件  source将一个bsh脚本读到解释器或运行在另一个解释器
source("/TEST/Test.java");//绝对路径
//调用方法,语法和java一样
int res = new Test().add(1,2);
//保存变量
vars.put("add",res.toString());
  1. 引入外部class文件

    直接把上例中的java文件编译成class文件

    用addClassPath(“D:\”)方法引入 class文件,在用import导入包及类,然后就可以像java一样调用了

//引入class文件
addClassPath("/Users/wuyanhong/Desktop/提升小课/接口测试零基础入门/代码/");
//导入类名
import MyClass;
//调用
int res = new MyClass().add(1,2);
//保存变量
vars.put("add",res.toString());
//打印变量
log.info(vars.get("add"));

案例1:获取当前时间格式为yyyy-MM-dd HH:mm:ss

下面举例写展示当前日期:开发给个接口需要传递当前时间格式为yyyy-MM-dd HH:mm:ss
import java.util.*;

import java.text.*;

Date d = new Date();

DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

String dateStr = df.format(d);

vars.put("current_date",dateStr);  //给jmeter添加一个变量,内置变量

2.6 Beanshell断言

BeanShell断言可以使用beanshell脚本来执行断言检查,可以用于更复杂的个性化需求,使用更灵活,功能更强大,但是要能够熟练使用beanshell脚本。

在这里除了可以使用beanshell的内置变量外,主要通过Failure和FailureMessage来设置断言结果。

  1. Failure = false;-----表示断言成功
  2. Failure = true;-----表示断言失败
  3. FailureMessage = “……”;-----自定义的失败信息。

实现步骤:

  • 在保存订单接口下添加beanshell断言

  • 编写断言代码

    • //数据库的取值与接口正则取值比对
      if("${db_order_id_1}".equals("${order_id}_1")) {
          Failure=false;
          System.out.println("OK");
      }
      else
      { 
          Failure=true;
          FailureMessage="不一致";
      }
      
      image-20200209231853393

参数详解:

  • bsh.args[0],bsh.args是一个数组,里面保存的是beanshell【参数】输入框中保存的变量
  • 参数:可以将其他元件中已经定义的变量作为参数传给beanshell脚本,传入的参数被存在bsh.args数组中
  • 脚本文件:可以从文件导入脚本,而不是直接写。
  • 脚本:直接编写beanshell代码

2.7 BeanShell PreProcessor

测试中接口请求参数大部分需要加密后请求,处理需要加密的参数就需要用到jmeter中的前置处理器BeanShell PreProcessor

案例:实现登录密码加密并请求登录接口

  1. 在eclipse写好md5加密的代码,然后打成jar包(选中该类点击右键->Export->jar file)

    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;
    
    public class MD5 {
            public static String getMD5(String sourceStr) {
                try {
                    MessageDigest md = MessageDigest.getInstance("MD5");//获取MD5实例
                    md.update(sourceStr.getBytes());//此处传入要加密的byte类型值
                    byte[] digest = md.digest();//此处得到的是md5加密后的byte类型值
                    int i;
                    StringBuilder sb = new StringBuilder();
                    for (int offset = 0; offset < digest.length; offset++) {
                        i = digest[offset];
                        if (i < 0)
                            i += 256;
                        if (i < 16)
                            sb.append(0);
                        sb.append(Integer.toHexString(i));//通过Integer.toHexString方法把值变为16进制
                    }
                    return sb.toString();
                } catch (NoSuchAlgorithmException e) {
                    e.printStackTrace();
                    return null;
                }
            }
        public static  void main(String []args){
            String res = MD5.getMD5("123456");
            System.out.println(res);
        }
    
    }
    
    
  2. 把打好的jar包放到jmeter目录下的apache-jmeter目录的lib\ext下;

  3. 添加前置处理器-BeanShell PreProcessor

  4. 编写代码

  5. import boxuegu.MD5;
    String res = new MD5().getMD5("123456");
    System.out.println(res);
    vars.put("md5_pwd",res.toString());
    

    //把加密后的密码存到jmeter变量中,然后在http sampler中就可通过${}使用:

  6. 执行测试

2.8 BeanShell PostProcessor

获取响应结果,关联操作

下载解析jar包:https://mvnrepository.com/artifact/com.alibaba/fastjson/1.2.62

步骤:

  1. 获取响应,把响应结果转为json对象
  2. 获取响应参数,并打印断言结果
  3. 设置变量

代码:

//1.获取响应,把响应结果转为json对象
String response_data = prev.getResponseDataAsString();
JSONObject data_obj = new JSONObject(response_data);
log.info("res:"+response_data);
//2.获取响应参数,打印断言结果
String name=data_obj.get("username").toString();
log.info("name:"+name);
vars.put("username",name);
//3.判断结果
if(name.equals("python")){
	log.info("成功"); 
}
else
{ 
    log.info("失败");
}

总结:

拓展:

beanshell中参数传递一般指的是先获取到参数,再传递参数。在beanshell中传递参数一般使用vars.put(key,value)方法。

注意:

1.vars.get()不能接收int参数

2.vars.put(key,value)中,key要用双引号""括起来

3. 并发测试

  • ”并发测试”理解为性能测试,但接口测试中并发测试仅关注于并发测试系统的返回结果是否正确
  • 并不关心相关的性能指标,例如系统资料、服务器响应时间等等
  • 为了实现并发,我们可以在需要压力的地方设置集合点,每到输入用户名和密码登录时,所有的虚拟用户都相互之间等一等,然后一起访问

3.1 集合点

jmeter里面的集合点通过添加定时器同步定时器

启动:

  • 点击线程组,右键点击添加->定时器->同步定时器

    • image-20200210112801052

用法:

  • 模拟用户组的数量:集合多少人再执行请求(也就是执行的线程数)
    注意:等同于设置为线程数,一定要确保设置的值不大于它所在线程组包含的用户数

  • 超时时间以毫秒为单位:指定人数 多少秒没交集合到算超时(设置延迟时间以毫秒为单位)

    • 注意:如果设置timeout in milliseconds为0,表示无超时时间,会一直等下去。
    • 线程数量无法达到"Number of Simultaneous Users to Group by"中设置的值,那么Test将无限等待,除非手动终止。
  • 如果希望定时器仅用于其中一个取样器,则把该定时器作为子节点加入

    • image-20200210113123344
  • 如果是作用于多个,放置请求之前

    • image-20200210113223257

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

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

相关文章

【MySQL】访问mysqld的方式{命令行客户端/vscode-c-api客户端/图形化界面:mysql/navicat}

文章目录 1.访问数据库2.vscode-c-api客户端方法一&#xff1a;重新安装相关数据方法二&#xff1a;直接使用之间安装mysql的附加数据查看mysql文档方式使用c-mysql-api库访问mysqld代码理解mysql_res 3.图形化界面 1.访问数据库 命令行式客户端向mysqld下达指令 网页版 图形化…

ViVim编辑器

文章目录 基本介绍常用的三种模式1. 正常模式2. 插入模式3. 命令行模式 常用快捷键环境参数配置光标移动查找与替换删除复制粘贴模式切换 基本介绍 Linux 系统会内置 vi 文本编辑器 Vi是最早的文本编辑器之一&#xff0c;主要用于Linux和Unix操作系统中的文本编辑。它是一个纯…

Kafka动态授权认证:利用SASL/SCRAM机制提升安全性

摘要 Apache Kafka是一个流行的分布式流处理平台&#xff0c;其安全性对于保护数据传输至关重要。SASL/SCRAM&#xff08;Simple Authentication and Security Layer/Salted Challenge Response Authentication Mechanism&#xff09;是一种认证机制&#xff0c;可以为Kafka集…

Spring-原理篇-DispatcherServlet 初始化 怎么和IOC进行了打通?

委托模式的体现&#xff0c;在初始化醒目的时候Spring MVC为我们提供了一个DispatcherServlet&#xff0c;映射了所有的路径&#xff0c;所有的请求都会先到达这里然后被转发到具体的Controller 进行处理&#xff0c;此文来探索一下&#xff0c;DispatcherServlet 初始化的时候…

强化学习学习(四)Model-Based Reinforcement Learning 从原理到改进分析

文章目录 Model-Based RLBasics of Model-based reinforcement learningUncertainty of Model-based RLUse uncertainty in Model-based RLState space (latent space) models Model-Based RL Basics of Model-based reinforcement learning Model-based reinforcement learn…

当视频遇上AI:SAM 2 打破想象的界限!

当视频遇上AI&#xff1a;SAM 2 打破想象的界限&#xff01; Segment Anything Model 2 Meta公司推出 Llama 3.1 没多久&#xff0c;又在今天推出了Segment Anything Model 2&#xff08;SAM 2&#xff09;&#xff0c;以其强大的实时、可提示对象分割能力&#xff0c;引领了视…

【网络安全】破解邀请码实现未经授权的访问和账户接管

未经许可&#xff0c;不得转载。 文章目录 前言1、邀请用户2、低级账户访问3、提取用户 ID 和 OTP4、准备字典5、攻击6、账户接管 前言 ExampleSpark&#xff08;化名&#xff09;是一个专为团队管理和项目协作而设计的强大平台。它提供了用于管理用户、项目和权限的综合工具。…

Hutool——发送http请求案例

文章目录 前言依赖环境Hutool 请求验证准备第三方接口编写接口调用上述定义接口 自测验证get 请求post 非常规 application/x-www-form-urlencodedpost 常规 application/json 前言 在实际开发过程中&#xff0c;微服务环境下往往采取openfeign实现服务与服务之间的请求调用。…

createObjectURL的部分使用讲解

URL.createObjcetURL的部分详解 文章目录 URL.createObjcetURL的部分详解1. 为什么要使用createObjectURL2. createObjectURL的基本用法3. 转换后的文件进行展示或下载展示下载 首先&#xff0c;想记录一下这点是因为之前关于pdf文件的下载和预览&#xff0c;后端返回工作流时的…

燃爆你的创作欲!3款剪辑小助手让你爱不释手

视频剪辑&#xff0c;既是门艺术&#xff0c;也是门手艺。现在&#xff0c;因为社交媒体和视频网站的流行&#xff0c;越来越多的人开始自己尝试做视频。不管你是想娱乐大家&#xff0c;还是教点东西&#xff0c;或者搞点商业宣传&#xff0c;一款好的剪辑软件都能帮你提高效率…

遇到“NavigableString“object has no attribute “text“的解决方法(全)

在 Python 的 Beautiful Soup 库中&#xff0c;NavigableString 对象用于表示解析树中的文本内容。 有时候在获取json格式&#xff0c;解析BeautifulSoup的时候&#xff0c;可能会遇到这个问题。 那可能是在 NavigableString 对象上调用 .text 属性&#xff0c;因此就会出现 …

21款美规奔驰GLS450更换中规高配主机系统,您带来更贴合国内使用习惯和更丰富功能的体验

简单一句中文的“您好&#xff0c;奔驰”&#xff0c;抑或是轻轻触碰屏幕&#xff0c;就能与同级最先进的智能人机交互系统来场深度沟通&#xff0c;实现你的各种需求 创造情感纽带&#xff0c;将车辆打造为您的专属座驾。功能扩展后的 MBUX 智能人机交互系统能满足您多方位的…

AutoMQ 开源可观测性方案:夜莺 Flashcat

01 引言 在现代企业中&#xff0c;随着数据处理需求的不断增长&#xff0c;AutoMQ [1] 作为一种高效、低成本的流处理系统&#xff0c;逐渐成为企业实时数据处理的关键组件。然而&#xff0c;随着集群规模的扩大和业务复杂性的增加&#xff0c;确保 AutoMQ 集群的稳定性、高可…

Python学习-字符串

目录 ord() 与 chr() 力扣题目-转换成小写字母 count()函数 ord() 与 chr() ord() 和 chr() 用于字符和字符编码&#xff08;通常是ASCII等&#xff09;之间的转换。 1. ord() ord() 函数用于获取一个字符&#xff08;通常是一个单字符字符串&#xff09;的编码值。在ASC…

服务器怎么开启远程桌面连接权限?开启远程桌面连接权限的详细操作步骤

服务器怎么开启远程桌面连接权限? 服务器开启远程桌面连接权限的步骤通常依赖于服务器的操作系统。以下是基于Windows服务器和Linux服务器的详细操作步骤&#xff1a; Windows服务器 1.打开服务器管理器&#xff1a; -登录到Windows服务器。 -点击“开始”菜单&…

提升效率的五款神器

大家好&#xff0c;我是你们的小红书效率专家&#x1f469;‍&#x1f4bb;&#xff01;今天要分享的是让你工作效率翻倍的五款软件利器&#xff0c;赶快拿出小本本记下来吧&#xff01;&#x1f31f; 1️⃣ 亿可达 - 软件连接器 作为一款自动化工具&#xff0c;亿可达被誉为…

内网基础——Windows认证

文章目录 一、本地认证二、网络认证2.1 NTLM协议2.1.1 Chalenge/Response2.1.2 总结2.1.3 Pass the Hash 2.2 Kerberos认证2.2.1 Kerberos认证协议的基础概念2.2.2 域认证粗略流程 三、Windows Access Token 一、本地认证 windows本地认证流程大致可以抽象为以下三个阶段&…

从源头解决砍单问题:Temu、亚马逊自养号采购防关联全攻略

近期有很多跨境卖家向珑哥咨询&#xff0c;他们在进行采购下单过程中会出现砍单的问题&#xff0c;其实造成这种的原因很多&#xff0c;一套稳定的测评系统并不是单解决IP的纯净度问题或者支付卡的卡头风控问题就可以解决的&#xff0c;Temu、亚马逊测评下单砍单率、F号率高的原…

是德KEYSIGHT B1500A 半导体测试仪

安捷伦Agilent/KEYSIGHT B1500A/b1506a/B1505A半导体测试仪 附加功能&#xff1a; 基于 PC 的仪器&#xff0c;配备 Microsoft Windows 操作系统和 EasyEXPERT 软件用于电流-电压 (IV)、电容-电压 (CV)、脉冲生成、快速 IV 和时域测量的单盒解决方案。十个模块插槽&#xff0…

爬虫学习——24.字体反爬

什么是字体反爬 网页开发者自己创造一种字体&#xff0c;因为在字体中每个文字都有其代号&#xff0c;那么以后在网页中不会直接显示这个文字的最终的效果&#xff0c;而是显示他的代号&#xff0c;因此即使获取到了网页中的文本内容&#xff0c;也只是获取到文字的代号&#…