01. 前言

jmeter 这个工具既可以做接口的功能测试,也可以做自动化测试,还可以做性能测试,其主要用途就是用于性能测试。但是,有些公司和个人,就想用 jmeter 来做接口自动化测试。

你有没有想过呢?

下面我就给大家讲讲,用 jmeter 如何做接口自动化测试。

02. jmeter 与接口自动化测试

如果要你用 jmeter 来做接口自动化测试,你是不是把几乎每一个测试用例,都是用一个取样器来实现?

相信很多人都是这么想的,也是这么干的。

但是,很遗憾,你这种,是初级入门做法。你能实现所有的测试用例都被执行,但是,你写脚本和维护脚本的时间,可能比你用手工执行所有的测试用例时间还要长,而且还可能长很多。

因为,只要开发人员改了接口一个地方,你得从所有取样器中,找出与这个接口相关的所有取样器,然后一一修改,万一有遗漏,哪出现的失败,不是 bug,而是你脚本的问题。所以说,这是入门级人干的事情。

那有没有更好的办法呢?

平时写功能测试用例的时候,习惯用 Excel 的同学,可能就会想,我能把自动化测试用例每个信息都写在 Excel 表格中,然后,使用 jmeter 的 CSV 数据文件读取功能,把它读取出来执行,是不是就可以呢?

这种方法,就比前面的方法好了很多,用例还是用 Excel 来维护,只是使用 jmeter 来读取,执行就可以了。整体的可维护性要好很多很多,工作量也要少很多。

但是,在真正动手去做的时候,我们又会发现,困难重重。

写过自动化测试用例的同学,应该会有这样的经历,就是做接口测试时,我们通常会先对某个接口各种参数进行测试,这样,接口地址相同,但是参数不一样,校验的接口也一样。

在做完单个接口之后,我们还会做由多个接口构成的业务测试,这个时候,每个接口地址都不一样,接口请求的方法也可能不一样,最后的校验点,也可能变化,这样的自动化脚本,应该要怎么写呢?

第一个对单接口,编写自动化测试脚本,可能还好实现,因为接口相同,那么他的请求方法肯定相同,虽然,请求头、请求体、校验信息可能不同,但是,至少还有共同点。

而第二个,对业务编写自动化测试脚本,那就很难了,因为几乎所有的都可能不同,请求的协议、方法、请求头、请求体,全都可能不同,而且请求头和请求体还可能要有动态值,这个怎么做呢?

万事开头难,只怕去实践。只要你想好了,真正去动手做了,这很多问题,就不那么难了。

有很多事情,我们可以加条件判断,和循环控制等逻辑控制器,就可以实现的。

靠我一篇文章,就把它全部写出来,这是不现实的,所以,今天,主要讲一个,被很多同学问到,难倒了一大片好汉的问题。


看到这个问题,你想到什么方法?

03. 实操案例

如果你在 jmeter 中,每个接口写一个取样器,这个问题很好解决,直接使用参数引用就可以解决,但是,这个同学的做法是把测试用例写在 CSV 文件中,然后使用 jmeter 去读取 CSV 文件,执行测试用例,如何来实现动态参数呢?

肯定,有的同学已经想到了,使用变量引用,在 CSV 中,按照 jmeter 的写法,写引用变量。

好了,给大家一个看一个参考:

这个 CSV 文件中,有两个不同的接口,说明是做的业务场景自动化测试,第一个接口,是注册,那么每次注册的账户肯定不能相同,如果相同了,那么第二次肯定失败,所以,就使用了随机函数,让注册的账户自动生成。

第二个接口是登录,当然,可以用固定账户登录,但是,我们前面进行注册,最好还是用前面注册的账户来登录,这样更加真实,body 中使用了变量引用,显然,这是用到了关联。

我们用 jmeter 写个脚本,来运行下,看能否成功。

从脚本来运行情况来看,我们可以取到名称,地址,和请求体,但是,因为请求体在 CSV 中写了 jmeter 函数,结果读取出来运行时,还是原样运行,并没有对请求体中的函数进行执行。

怎么办呢?

很多人,就卡在这了,不知道怎么办了。

其实,我们想一下,现在是内容读取出来了,但是内容是原样进行请求,没有对内容中的函数进行执行,现在的问题,只需要解决 body 中的函数,能被运行就可以了。

我们再想下,在 jmeter 中,有哪些可以运行函数的方法?jexl3 函数可以,groovy 函数可以。

04. Exl3 函数

jexl3 函数,是要运行一段代码,返回代码结果,我们的 body 是 JSON 格式,显然不能直接运行,要想运行,还得写 Java 代码调用 JSON 运行才可以,非常复杂。

groovy 函数,是要运行一个表达式,显然,也不行。

那还有没有其他的函数呢?eval 函数,这个函数,返回的是字符串表达式运行的结果。

此时,我们修改下我们 jmeter 中取样器的请求体。

看,运行结果,函数被执行了,注册的账号动态变化了。

接下来,我们就把第 2 条用例,使用了关联,也写出来。

现在,我们已经实现,在 jmeter 中,使用一个取样器执行 2 个不同接口,并且动态参数值的自动化运行了。

现在,我们再把断言加上。

注意:断言中,如果有中文,就要特别注意文件编码

现在,我们再加大难度,在 CSV 文件中写个 GET 接口。

我们发现,多个接口请求方法不一样,jmeter 肯定不能用 1 个取样器了, get 请求没有 body 参数,但是,请求头要添加一个 Token 参数。

是不是一下楞圈了,不知道怎么动了?看懂下面的图,你就知道怎么做了。

在取样器的前面增加一个条件判断,判断是请求方法,根据请求方法,执行 POST 取样器或 GET 取样器

然后,把循环次数设置为 CSV 文件条数一致,其他的地方,应该就比较容易理解了。

05. END

看最后,多条测试用例,只用 2 个取样器就搞定了。以后,改动 CSV 文件,可能都不用动 jmeter 脚本,增加测试用例,改下循环控制器数量就可以了。

当然,这还不是最完美的,里面还有诸多不足。给想用 jmeter 做接口自动化测试的同学开了个头,更多的,还需要同学们自己动手,也欢迎同学们,在文章后面留言讨论。

注意,这篇文章的技术,只适合在自动化中,不能用这个脚本进行性能测试。

最后: 可以关注公众号:伤心的辣条 ! 进去有许多资料共享!资料都是面试时面试官必问的知识点,也包括了很多测试行业常见知识,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。


好文推荐

转行面试,跳槽面试,软件测试人员都必须知道的这几种面试技巧!

面试经:一线城市搬砖!又面软件测试岗,5000就知足了…

面试官:工作三年,还来面初级测试?恐怕你的软件测试工程师的头衔要加双引号…

什么样的人适合从事软件测试工作?

那个准点下班的人,比我先升职了…

测试岗反复跳槽,跳着跳着就跳没了…

90%测试猿都想学的Jmeter技能,你get吗?相关推荐

  1. 为什么 那么多 前端开发者都想学 Vue.js

    根据JavaScript 2017 前端库状况调查 Vue.js是开发者最想学的前端库.我在这里说明一下我为什么认为这也是和你一起通过使用 Vue 构建一个简单的 App 应用程序的原因. 我最近曾与 ...

  2. 每个人都想学的Java

    :::::::::::::::::::::::::::::::::::::::::::::::::::::::: Java 入门基础知识 ::::::::::::::::::::::::::::::: ...

  3. Java有什么用,为什么很多人都想学?

    一.Java有什么用? 1.Android应用 许多的 Android应用都是Java程序员开发者开发.虽然 Android运用了不同的JVM以及不同的封装方式,但是代码还是用Java语言所编写.相当 ...

  4. 各种水龙头拆卸图解_水龙头上包卫生纸,竟有这种效果!邻居看了都想学

    你家该大扫除了吗?如何打扫厨房可是个大问题厨房的卫生问题今天一一教你解决洗碗池 洗碗池经常不擦,污渍会积得很厚,陈旧老污渍怎么清除呢? 方法:白醋  用毛巾裹在水龙头上,倒上白醋.因为白醋具有腐蚀性, ...

  5. 主要是web开发和android开发 最好是选择一个方向先专一去学, 半瓶子醋什么都想学你会发现到最后什么都不会,或者比别人多花出了太多的精力 我曾经学java的时候好高骛远,因为当时老师是一个c+

    这里写自定义目录标题 欢迎使用Markdown编辑器 新的改变 功能快捷键 合理的创建标题,有助于目录的生成 如何改变文本的样式 插入链接与图片 如何插入一段漂亮的代码片 生成一个适合你的列表 创建一 ...

  6. 想学Web前端开发,应该怎么自学?

    大厂技术  坚持周更  精选好文 hello, 大家好, 我是徐小夕, 之前很多朋友问我前端应该怎么学, 怎样才能提高前端开发的段位, 作为一名非科班出生的前端程序员, 这里分享一下我对自学前端的看法 ...

  7. 给想学python-零基础的小白,如何学Python才能更快就业?

    前言 Python现在非常火,语法简单而且功能强大,很多同学都想学Python!所以小的给各位看官们准备了高价值Python学习视频教程及相关电子版书籍,欢迎前来领取! 本篇文章主要讲,如果是一个纯0 ...

  8. 给想学UG编程的人几点建议

    给一下想学习UG编程的人说几点,一定要是真心想学习的,不然你可以划走,我要说的话,句句发自于真心, 我的很多学生里面有做CNC操作的,每个人都是有欲望的,都想钱多事少的工作,数控加工这种制造业就很矛盾 ...

  9. python爬取颤音_Python难学吗,本人数学和英语都很差,想学,都是兴趣爱好

    Python难学吗,本人数学和英语都很差,想学,都是兴趣爱好以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Python ...

最新文章

  1. 可自设定长度,根据各种标点符号去分隔字符串
  2. Windows下多线程编程技术及其实现
  3. 问题描述 给定一个由n行数字组成的数字三角形如下图所示。试设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大。 对于给定的由n行数字组成的数字三角形,计算从三角形的顶至底
  4. SQL Server 数据库查找重复记录的几种方法
  5. require引入js vue_请教 关于使用require 引入vue 和公共js的问题
  6. WPF - 自定义标记扩展
  7. oracle中冗余,各位有没有检查冗余索引的脚本
  8. sklearn 中的 Pipeline 机制
  9. css+js显示点阵字体/LED七段数码管字体(模拟)
  10. 计算机怎么使用远程桌面工具,win7一键开启远程桌面工具
  11. 大数据日志分析系统-介绍
  12. MongoDB是什么?看完你就知道了!
  13. 送分了QAQ(前缀和)
  14. 极限的四则运算和洛必达法则的使用条件
  15. 指数函数和正弦函数相乘
  16. 实验三 数据库完整性技术
  17. 计算机论文word版,计算机应用基础第05章Word高级应用-毕业论文排版
  18. 米兔机器人终于拼完了_找回童年的DIY乐趣 米兔积木机器人拼装体验
  19. js高级程序设计(一) —— js简介
  20. vector之resize剖析-曾经的我以为自己真的学会了vector

热门文章

  1. matlab 小波启发式阈值滤波,小波阈值去噪
  2. 测视力距离5米还是3米_装B冷知识 | 小孔镜为什么可以提高视力?
  3. matlab中的myerr,Error in 'MPC1/S-Function' while executing MATLAB S-function 'MY_MPCCon...
  4. ogg oracle 到mysql_借助OGG完成Oracle到MySQL的数据迁移
  5. 主线程中慎用WaitForSingleObject (WaitForMultipleObjects)
  6. 函数作为参数传递至函数内部进行调用
  7. Visual C++串口通信编程---多线程异步方式
  8. axis2 java demo_axis2 webservice实现
  9. NG-ZORRO 7.3.0 发布,Ant Design 的 Angular 实现
  10. ElasticSearch权威指南学习(索引管理)