jmeter学习

demo1----------------jmeter自动化测试------------------基础

1.1jmeter 框架搭建

第一步:在测试计划里面创建线程组:创建结果如下:
在这里插入图片描述
第二步:创建用户自定义的变量:
在这里插入图片描述

第三步:创建HTTP请求
在这里插入图片描述
第四步:创建结果树

在这里插入图片描述

总体的框架搭建如下:
在这里插入图片描述
jmeter界面常见功能介绍:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.2用例数据参数化

测试用例参数化的意义:

是为了更好的复用,提高测试的效率。参数化技术为了进行数据驱动。

参数化原理

类似于DDT ,进行数据驱动。数据用例:假设有10测试数据,每一条的数据都不一样,我们需要对数据进行参数化处理。

使用场景

登录接口不做参数化处理,会出现outline 的错误的字样。
登录接口:
注册接口(唯一标识的,例如身份证,手机号)

1.3 框架中功能的作用

用户自定义变量:

我们通过接口测试文档,不变的常量封装到一个全局变量里面。在jmeter 就是用户自定义变量。使用${变量名称}进行调用
在这里插入图片描述

HTTP请求默认值

将每次访问的不变的常量封装到默认值里里面,在后续的http 请求中不需要继续填写。
在这里插入图片描述

HTTP消息请求头信息

注意:如果不进行消息请求头配置,会出现状态码415 错误。需要配置请求头信息:查看消息请求头方式有三种:
第一种:直接查看接口文档
第二种: 基于抓包工具
第三种: 基于F12 开发者工具
下图基于抓包工具,个人习惯而已,jmeter 搭配着抓包工具使用
在这里插入图片描述
将请求头信息写到jmeter 中
在这里插入图片描述

执行然后查看监听器的结果树

在这里插入图片描述
在这里插入图片描述

1.4参数化实战

操作的流程:

1 确定需要进行参数化地数据 —name pwd
2 获取测试数据,数据源
3 将常量改变为变量
4 加密接口处理

我们需要基于csv 配置文件实现数据参数化。
在这里插入图片描述
导入csv/txt文件做好不要使用绝对路径,使用绝对路之后的项目不利于他人去使用
在这里插入图片描述
我们这里采用相对路径
在这里插入图片描述
注意:写相对路径最好写在bin 目录下去
在消息体数据中,将常量改为变量
在这里插入图片描述

注意:写文件时候,分隔符统一使用英文分割符,不然文件读不进来。
设置线程组数为2
在这里插入图片描述
结果树会出现两次结果
在这里插入图片描述
注意:在响应结果数据取不到,会出现密码错误。我们需要进行加密接口处理。
注意我们需要了解一些加密方法:
MD5系列方法
MD5 加盐/MD5 加双重盐
hash 加密/RSA 加密/AES加密
自定义加密的方法。项目自己自定义的加密方法。
处理方法:加密的规则/加密的文件 jar/js 两种文件

使用MD5 加密时候,直接使用函数助手。如果没有MD5 函数助手,请自行安装jmeter 插件。
在这里插入图片描述

1.5 MD5 安装插件:

1、首先访问以下地址,下载jmeter插件

https://jmeter-plugins.org/install/Install/
在这里插入图片描述

2、将下载的jar包放在,jmeter的lib/ext目录下(此处以我的路径为例)

//D:\apache-jmeter-5.0\lib\ext
在这里插入图片描述

3、重启jmeter

4、重启完成后点击选项此时多了一个插件

在这里插入图片描述
点击插件选择,Available Plugins中勾选Custom JMeter Functions,点击右下角Apply Changes and Restart JMeter(下载完毕窗口会自动重启jmeter)
在这里插入图片描述
安装好了MD5 插件之后:我们需要进行参数化。
对登录的name, 以及password参数化,常量改为变量,目的是为了数据驱表格中的数据。
在这里插入图片描述
查看结果树:可以实现多个用例的测试。
在这里插入图片描述

1.6 接口断言

1.6.1断言的目的:

通过断言来判断实际结果和预期结果是否一致。在jmeter中有一个元件叫断言,他的作用和loadrunner的检查点类似。
检查测试得到的响应数据是否符合预期,用以保证性能测试环境中的数据交互与预期结果是否一致。
注意:在request 返回层面增加了一层判断机制,因为request 成功了,并不是代表结果一定正确。

在这里插入图片描述
只有是预期结果和实际结果一致,才是通过的状态。在jmeter 里面有很多的断言操作。每种断言都有自己的含义。
在这里插入图片描述

1.6.2 断言的分类

BeanShell断言

BeanShell之前关于定时器的随笔中有介绍过,是一种松散类型的脚本语言(这点和JS类似),一种完全符合java语法的java脚本语言,并且又有自己的一些语法和方法;

BSF断言

BSF(Bean Scripting Framework)之前也介绍过,是一个支持在Java应用程序内调用脚本语言 (Script),并且支持脚本语言直接访问Java对象和方法的一个开源项目;
作用对象:针对sampler中的BSF sampler而使用的断言

比较断言(compare assertion)

这是一种比较特殊的断言元件,针对断言进行字符串替换时使用;
作用对象:需要替换的字符串

HTML断言

对响应类为XML类型的文件进行断言;
作用对象:针对sampler中的SOAP/XML-RPC Request而使用的断言

JSR223断言

JSR223即Java 规范请求,是指向JCP(Java Community Process)提出新增一个标准化技术规范的正式请求;
作用对象:针对sampler中的JSR223 sampler而使用的断言

MD5Hex断言

MD5是一种消息摘要算法,用以提供消息的完整性保护;
作用对象:针对参数类型为MD5Hex加密的参数的断言

Size断言

用于判断返回内容的大小;
作用对象:返回信息,响应报文

SMIME断言

SMIME是一种多用途网际邮件扩充协议,相比于之前的SMAP邮件传输协议,增加了安全性,对邮件主题进行保护;
作用对象:针对采用了该种邮件传输协议的信息

XML概要断言

亦可以称为XML模型断言/XML数据类型断言;XML Schema 定义了两种主要的数据类型:①xml document schema 文档架构 ;② 文档架构xml-schema xml模式
作用对象:返回结果为XML概要断言的2中数据类型的消息

XML断言

XML(可扩展标记语言) 提供一种描述结构化数据的方法。与主要用于控制数据的显示和外观的 HTML 标记不同,XML 标记用于定义数据本身的结构和数据类型;
作用对象:判断返回结果是否和xml的格式即<></>成对出现

XPath断言

XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言。XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力。
作用对象:针对返回信息为XPAth的数据类型进行断言

响应断言

判断返回内容中的内容
作用对象:响应报文中的所有对象

断言持续时间

用于判断服务器的响应时间
作用对象:服务器

json 断言

用于返回json格式
作用对象:响应报文中的所有json 格式对象

1.6.3响应断言的使用

在框架中加入响应断言:
在这里插入图片描述
加入响应断言之后,在运行结果树,不符合的预期结果的的测试用例不会通过
!](https://img-blog.csdnimg.cn/66d3440c7e724aaa90375b231a9edd9d.png)

在这里插入图片描述

json 断言

在这里插入图片描述
注意:一个事项:就是作用域的问题。只有写在全局变量里面的才可以被子菜单引用。
前置处理器和后置处理器操作。要理解前置处理器和后置处理器。

展示结果具体化带编号

采用函数助手count实现编号,采用参数化调用,实现具体化。
在这里插入图片描述
查看结果树,得到以下的结果。
在这里插入图片描述

1.7多接口关联操作

我们在已经存在的登录操作完成的情况下增加留言模块。获取留言的接口我们采用抓包的形式。基于fidddler 抓包
在这里插入图片描述

对于不同模块的操作问题,我们采用跨域线程组的操作。就需要充分理解作用域的问题。实现多接口的关联问题。
注意:在jmeter 里面现线程组是部分顺序的。如果想要对需要的线程组运行,对线程组进行设置。
在这里插入图片描述

添加了独立运行每个线程组,jmeter 才会运行每一个线程组。

我们在项目中留言模块,需要使用token值。这一个问题后面回解决,在解决这个问题之前,需要理解以下初始化环境。
由于在留言模块进行接口测试,需要完成的登录操作,我们需要在初始化环境中完成的登录的初始化操作。
我们需要进行初始化操作:setup 线程组:做测试之前需要的进行初始化环境配置。如何进行环境初始化。
环境初始化与数据清除
环境初始化流程:
第一步:在测试计划中添加setup线程组
第二步:配置预置的操作
在这里插入图片描述
多接口关联操作的概念:在一个线程组中,B请求需要使用A请求返回的数据。这个就是接口关联。
提取分类器:
json 提取器
正则表达式提取器
beanshell 提取器

获取token 值:
在这里插入图片描述
通过调试取样器获取调试结果,判断token 值是否取到。
在这里插入图片描述
在这里插入图片描述

有个小技巧:在不同作用域中,如何调用跨域进行变量获取?
在这里插入图片描述
基于上图,我们想要从留言模块线程组中获取setup线程组中的token值?流程步骤如下:
在登录初始化操作中加入beanshell 后置处理程序。
在这里插入图片描述
在beanshell 设置:
在这里插入图片描述
通过这个脚本程序将token 变成全局变量。就可以在不同的线程组跨域使用。
可以从函数助手中设置该脚本的程序。

在留言模块的线程组中添加请求头信息管理器
在这里插入图片描述
使用${__P(变量名,)} 去调用全局里面的token值,从而实现了token 值的调用。
查看结果树:token 值就会被拿到了。
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
TR34ObjectIdentifers DEFINITIONS EXPLICIT TAGS ::= BEGIN -- Content types, from PKCS #7 -- pkcs7 OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs7(7) } id-data OBJECT IDENTIFIER ::= { pkcs7 data(1) } id-signedData OBJECT IDENTIFIER ::= { pkcs7 signedData(2) } id-envelopedData OBJECT IDENTIFIER ::= { pkcs7 envelopedData (3) } id-digestedData OBJECT IDENTIFIER ::= { pkcs7 digestedData(5) } id-encryptedData OBJECT IDENTIFIER ::= { pkcs7 encryptedData (6) } pkcs9 OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) } smime OBJECT IDENTIFIER ::= { pkcs9 smime(16) } -- Signed attributes, from PKCS #9, S/MIME, and ANS X9.73 -- id-contentType OBJECT IDENTIFIER ::= { pkcs9 contentType(3) } id-messageDigest OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) 4 } id-signingTime OBJECT IDENTIFIER ::= { pkcs9 signingTime(5) } id-contentIdentifier OBJECT IDENTIFIER ::= { smime id-aa(2) contentIdentifier(7) } id-msgSequenceNo OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) x973(10060) attribute(1) msgSequenceNo(1) } id-signingCertificate OBJECT IDENTIFIER ::= { smime id-aa(2) signingCertificate(12) } id-otherSigningCert OBJECT IDENTIFIER ::= { itu-t(0) identified-organization(4) etsi(0) electronic-signature-standard(1733) part1(1) attributes(1) 12 } id-biometricSyntax OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) x973(10060) attribute(1) biometricSyntax(2) } END 请理解这段代码,并使用openssl的接口,采用linux c编程完成对数据的编码和解码
最新发布
06-02
这段代码是定义了一些常用的对象标识符(Object Identifiers, OID),用于标识不同的加密算法、数字证书、数字签名、数字信封等信息。其中,pkcs7、pkcs9、smime是定义在PKCS #7和PKCS #9标准中的OID,其他的OID则是定义在不同的标准中,如X9.73、ETSI等。 要使用openssl的接口进行数据编码和解码,可以使用以下函数: 1. 数据编码: ``` int i2d_X509(X509 *x, unsigned char **out); ``` 将X509证书结构体编码成DER格式的二进制数据。其中,X509结构体定义在openssl/x509.h头文件中。 2. 数据解码: ``` X509 *d2i_X509(X509 **x, const unsigned char **in, long len); ``` 将DER格式的二进制数据解码成X509证书结构体。其中,in为指向待解码数据的指针,len为数据长度。 具体实现过程可以参考以下代码: ```c #include <openssl/x509.h> #include <openssl/err.h> int main() { // 加载证书文件 FILE *fp = fopen("cert.pem", "rb"); if (!fp) { printf("failed to open file\n"); return -1; } X509 *x = PEM_read_X509(fp, NULL, NULL, NULL); if (!x) { printf("failed to read certificate\n"); fclose(fp); return -1; } fclose(fp); // 编码证书数据 unsigned char *buf = NULL; int len = i2d_X509(x, &buf); if (len < 0) { printf("failed to encode certificate\n"); X509_free(x); return -1; } // 解码证书数据 const unsigned char *p = buf; X509 *x2 = d2i_X509(NULL, &p, len); if (!x2) { printf("failed to decode certificate\n"); X509_free(x); free(buf); return -1; } // 比较两个证书是否一致 int cmp = X509_cmp(x, x2); if (cmp == 0) { printf("the two certificates are identical\n"); } else { printf("the two certificates are different\n"); } X509_free(x); X509_free(x2); free(buf); ERR_free_strings(); return 0; } ``` 其中,PEM_read_X509函数用于从文件中读取PEM格式的证书数据,并将其转换成X509结构体;X509_cmp函数用于比较两个证书是否一致。在编译时需要添加-lcrypto参数来链接openssl库。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

土豆爱牛肉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值