性能自动化测试之Jmeter性能测试(二)
·
说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家!
接着上一篇博客继续往下写 :https://blog.csdn.net/qq_41782425/article/details/104209200
四、增强 Jmeter 脚本
4.关联
【例 7】录制订票的脚本,保证脚本正确实现业务。
- 打开badboy录制webtours订票脚本

- 将录制的脚本导出jmx文件到桌面

- 添加监听,删除录制脚本时cdtaogang用户中的订票数据,运行结果树,查看cdtaogang用户中并没有写入订票数据,说明脚本执行过程出现错误

✔ 找到查看结果树中出错的请求,在这个 url 的请求中查找会话值

✔ 在 step 下找到哪个 url 的发送数据中有会话值

✔ 在查看结果树的 Text/源代码界面中,倒着找那个 url 中的响应数据中有会话值

✔ 找到 sessionid 的左右边界

✔ 在响应的 url 处添加后置处理器→正则表达式提取器


- 添加Debug Sampler打印出正则匹配的值

✔ 在请求的 url 处,将 userSession 参数的值改为“${引用名称}”
★ 不输入引号

- 清空结果,重新运行,查看之前第6个地址响应数据,没有提示会话值错误

- 打开cdtaogang用户数据,订票数据成功写入

5.自定义函数
-
编写 Java 类
✔ 编写自己需要的 static 函数,并加入 main 方法,先编译与运行正确
✔ 删除 main 方法后保存,右击项目→导出→Java→可运行的 JAR 文件
★ 启动配置
■ 选择测试的类名
★ 导出目标
■ 必须放在\apache-jmeter-3.0\lib\ext 目录中,名字可与类名不同
★ 忽略错误
■ 找不到 mian 方法 -
首先在当前电脑解压安装eclipse,然后对班次航班号进行拆分提取出航班号

-
定义一个方法根据传递的字符串很索引值来获取提取的字符串

-
还有一种方式,则是通过split方法进行拆分成数组,取第一个元素即可

-
在main方法中直接调用left和split方法并打印出结果,结果都是没有问题的,说明定义的两个方法都是ok的

-
注释掉main方法并保存,然后导出代码


【例 1】编写一个输出字符串左边多个字符的函数。
- Jmeter 导入包
✔ 测试计划→Add directory or jar to classpath 处:浏览,找到包

- 在步骤下找到发送参数中存在航班号的地址

- 清空结果,重新运行,对13号链接倒着找结果树中的响应数据中的航班号

- 复制响应数据到记事本中,进行整理

- 在链接12下添加正则提取器匹配出班次

- 添加Debug Sampler和BeanShell Sampler两种都可以打印出正则中匹配的第一个结果(也就是第一个班次,因为正则匹配中博主设置的是1)

- 清空并运行察看结果树,成功提取出班次


- BeanShell 引用函数
✔ import 包名.类名
✔ vars.put(“新参数名”,“常量值或参数名”);
★ 常量值或参数结果存入新参数中 ★ 无法在 BeanShell 的请求和响应中看到新参数值
★ BeanShell 后面的 url 以及请求中可以使用该参数
✔ 可以在日志中看到参数值
★ log.error(包名.类名.函数名(参数));
【例 2】输出航班号。
- 将在BeanShell导入之前引入的jar包中的getStr类,通过传递班次数据调用left函数获取0~3下标的字符串航班号

- 打开日志,清空结果,运行,日志中打印出info数据为正确的航班号

- 将获取到的航班号,保存到参数中

- 因为在BeanShell中不能使用${hangBanHao}以及ResponseMessage="${hangBanHao}",所以可以在后面的链接名称中打印出hangBanHao

- 运行结果,成功显示出航班号

6.循环控制器
- 右击 Step→添加→逻辑控制器→循环控制器
✔ CSV Data 要放在循环之中。 - 添加计数器,查看循环次数
✔ 添加配置元件→计数器
✔ 计数器要放在循环内部 - 使用参数的方式
✔ 点击 Step1 中的参数化→Sharing mode:Current Thread
★ 不选择 Current Thread,会导致有重复买票的情况
【例】参数化化始发地和目的地,实现每人买 3 张票。
- 先禁用掉获取班次相关的正则及其他暂时不用的

- 首先找到在哪个url上选择出发地和目的地,在此url的前面添加参数化

- 准备出发地和目的地参数

- 参数化配置

- 替换参数化

- 为脚本添加事务

- 博主在添加事务的时候,发现博主当初在使用badboy录制订票脚本时,忘记录制再定一张按钮操作了,所以博主使用badboy重新录制一份脚本另存下来,将该订票url复制到订票事务下也就是编号为15的url地址

- 运行脚本,没有出错,说明脚本没有问题

- 添加打开网站断言

- 添加登录断言

- 添加搜票断言

- 添加订票断言

- 添加退出断言

- 之前出发地和目的地是进行了参数化,所以检查点断言也应该进行参数化

- 删除cdtaogang用户的订票数据,运行脚本,事务全部通过

- 查看cdtaogang用户订票数据也是成功写入的,说明脚本没问题

- 接下来则是在订票事务下添加一个循环控制器

- 将所有的url和参数化配置放到循环控制器下,然后为了方便在结果中查看,添加BeanShell打印出发地及目的地

- 最后将参数化配置中的模式选择为当前线程

- 配置循环

- 删除cdtaogang用户订票数据,运行脚本,查看打印的从发地和目的地都是正确的



- 然后查看订票断言,有两次都是断言失败,一次是成功的,因为订票断言中的航班号021是固定的,导致3次订票只有一次断言成功


- 查看cdtaogang用户写入的三次订票数据,都是相同的,显然三次订票是失败的

- 在脚本url中除了博主上面说到的订票断言中的航班号需要参数化,并且还有13和14两个url设计到的班次参数也是需要进行参数化的


- 解决方法: 三次订票有一次是正确的,那么找到结果树中的该url,倒着往后找响应数据中的021;301班次号

- 拷贝响应数据到记事本进行简单的处理,这是Denver到London的班次

- 启用之前禁用的提取的班次正则以及BeanShell中保存的航班号


- 最后,替换13和14url以及订票断言中涉及到的班次和航班号



- 删除cdtaogang中的订票数据,运行脚本,查看结果,脚本不再报错,全部通过

- 查看cdtaogang用户写入的订票数据,写入的航班都是不同的并且都是选择正则匹配的第二个结果的班次

- 因为打印出发地和目的地不知道是第几次,所以这里添加一个计数器

- 计数器配置如下,从1开始递增每次+1,变量i

- 命名打印出发地和目的地

- 再次运行脚本,查看结果,显然就很清楚了

7.用户自定义变量
- 根据业务流程制作成测试脚本,想要移植到其他测试环境时,由于数据发生了相应的变化,例如 IP 地址、请求路径等,这时候可以将 IP 地址、请求路径等做成用户自定义变量。
- Thread Group→配置元件→用户自定义变量
【例】将脚本中的 localhost 改为服务器 IP,HTTP 请求中的名称不需要改
- 在线程组下找到User Defined Variables也就是用户自定义变量,没有可以自己在配置元件中添加,添加一个服务器IP这样脚本在其他电脑也能进行使用访问webtours网站

- 保存脚本,关闭Jmeter,将桌面上的webtours_book.jmx脚本文件以记事本方式打开,将localhost全部替换为${ServerIP}

- 使用Jmeter打开webtours_book.jmx脚本,就可以看到所有的url名称都添加了${ServerIP}

- 运行脚本,也是没有任何问题的

- 调整一下脚本,将订票事务放到循环里面去,并通过计数器区分第几次订票事务

- 重新运行脚本,查看结果没有任何问题,需要说明一点事务打印显示是倒着来的,并不是显示在事务的开头而是在事务结尾

更多推荐
所有评论(0)