基于jmeter进行接口测试实践

摘要:
本次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. 数据构造方法
  • PHP后端数据库中,db.nonsecret_payment表增加测试数据,创建某用户进行开通免密支付数据
    image.png
  • 在db.nonsecret_payment_permission表中增加测试数据,创建某用户绑定车牌号,一个用户可以绑定多个
    image.png
  • 在db.payment_records表中增加某用户某车牌号停车消费金额
    image.png
  • 在钱包java 服务端数据库中设置该用户钱包余额db.user_wallet表中设置用户余额
    image.png

五、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
  • 导出以上类方法为jar包,把该jar放入apache-jmeter-3.0\lib\ext路径中,注意此时需要重启jmeter,否则import该包是不成功的。
  • 在订单接口请求上一步骤添加一个BeanShell Sampler取样器,导入MD5加密包,并根据方法中定义的参数顺序,传入参数值进行MD5加密
    image.png
    image.png

    添加消费接口请求
    image.png
    接口请求成功后,会返回一组json串
    image.png
    其中orderId是提供给免密支付接口使用,因此,在此步骤我们需要获取出orderId值赋于一个变量
    我们使用正则表达式提取器获取:
    image.png

    最后进行断言,因为在消费接口逻辑里不进行校验,只要传入符合参数类型的值,都会生成订单成功,返回200
    image.png
    添加免密支付接口请求
    image.png
    添加接口响应断言,引用用例数据中期望结果进行结果校验
    image.png
  • 超时订单支付例的编写同以上的用例框架

    同用户多车辆在不同出口进行并发免密支付用例组装基本同以上框架,但是有一点必须得注意,即是在哪个点上进行并发,本用例是在支付接口那里进行并发,因此在请求支付接口前,需要加一个同步定时器配置等待多少个线程到达此处时,就可以同时进行并发请求
    image.png
    至此,用例组装与数据准备完毕,下一步即是进行用例执行

六、执行结果

在用例数据txt中,有几条数据就是有几个可执行用例,在jmeter中如果是用单线程进行执行,需要配置循环执行5次,才能跑完所有用例,否则只会跑第一条数据用例。
image.png

整个测试计划与执行结果如下:

由结果看,用例根据数据,逐条执行
image.png

各接口请求情况:
image.png
image.png
image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,402评论 6 499
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,377评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,483评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,165评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,176评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,146评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,032评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,896评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,311评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,536评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,696评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,413评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,008评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,815评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,698评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,592评论 2 353

推荐阅读更多精彩内容

  • 在使用Jmeter进行接口的性能测试时,由于Jmeter 是JAVA应用,对于CPU和内存的消耗比较大,所以,当需...
    燕京博士阅读 4,166评论 0 16
  • 接口测试讲义 1. 接口测试的类型 主要包含三种测试: Web接口测试, 应用程序接口(API, applicat...
    厲铆兄阅读 28,603评论 1 44
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,071评论 25 707
  • 伊万卡组-QT-第一周R2 A1(联系过往经历) “多睡一会儿”是件充满多巴胺的事情!从小到大,父亲一直强调我,早...
    QT校长阅读 145评论 2 2
  • 为何不作声响 就到我牢房幽暗的门上 看吧 我的牢门紧锁 我住得挺窄巴 我经常吃醉酒 也反复梦见悲愤的骡子 驮着面粉...
    左小事界阅读 394评论 0 1