一、没有接口文档如何处理
抓包: F12 、fiddler、wireshark、Charles
第三接口:api接口
swagger:
二、 写脚本方法拓展
录制脚本
- badboy --曾经很流行,现在已经不维护,已经被遗弃
- 代理录制:用于脚本参数比较多,或者用手动编写脚本,一时半会写不出来。
代理录制:
-
代理服务器: 自己启动一个代理服务器
-
本地:要使用代理服务器的ip和端口,使用自己启动的代理服务器
-
步骤:
- 1.添加线程组
- 2.测试计划>非测试元件>http代理服务器
- ip就是你自己电脑的ip,port是可以修改,默认8888,可以随意修改
- 目标控制器,一定要修改 修改为 测试计划>线程组
- 添加过滤器,可以将不需要的请求过滤,不进行采集
- 3.启动代理服务器时,会出现一个证书的弹窗;
- 如果要抓取https,就必须使用证书。
- 点击ok,可以在bin目录下生成一个有效期7天的证书,每次生成会覆盖之前的
- 将证书安装到浏览器, 注意:有效期7天
- 4.本地浏览器使用代理服务器上网
- 访问浏览器,可以看到录制到的请求。
- 此步骤还可以通过chrome插件来实现,就不用去系统设置配置代理。参考:
-
5.录制完成,关闭代理服务器,本地使用代理服务器配置关闭。
三、脚本功能增强
1.关联
- 关联:前面接口的响应信息,有动态值,作为后续接口的参数参数
2.定义变量
jmeter中定义变量有两种:
- 1.用户定义变量
- 配置位置:测试计划>配置元件
- 作用域:全局变量。作用于整个测试计划。在启动运行时,获取一次值,在运行过程中,不会动态获取值,值一直都不变。
- 使用方法:
- 定义:var_para: “abc” - -注意参数类型及引号
- 调用:${var_para}
- 2.用户参数
- 配置位置:前置处理器
- 作用域:当前线程组、或者当前取样器.获取一次值,在运行过程中,还会动态获取值
- 使用方法:同上
- 配置项:每次迭代更新一次:一个线程组下所有的接口,全部执行完1次,才算1个迭代
**注意:**如果将参数配置成可变参数:
对于①获取一次值,在运行过程中,不会动态获取值,值一直都不变。和②获取一次值,在运行过程中,还会动态获取值的理解:
- ①:该情况下,无论设置多少个线程组,还是运行多少次,参数值都不会变
- ②:该情况下,不管是多个线程组、还是执行多次,都会获取到变化后的参数,每次都不一样。如果勾选【每次迭代更新一次】,可以在这一个迭代中参数不变。
3.jmeter的函数
- 1.函数助手。tools>函数助手对话框,或者快捷键:CTRL+shift+f1
- 2.规则:
- 双下划线开头
- 函数名称,严格区分大小写
- 3.常用函数
- ${__counter(,)} 计数器
- ${__dateTimeConvert(,)} 时间格式转换
- ${__RandomDate(,)} 随机日期
- ${__digest(,)} 加密 简单加密
- ${__intSum(,)} 整数相加函数
- ${__P(,)} 获取属性函数
- ${__property(,)} 获取属性函数
- ${__setProperty(,)} 设置属性函数
- ${__Random(,)}
- ${__RandomString(,)}
- ${__threadNum} 获取线程号函数
- ${__time(,)} 获取当前时间戳函数
- ${__timeShift(,)} 数据格式化
- ${__V(,)} 拼接函数
- 4.调用函数
- 点击生成按钮,可以将函数直接复制到粘贴板,粘贴到脚本中需要调用的地方即可
- 注意事项: 函数名称的大小写
- 点击生成按钮,可以将函数直接复制到粘贴板,粘贴到脚本中需要调用的地方即可
4. jmeter的属性
回忆:
全局变量: 可以跨线程组,在运行过程中不会动态获取值。
局部变量:不能跨线程组,在运行过程中,还会动态获取值。
提问:
那么用户如果想变量可以跨线程组,还可以动态获取值,应该怎么做?
答:属性
- 1.什么是属性?
是jmeter工具自身带有的标签,
以.properties结尾的文件,都是jmeter的属性配置文件。- .jmeter工具属性 --可能被改变的
- 静态属性:写在properties文件中属性信息,都是静态属性
- 动态属性:运行过程中,动态定义属性
- 系统属性
- 不可改变
- .属性 /参数 /变量 的区别?
- 属性是jmeter工具具有的,所以,jmeter中的线程组都可以使用
- 参数/变量 ,有局限访问
- .jmeter工具属性 --可能被改变的
- 2.设置属性
- 查看属性:测试计划>添加>非测试元件>属性显示
- 查看属性:测试计划>添加>非测试元件>属性显示
- 设置属性
使用设置属性函数${__setProperty(,)},将需要跨线程组使用的参数设置为属性
- 获取属性
使用获取属性函数${__P(,)},获取设置为属性的参数, - 动态属性,是在运行过程中产生的,关闭jmeter,就是自动释放了。
- 多个线程组的执行顺序?
- 取样器从上到下,顺序执行
- 线程组默认是并行执行
- 在做性能测试时,不要勾选测试计划中:独立运行每个线程组。