zoukankan      html  css  js  c++  java
  • Jmeter之JSON提取器应用

    在测试接口的时候,有时会碰到这样的业务,一个业务的接口测试必须要先登录。

    换句话说,业务的实现需要先登录,怎么实现呢?

    还有很多别的业务

    1,接口关联

    也称为关联参数。在应用业务接口中,完成一个业务功能时,有时候一个接口可能不满足业务的整个流程逻辑,需要多个接口配合使用。

    简单的案例如:B接口的成功调用依赖于A接口,需要在A接口的响应数据(response)中拿到需要的字段,传递给B接口作为B接口请求参数,拿到后续响应的响应数据。

    2,数据验证

    • 这里的数据验证指的是对响应结果进行数据的校验
    • 接口自动化测试中,对于简单的响应结果(json),可以直接和期望结果进行比对,判断是否完全相等即可。如 json {"status":1,"msg":"登录成功"}
    • 对于格式较复杂,尤其部分数据存在不确定性、会根据实际情况变化的响应结果,简单的判断是否完全相等(断言)通常会失败。如: json {"status":1,"code":"10001","data":[{"id":1,"investId":"1","createTime":"2018-04-27 12:24:01","terms":"1","unfinishedInterest":"1.0","unfinishedPrincipal":"0","repaymentDate":"2018-05-27 12:24:01","actualRepaymentDate":null,"status":"0"},{"id":2,"investId":"1","createTime":"2018-04-27 12:24:01","terms":"2","unfinishedInterest":"1.0","unfinishedPrincipal":"0","repaymentDate":"2018-06-27 12:24:01","actualRepaymentDate":null,"status":"0"},{"id":3,"investId":"1","createTime":"2018-04-27 12:24:01","terms":"3","unfinishedInterest":"1.0","unfinishedPrincipal":"100.00","repaymentDate":"2018-07-27 12:24:01","actualRepaymentDate":null,"status":"0"}],"msg":"获取信息成功"} 上面的json结构嵌套了很多信息,完整的匹配几乎不可能成功。比如其中的createTime信息,根据执行接口测试用例的时间每次都不一样。同时这个时间是响应结果中较为次要的信息,在进行接口自动化测试时,是可以选择被忽略的。
    • 我们需要某种简单的方法,能够从json中提取出我们真正关注的信息(通常也被称为关键信息)。如提取出status的值为1,data数组中每个对象的investId都为1,data中第三个对象的unfinishedPrincipal值为100.00,只要这三个关键信息校验通过,我们就认为响应结果没有问题。

    解决方案

    JsonPath可以完美解决上面的痛点。通过JsonPath可以从多层嵌套的Json中解析出所需要的值。

    废话不多说了,直接上案例,帮助大家理解如何操作。

    先简单列出登录的接口文档信息和学生金币充值的接口文档信息。

    1,登录

    登录接口

    简要描述:

    • 登录接口

    请求URL:

    • http://api.nnzhp.cn/api/user/login

    请求方式:

    • post

    参数:

    参数名必选类型说明
    username string 用户名
    passwd string 密码
    1. 登陆用户名:niuhanyang
    2. 密码:aA123456

    返回示例

    1. {
    2. "error_code": 0,
    3. "login_info": {
    4. "userId": 1,
    5. "sign": "d58e3582afa99040e27b92b13c8f2280",
    6. "login_time": "20171207113501"
    7. }
    8. }

    返回参数说明

    参数名类型说明
    error_code int 错误编码,0为操作成功
    login_info object 登录对象信息
    userId int 用户id
    sign string 签名
    login_time string 登录时间

    2,学生金币充值

    学生金币充值

    学生金币充值

    简要描述:

    • 学生金币充值接口,这个接口是为了讲添加cookie以及身份验证的

    请求URL:

    • http://api.nnzhp.cn/api/user/gold_add

    请求方式:

    • post

    参数:

    该接口有权限验证,需要admin用户才可以做操作,需要添加cookie

    cookie中key为登录的用户名,value从登录接口中获取,登陆成功之后会返回sign

    参数名必选类型说明
    stu_id int 学生id
    gold int 金币数量

    返回示例

    1. {
    2. "error_code": 0,
    3. "msg":"充值成功!"
    4. }

    返回参数说明

    参数名类型说明
    error_code int 错误编码,0为操作成功
    msg string 提示信息

    ———————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

    二:业务场景分析:

    现在的业务需求是给学生充值金币,但是需要先登录。

    登录的用户名已经给出了,但是其中的sign需要登录成功后才会返回。

    这个返回值sign作为第二个接口的入参数据。所以我们的任务就很明确了。

    先登录成功,再获取到sign,

    1

    2

    3

    4

    5

    6

    以上操作步骤就是我的思路,如有不足,欢迎大家指正。

    推荐学习链接:

    http://www.lemfix.com/topics/63

    https://www.cnblogs.com/tudou-22/p/12579575.html

    这两个链接都是一个培训班的公开资料,不是推荐大家报名哈。

    我主要是看到他们写的内容对自己有启发意义,觉得写的好。

    其实接口测试我们自学也是可以的。

  • 相关阅读:
    深入防火墙记录(2) java程序员
    今天装了Redhat Enterprise Linux 5.0 ,体验一下不同的感受. java程序员
    最小生成树
    UVA400 Unix ls
    sudt2404Super Prime
    sdut2143图结构练习——最短路径
    多校联赛(1)Saving Princess claire_
    树结构练习——排序二叉树的中序遍历
    hdu1042N!
    最短路径
  • 原文地址:https://www.cnblogs.com/star12111/p/12933990.html
Copyright © 2011-2022 走看看