• 0
  • 0
分享
  • 90%测试猿都想学的Jmeter技能,你get吗?——软件测试圈
  • 曼倩诙谐 2022-12-23 13:18:37 字数 2636 阅读 1068 收藏 0

  前言

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

  你有没有想过呢?

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

  jmeter 与接口自动化测试

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

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

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

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

  那有没有更好的办法呢?

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

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

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

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

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

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

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

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

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

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

1-1.jpg

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

  实操案例

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

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

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

1-2.jpg

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

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

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

1-3.jpg

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

  怎么办呢?

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

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

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

  Exl3 函数

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

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

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

1-4.jpg

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

1-5.jpg

1-6.jpg

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

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

1-7.jpg

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

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

1-8.jpg

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

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

1-9.jpg

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

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

1-10.jpg

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

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

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

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

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


作者:软件测试子墨    

来源:http://www.51testing.com/html/67/n-4478867.html

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 一、软件测试是什么测试人员验证软件的功能是否满足用户的需求验证功能是否能够正常运行补充:用户包括使用软件的人、出资的甲方(购买软件的人)、流量用户二、软件测试和软件开发的区别定义区别软件开发:用程序开发的方式把用户的需求实现成一个软件(网页,app,小程序等)软件测试:测试人员进行测试,查看该程序是否满足需求,是否运行正常难易程度软件开发:要求技能集中,专业度高软件测试:技能广泛,专业度相较于开发来说低三、软件测试和软件开发中的调试有什么区别目的不同软件调试:程序员验证软件是否实现了他自己想要让软件实现的功能软件测试:测试人员验证软件是否实现了用户的需求角色不同软件调试:开发人员软件测试:测试...
            8 8 966
            分享
          •  问题场景:在使用Jmeter测试接口或者性能的过程中,我们可能会有如下需求:我们想测试的接口的参数刚好是上一个接口的返回值,这个时候该怎么做呢? 解决办法: 这个时候就用到Json提取器或正则表达式提取器了,本次我们只讲json提取器。具体使用步骤:先在测试接口的上一个接口中添加json提取器,添加步骤为:选中接口点击鼠标右键,“添加” ->“后置处理器”  -> “JSON提取器”如下图:Json提取器添加完之后如下图:Names of created variables:变量名,后面的接口里若要使用,则通过${name }引用JSON ...
            0 0 2309
            分享
          •   前言  应用系统性能测试过程中,性能优化是绕不开的话题,对测试人员而言,性能优化的第一站就是SQL语句的优化与分析。因此本文主要以MySQL数据库为例,介绍常见的慢查询SQL语句执行效率分析与优化方法和简单示例,为致力于应用系统性能优化的从业人员提供一定参考和借鉴。  1 慢查询定位  (1)慢查询  慢查询SQL语句,即在数据库执行耗时超过一定阈值的SQL语句,常见阈值为500~2000ms,可根据业务需求适当调整。如存在大量慢查询语句会直接导致系统响应时间变长,降低用户体验感,因此慢查询的定位与优化是SQL语句优化的主要内容。  慢查询调优的第一步是准确定位慢查询语句,需要数据库开启慢...
            0 0 1828
            分享
          • 前言本文主要是记录Pycharm创建支持appium模块的项目时,如何安装Appium-Python-Client以及通过一个简单的脚本实现自动点击操作的过程。步骤1.创建python项目使用Pycharm新建一个项目,这里取名test,如下图创建完以后,会自动生成一些文件,如下图:2.添加Appium-Python-Client2.1 打开Settings对话框在项目的菜单中选择File->Settgings(或者直接按快捷键Ctrl+Alt+S)2.2 安装Appium-Python-Client选择Project:test(test为项目名,不同项目不一样)下的Project In...
            13 13 2589
            分享
          • Selenium 操作被检测屏蔽selenium打开浏览器模仿人工操作是诸多爬虫小白最万能的网页数据获取方式,但是在做自动化爬虫时,经常被检测到是selenium驱动。前段时间selenium打开维普高级搜索时得到的页面是空白页。Selenium为何会被检测主要原因是selenium打开的浏览器指纹和人工操作打开的浏览器指纹是不同的,比如最熟知的window.navigator.webdriver关键字,在selenium打开的浏览器打印返回结果为true,而正常浏览器打印结果返回为undefined,我们可以在网站比较各关键字。Selenium防检测方法1. 修改window.navigat...
            2 4 9908
            分享
      • 51testing软件测试圈微信