• jmeter接口测试


    测试该 API 的过程,就是对这个接口的测试,不同的 Token 对应不同的订单,对应不同的标签,对应不同的返回。本文主要介绍在测试该接口时总结的一些场景用法。
      工具介绍
      目前接口测试的工具,例如 Postman/SoupUI,等大多都提供了接口的发送、响应结果的获取、以及针对响应结果的断言,都可以用来做接口的自动化测试,我们目前选用的工具是 JMeter,各种工具大同小异。如对 JMeter 工具不了解的同学请戳  Bioneck  分享的  Jmeter+Jenkins 文章 。
      实现本次自动化测试用到的组件介绍 :
      1. Threads–> 线程组
      2. 配置元件–> HTTP 请求默认值
      3.配置元件–> JDBC Connection Configuration
      4.配置元件–> HTTP 信息头管理器
      5.定时器–> 高斯定时器
      6.Sampler–> HTTP 请求
      7.Sampler–> JDBC Request
      8.后置处理器–> 正则表达式提取器
      9.断言–> BeanShell 断言
      10.断言–> 响应断言
      11.监听器–> 查看结果树
      测试场景与测试实现
      1、使用Token调用API
      一个最简单的 HTTP 请求,由 host+ 端口 + 路径 + 参数构成,调用 API 的设置如下:
      1) HTTP 请求默认值 ,设置好服务器 IP 和端口,所有作用范围内的 HTTP 请求可以不再指定。
      2) HTTP 请求,设置路径和参数
      Red.Q 的请求是 GET 方法,参数可以加入 Parameters ; 如果是 POST 方法的 JSON body,参数可以放入 Body Data 内。
      POST 请求时,参数内有中文,需要设定 Content encoding 为 utf8
      3) 调用完成后,通过查看结果树查看调用结果。
      2、Mock-server 的机制
      需要每次请求时,把 request_id 放到 Header 内,随请求一起调用(HTTP 信息头管理器)。
      1) HTTP 信息头管理器
      将 HTTP 信息头管理器放入 HTTP 请求下,该 HTTP 信息头管理器内的参数,只对该 HTTP 请求生效。
      右边的设置,每次 HTTP 请求 Mock-server 时,会将 REQUEST-ID 加入到请求 Header 内。
      2)查看结果树内,可以看到发送的 Header。
      3、断言:响应结果的文本断言
      每次执行测试后,需要了解本次执行的结果正确与否,以上的步骤只能知道我们返回了什么,不能确认到底返回的对不对。这个时候需要用到断言,对响应结果进行验证。
      1)响应断言,提供对所有请求的响应结果内的内容进行断言,一般为文本断言。
      将响应断言放入HTTP请求下,会对该HTTP请求调用的响应结果进行断言。
      要测试的文本放入测试的模式内,可添加多个验证文本。
      2) 查看结果树内,如果与指定的内容不一致,请求会标记为失败,并给出失败原因。
      4、断言:响应的结果与数据库内的字段比较
      部分场景下,要求每次调用 API 后,需要验证对应的 [风险等级]符合预期。而 [风险等级] 保存在数据库内,需要通过 JDBC Request 来实现对数据库的操作。
      1)JDBC Connection Configuration,提供对数据库的连接配置。
      2) JDBC Request,设置查询 SQL
      验证结果一般是查询类的 SQL,QueryType 选择 Select Statement;
      如果需要在某个请求开始前对数据库内的数据做新增修改删除,则需要选择 QueryType为Update Statement;
      3)在 JDBC Request 下,添加响应断言,验证响应结果与字符串一致。
     5、断言:使用 BeanShell 编写手工断言
      每次调用 API 后,需要验证 Token 的 [最近调用时间字段] 。该时间字段是存在数据库内的时间戳,而我们需要验证 token 的最近调用时间在 15s 以内,而响应断言组件无法做到日期的比对,需要用正则表达式提取器将请求的响应结果提取出来,然后作为一个变量,在 Bean Shell 内进行比对。
      1)调用完请求后
      添加 JDBC Request,设置查询条件如下
      响应结果
      2) 在 JDBC Request 下添加正则表达式提取器,提取数据库返回的时间戳字段,保存到变量内。
      3) 在 JDBC Request 下添加 BeanShell 断言,对正则表达式提取器内提取的变量与当前时间进行比对。
      6、异步调用,等待一定时间后获取调用结果数据
      某 API 支持客户进行异步调用,先发送一个异步请求提交数据(获取一个 token),然后隔一断时间后再(使用获取到的 token)请求上一个请求的返回结果;需要用到定时器组件。
      1)异步调用请求接口设置。
      2)异步调用请求成功后,返回一个 query_id,如果要拿到真正的处理结果,需要在调用获取结果的请求时,把 query_id 作为一个参数。
      3) 在异步请求下添加一个‘正则表达式提取器’,将异步调用返回的 query_id 保存到参数内。
      4) 获取异步调用结果的请求内,引用正则表达式提取出来的 query_id ,并作为参数提交。
      5) 异步调用一般不会马上出结果,需要在获取异步调用的结果请求之前等待一段时间
      BeanShell Timer 内可设置线程等待 5s;
      添加高斯定时器、固定定时器等定时器也可达到等待的效果;
      定时器放在 HTTP 请求下,会先执行定时器,如果与 HTTP 请求是同级目录,则每个 HTTP 请求都会受定时器的时间影响。
      总结
      现在几乎所有从事 Web 测试的同学都会使用 JMeter 或某种 API 工具来调用几把接口,而需要做到接口自动化,免不了要加入参数化、关联、断言等高级用法,本文仅列出工作中用到的常见场景中的用法,有不对之处或测试之间的交流欢迎指出,谢谢。

    jmeter是java开发的开源的性能测试工具。需要安装jdk,修改java环境变量,windows操作系统直接执行jmeter中bin目录下的jmeter.bat文件(免安装)

      1.解决乱码问题的配置修改:

        jmeter返回中文乱码:

        1、在jmeter的bin目录下,找到jmeter的配置文件,jmeter.properties,然后把sampleresult.default.encoding=UTF-8加到最下面

        2、重新打开jmeter
        jmeter bodydata里面中文乱:

        1、在jmeter的bin目录下,找到jmeter的配置文件,jmeter.properties,然后把jsyntaxtextarea.font.family=Hack加到最下面

        2、重新打开jmeter

      2.jmeter接口测试常规步骤:

        testplan>>线程组>>取样器下的 http请求>>监听器下的 查看结果树

      例1 get方法:

       

      

      例2 post方法

        如果需要有cookie信息的,则需要在登录操作之后获取cookie值,例如用谷歌浏览器,获取到cookie信息,然后加入到jmeter的消息头管理里。

      例如:需要获取QQ群成员的信息,网址:https://qun.qq.com/member.html#gid=XXXX(qq群号)

           

      将cookie值添加到消息头管理器中: 

      

      填写数据,在谷歌上查到发送的数据如下:

      

      在jmeter的http请求里添加参数:

      

      

        例3 通过post方法上传文件:

      在输入完协议,服务器名称,方法,路径后,点击“文件上传”,点击“添加”,在参数名称那里输入接口文档中上传文件的参数名,然后点击“浏览”,在本地选择文件,mine类型如图所示。

      

      例4 参数为json格式:

      当接口文档中明确指出数据类型为json格式时,必须选择"消息体数据"

      

      

    五.jmeter三种参数化的方法:

      1.csv data set config:

        csv数据文件设置是在"配置元件"下,是一种通过导入外部文件的形式将数据参数化,方便进行大批量的参数化,或者多个参数取值顺序相同的,比如取值的顺序为同一行。

      

      文件编码:如果文件中的数据包含中文,则在下拉框中选择“编辑”然后手动输入GBK,一般都是utf-8格式

      变量名称:多个变量名称需要用逗号隔开,一个变量则不需要

      忽略首行:如果首行有变量名(比如从数据库复制过来带有字段名),则可以选此项,一般不会有

      是否允许带引号:文本数据取值后自动带上引号,一般不用

      线程共享模式:所有线程表示所有线程共用一份数据,依次取值,其他模式都是多份数据,有几个线程就有几分数据文件,每个线程可以取相同的值

      遇到文件结束符再次循环:文件结束符为EOF,该设置要在“遇到文件结束符停止线程”选择“false”的情况下才有效,此时如果遇到文件结束符再次循环选择“true”,则一份文件的数据可以循环用,如果选择“false”,则数据会取值“EOF”

      2.用户参数:

      取值灵活,对取值顺序没有要求,可以在任何地方取值,在“前置处理器”中选择。

      

      

      3.函数助手:

      

      

      在里面常用的有随机数和时间,以随机数为例:

      找到__Random函数,按照要求输入范围,在这里为1-99的随机值,然后点击“生成”,函数生成为${__Random(1,99,)}。

      

           常用的函数还有时间戳:从计算机诞生的那一天到现在过了多少秒,__time 取当前的时间戳,如果要取格式化好的时间,YYYY MM dd HH mm ss,格式可以自定义拼接。

      

      在jmeter里,变量的使用方式是在需要替换的地方用${变量名}。

    六.jmeter关联:

      关联是从服务器响应结果里提取值作为一个变量,需要关联的数据是服务器每次返回的一个动态变化的,但是要给后续业务进行提交校验的一个值。

      jmeter的关联有两种常用格式:josn提取和正则提取。 josn的提取只用在返回的数据为josn格式的情况下。正则没有格式限制。

     1.josn提取:   

      例如一个抽奖接口:如要传入的参数是在用户登录的时候,返回的用户id和sign值,这种情况下就需要关联:

      返回的数据是josn格式,所以可以用josn提取:线程组下添加后置处理器中的json提取器

      

      登录成功后,服务器返回结果如下:

    在此我们要获取sign和userid,要设置两个json提取,其中的apply to有几个选择,main sample and sub-samples是在有重新向跳转的时候选,一般选

    main sample only.

    2.正则提取:

      josn格式返回是键值对,但是里面的键值对是无序排列的,可以看出,最后一个键值对没有以逗号结尾,在用正则写的情况下会比较麻烦,如果写的不好,当每次键值对顺序不一样会导致提取不成功,所以josn格式最好用josn提取,在此用上面个例子写出正则提表达式(在此不接受正则表达式规则)。

    如下图中,“模板”是以$N$的形式,N是代表数字,一个正则表达式里可以提多个值,数字可以是1,2,3,表示从第几个正则表达式里提,模板之间也可以拼接,例如有3个正则提取,则正则表达式里有三个()的形式,例如分别要提取年月日,则模板可以写成$1$-$2$-$3$,则提取出来就是2018-11-08的形式。

    “匹配数字”用于一个正则提取有多个值得形式(正则表达式有贪婪和非贪婪模式,贪婪模式下可以获取多个结果),数字表示匹配到的第几个结果,0是随机一个。

      提取出来的结果传入抽奖接口:

  • 相关阅读:
    2
    作业5
    实验十
    作业 5 指针应用
    九九乘法表
    实验七(课堂练习)
    实验六 数组 (2)
    实验六 数组
    课堂实验5(求从m到n之间(包括m和n)所有素数的和)
    课堂实验5-2
  • 原文地址:https://www.cnblogs.com/klb561/p/10170429.html
Copyright © 2020-2023  润新知