Jmeter针对API接口的测试

作者: 葱87 | 来源:发表于2017-07-19 17:21 被阅读544次

    jmeter简介与安装

    Apache JMeter是Apache组织开发的基于Java的测试工具,安装jmeter之前,需要先安装设置java环境,jdk下载地址

    JMeter 下载地址

    解压后,以管理员身份运行bin/jmeter.bat

    注意 一定要以管理员身份运行 否则部分功能将会出现问题

    image.png

    jmeter基础使用

    单一接口测试

    我们现在所定义的接口一般为http/https请求方式,如何创建一个http请求测试呢?

    打开jmeter,创建一个测试计划,并保存测试计划

    右击测试计划 添加线程组 设置好线程组名称,比如说我们要测登陆功能,将线程组名称设置为登陆

    image2.png

    创建测试请求

    image3.png

    对接口测试

    以登陆接口为例,登陆接口的定义如下

    image5.png

    接上一步的步骤,我们在http请求中填写的参数应该如下

    image6.png

    创建接口响应结果

    image7.png

    运行测试

    如图,这样我们就可以看到结果的响应信息了


    image8.png

    断言测试接口响应结果是否达到了预期

    我们的接口都是采取json格式,我们需要编写代码解析json格式,此外需要引入额外的json解析包

    json.jar大家百度自行下载

    将该文件复制到jemter的lib目录下,重新启动jmeter

    beanshell解析json

    添加一个beanshell断言,关于beanshell的语法及使用,参考下面的文章

    image9.png

    基础的json解析代码

    image10.png

    代码说明

    import org.json.*;
    
    //获取接口响应数据,此两行代码无需变更
    String responseData = prev.getResponseDataAsString();
    JSONObject dataObj = new JSONObject(responseData);
    
    //根据响应的json串,获取result code字段,例如,接口的响应信息为 {"reuslt::{"code":"10000"}},那么我们通过下面的代码可以取得10000这个值
    String resultCode = dataObj.get("result").get("code").toString();
    
    log.info("resultCode:"+resultCode);
    
    // 字符串的等于比较请使用equals
    if (resultCode.equals("10000"))
    {
    //到预期结果,将Failure设置true,表示无需断言,测试通过,FailureMessage 为断言信息,
        Failure = false;
        FailureMessage = "ok";
    }
    else
    {
    //未达到预期效果,测试失败
        Failure = true;
        FailureMessage = "fail";    
    }
    

    如果测试未通过,测试结果中将显示红色

    image11.png

    流程测试

    上面的测试我们只是测试了单一接口,但测试过程中我们需要进行完善的流程测试,比如说支付,需要用户先登陆,然后在填写支付金额等信息进行支付,这是一个系列的流程,需要对一系列的流程测试,测试步骤接上面的内容进行

    对于支付接口,我们需要从登陆接口获取usid以及access_token
    还是上面那段代码,获取usid及access_token并赋值到jmeter变量中

    import org.json.*;
    
    //获取接口响应数据,此两行代码无需变更
    String responseData = prev.getResponseDataAsString();
    JSONObject dataObj = new JSONObject(responseData);
    
    //根据响应的json串,获取result code字段,例如,接口的响应信息为 {"reuslt::{"code":"10000"}},那么我们通过下面的代码可以取得10000这个值
    String resultCode = dataObj.get("result").get("code").toString();
    
    log.info("resultCode:"+resultCode);
    
    // 字符串的等于比较请使用equals
    if (resultCode.equals("10000"))
    {
           //获取usid及access_token
        String usid = dataObj.get("data").get("profile").get("id").toString();
        String access_token = dataObj.get("data").get("access_token").toString();
    
           //赋值到jmeter变量
        vars.put("usid",usid);
        vars.put("access_token",access_token);
    
            //到预期结果,将Failure设置true,表示无需断言,测试通过,FailureMessage 为断言信息
        Failure = false;
        FailureMessage = "ok";
    }
    else
    {
    //未达到预期效果,测试失败
        Failure = true;
        FailureMessage = "fail";    
    }
    

    新建一个http请求

    1.png

    此时我们已将这两部流程串联起来了,请求信息中查看上述两个字段已经从登陆结果中获取并传入

    331.png

    一个基础的流程测试这样完成了

    相关文章

      网友评论

        本文标题:Jmeter针对API接口的测试

        本文链接:https://www.haomeiwen.com/subject/axalkxtx.html