jmeter接口测试Jmeter

基于jmeter进行接口测试实践

2018-01-31  本文已影响186人  拾荒猎人

摘要:
本次jmeter接口测试实践,其中涉及到数据参数化、动态获取参数值、使用第三方jar导入编写代码进行MD5加密、并发测试同步定时器、测试计划承上启下的接口组装等知识点的使用。

一、接口定义:

  1. 缴费订单生成接口
    http://*******/portal/wallet/online/consume
    请求方式: POST方法
    Content-Type : application/json
    image.png
    image.png
  2. 免密支付接口
    image.png
    请求例子:
    image.png
    image.png
    以上接口使用到的privateKey值由第三方的设备生成,测试环境使用privateKey=##########

三、生成订单接口与免密支付接口使用场景测试点分析(本次只实践功能测试):
由于两个接口中的入参,都是来至PHP后端接口输出,入参存在跨数据库服务器使用,
并且java接口内部逻辑中还存在回调PHP端接口进行参数一致性的校验;
因此,不能随便给个参数值进行测试,需要从接口业务使用场景上进行分析与测试
1. 用户与车牌未绑定
2. 正常缴费订单免密支付
3. 支付金额与订单消费金额不一致
4. 最高金额小于200
5. 余额不足校验
6. 订单超时后,再进行免密支付
7. 同用户绑定多个车牌,并发缴费

四、构造测试数据:
本次测试使用数据驱动的方法测试,测试数据保存在txt文件中,jmeter测试计划参数化引用txt文件,读取参数数据达到测试不同目的

  1. 数据构造方法

五、jmeter构建接口测试框架

  1. 参数化定义
    订单接口入参数据参数化定义保存于consume.txt文件:
    goodsDetail //对应订单接口中的goodsDetail参数
    memberId //对应订单接口中的memeberId参数
    merOrderId //对应订单接口中的merOrderId参数
    orderAmount //对应订单接口中的orderAmount参数
    tranType //对应订单接口中的tranType参数
    privateKey //对应订单接口中的privateKey参数
    assert //断言期望结果参数

    超时订单免密支付入参数据参数化定义保存于orderId.txt文件:
    orderId //对应超时缴费订单ID
    privateKey //加密用的第三方privateKey
    assert //断言期望结果参数

    模拟多个出口缴费并发参数保存于concurrency.txt文件中:
    参数定义同consume.txt

  2. 用例数据 image.png
  3. jmetr组装接口业务用例流程步骤
    数据参数化实现

    image.png 添加钱包用户登录请求
    用户需要在微信端进行登录钱包后,才可以进入生成缴费订单接口、免密支付接口执行, 实现方法:使用jmeter直接调用钱包的登录接口,post请求传入个人微信号的openId与unionId
    登录接口: http://*******/portal/user/login
    image.png 登录成功返回结果: image.png 登录钱包后获取登录状态token保存在header中,提供给其他接口判断是否已登录成功
    jmeter获取token方法:
    请求接口后,增加一个正则表达式提取器后置处理器
    设置一个引用名称token,提取token值,该token名称会在别地方当做变量天引用
    在全局的header信息头管理器中,引用token变量
    image.png image.png 添加生成订单接口请求
    根据接口定义,其中有一个sign参数,需要进行md5加密,加密的参数需要用例入参所有参数,而这些参数值都不是固定,由PHP后端调用传入.因此, jmeter需要动态获取入参进行MD5加密,获取动态sign值:
    • 找开发要MD5加密算法的类,创建一个java工程,编写一个MakeMd5类,定义实现两个加密方法 image.png image.png

六、执行结果

在用例数据txt中,有几条数据就是有几个可执行用例,在jmeter中如果是用单线程进行执行,需要配置循环执行5次,才能跑完所有用例,否则只会跑第一条数据用例。 image.png
整个测试计划与执行结果如下:
由结果看,用例根据数据,逐条执行 image.png
各接口请求情况: image.png image.png image.png
上一篇下一篇

猜你喜欢

热点阅读