高级性能测试系列《8.脚本写法》

2022-06-21 15:33:13 浏览数 (1)

一、jmeter工具介绍

gui界面

  • 一切都在右键掌握之中。
  • 测试计划:工作中测试计划:什么时间什么人做什么事情。
    • 线程组:接口、自动化测试时,基本不会去改动。
    • 配置元件
    • 监听器
    • 取样器:根据不同的协议,使用不同的取样器编写脚本
    • 逻辑控制器。
    • 前置处理器:
    • 后置处理器:对取样器进行控制。
    • 定时器。
    • 性能测试,这个是用于进行性能场景设计的。
    • 线程组:进行性能场景设计。
    • setup线程组。
    • teardown线程组。
    • 优先级是最高的,正式干活时,急先锋。
    • 最先被执行的配置元件是:用户定义变量
    • 对性能结果进行监控,展示结果数据。
    • 不同的元件,是从不同的角度,展示结果数据。
    • 重点关注:用户参数
    • jmeter里面的测试计划是脚本的根文件。
    • 元件

二、jmeter写脚本

  • 特别注意事项:
    • Accept:在请求头里面可加可不加,因为这个东西是开发所控制的,我们是无法修改的。
    • 请求行
    • 请求头
    • 空一行
    • 请求体
    • 请求方法,请求地址URI。
    • Content-Type
    • cookie
    • User-Agent
    • 参数类型:表单。
    • 消息体数据类型:jsonxml
    • 当你的接口请求参数为json格式时,一定要写请求头,请求头中一定要有 Content-Type:application/json(如果没有这个信息,100%报错,不局限于jmeter)。
    • 衍生:http请求包括哪些部分?
  • json格式:
    • {"key":"value","key1":1}
  • 开发人员接口中定义的返回码code,和http中的response_code不一样。
    • 3xx:重定向相关。301
    • 4xx:请求URL地址有问题。400、404
    • 5xx:服务器内部异常。500、502bad gatway
    • http中的response_code
    • 开发人员在接口中定义的code,是响应代码。

每家公司定义的code的含都不一样的,是为了方便定位某些问题的(一个code值代表某一种意思而已)。

  • 写脚本
    • 测试计划上右键, 添加线程组
    • 线程组上右键,添加取样器-->http请求(http协议簇)。
    • 线程组上右键,添加监听器-->查看结果树

一个最简单的jmeter脚本,包括:线程组、取样器、监听器。

线程组:性能测试中用于场景设计的,写脚本阶段不用改动。

取样器:根据不同的协议,编写不同的脚本。

监听器:调试脚本时使用,性能测试执行时禁用监听器。

不管哪种监听器,都是对结果数据进行不同维度的展示。

这些展示是需要消耗本地资源的,从而导致资源不能足够得分配到性能测试中去。

8080端口,是tomcat的默认端口。

http协议的默认端口:80

https协议默认端口: 443

jmeter的默认保存路径,jmeter的bin文件夹。

性能测试中,这种非必传的参数,我们也写上:

把这些非必传的参数都传了,代码对这些参数都进行了计算。

这样做性能测试,测试出的结果基本就是跟实际情况最接近的。

请注意:

1、当请求体为json, 一定要有请求头 Content-Type:application/json

2、json格式有问题。

3、协议:当协议为http时,可以不写。如果是https,那就必须写。

4、服务器名称或IP:不能带有/

注意:浏览器的url地址里面只能执行get方法,不能执行post方法。

5、路径:不要带域名、ip和端口。

路径开头:用/

不要带有空格,带有空格的请求的URL会出现urlencoded的编码:

URI:资源地址。

URL:带domain。带有域名去访问资源的地址。

6、内容编码:utf8。

请求内容出现乱码处理方法:

1)内容编码:utf8。

2)请求头的Content-Type的值中加上:charset=utf-8

3)请求体为参数类型:勾选参数“编码”,编码:urlencoded编码。

在参数值为非字符(汉字、特殊符号) ,都需要勾选编码。

给大家的建议:不管什么类型的参数值,都建议勾选编码。

响应内容出现乱码处理方法:

不是简单的设置为utf8gbkgb2312big5,需求修改jmeter.properties中的sampler.result.encoding

同一个接口,用postman请求,响应是正常的。用jmeter请求,响应就有中文乱码?

原因是:jmeter的编码是根据操作系统编码来的。

在国内,中文windows系统的字符集编码是gbk936maclinux系统中文编码utf8

在写这个系统的代码的时候,给它设置的字符集为utf-8,而我的系统是gbk,出现编码不一致的问题,就出现乱码。

唯独在中文的windows系统中出现响应乱码的问题。

7、参数、消息体数据类型选择

当我们的请求接口文档中说,请求体为json格式,那么我们就选择用消息体数据来写json

soap=http xmlxml也是写在消息体里面。

参数: 请求体是form-data Content-Type: application/x-www-form-urlencoded 、不指明请求体类型、请求的方法是get,就用参数。

8、自动重定向:不会显示中间重定向过程,无法从过程中,提取信息。

跟随重定向: 会自动显示重定向过程,能从过程中提取想要的信息,用于后面的接口请求,这叫做关联。

使用keepAlive:保持连接, 长连接。

因为现在用http协议版本为1.1,长连接的开关默认是打开的。

所以,默认勾选keepAlive,但是在性能测试中,我们会根据需要,去掉这个勾。

做性能测试时,请求量是非常大的。大量的人一直在请求,一直保持着连接不放。

发过去一个请求,本地要消耗一个端口的,一个端口对应一个连接池。

需要及时的释放,不然这大量的人,不能灵活得用。

0 人点赞