美文网首页
接口自动化测试-----Rest-Assured

接口自动化测试-----Rest-Assured

作者: 杜艳_66c4 | 来源:发表于2020-05-31 11:29 被阅读0次

given()这是一个请求对象,get(url)这个是做GET类型请求的发送操作,then()这个是验证相关的对象,前面get()执行完了就能拿到response对象,然后response对象下有一些验证相关的类,then()就是验证类的一个方法。
log().all() 打印全部日志大控制台

1、环境搭建

新建个maven 工程,直接在pom文件配置如下,导入Rest Assured和TestNG相应的包,可以根据实际情况导入最新版本。

2、Get Demo 演示

https://blog.csdn.net/Liuyuelinjiayou?t=1&orderby=ViewCount
以这个接口为例
我们用Rest Assured 要模拟这个请求,
首先我们需要先导入静态方法

import static io.restassured.RestAssured.*;

接下来写简单的demo, https要添加SSL, 参数可以放在parasm中。

import io.restassured.RestAssured;
import io.restassured.config.RestAssuredConfig;
import io.restassured.config.SSLConfig;
import io.restassured.response.Response;
import org.testng.annotations.Test;

import static io.restassured.RestAssured.*;

public class Apitools {
    @Test
    public void getHttpTest(){
        Response response = given()
                //配置SSl让所有请求支持所有的主机名
                .config((RestAssured.config().sslConfig(new SSLConfig().relaxedHTTPSValidation())))
                .params("q","自动化测试","start",0,"count",2)
                .get("https://api.douban.com/v2/book/search");
        //打印出response的body
        response.print();
    }

}

3、Post Demo演示

接口如下:这个接口是项目中一个接口, 请求
https://idp-stg.jryzt.com/vega/core/inner/deposit

body:
{
"channel": "QJ10301",
"serviceCode":"RB000001",
"requestNo": "56789876578903456",
"requestData": {
 "channelUserId":"shengou01",
 "productCode":"",
 "prodComCode":"QJCCB",
 "idNo":"410102199003076074"
}
}

响应:

{
    "responseCode": "000000",
    "responseData": {
        "bankCardList": [
            {
                "bankCardNo": "6222022201007325758",
                "phoneNo": "15221203746"
            }
        ],
        "eacctCardNo": "6214970200002676",
        "eacctState": "12",
        "prodComCode": "QJCCB",
        "prodComName": "曲靖市商业银行"
    },
    "responseMessage": "处理成功"
}

完整demo

import io.restassured.RestAssured;
import io.restassured.config.RestAssuredConfig;
import io.restassured.config.SSLConfig;
import io.restassured.http.Headers;
import io.restassured.response.Response;
import org.testng.annotations.Test;
import sun.jvm.hotspot.memory.HeapBlock;

import java.util.ArrayList;
import java.util.Map;

import static io.restassured.RestAssured.*;
import static org.hamcrest.CoreMatchers.hasItems;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.core.IsEqual.equalTo;


public class Apitools {
   // @Test
    public void getHttpTest(){
        Response response = given()
                //配置SSl让所有请求支持所有的主机名
                .config((RestAssured.config().sslConfig(new SSLConfig().relaxedHTTPSValidation())))
                .params("q","自动化测试","start",0,"count",2)
                .get("https://api.douban.com/v2/book/search");
        //打印出response的body
        response.print();
        //获取response的headers 并输出
        Headers headers  = response.getHeaders();
        System.out.println("headers:" + headers.toString());

        // 获取Response中header名为Content-Type的值
        String contentType = response.getHeader("Content-Type");
        System.out.println("contentTypesss:" + contentType);
        // 等同上面方法
        System.out.println(headers.get("Content-Type"));

        //如果headers 不为空,返回true
        System.out.println(headers.exist());
        //获取所有cookie,返回map
        Map<String,String> cookieMap = response.cookies();
        // keySet :该方法返回map中所有key值的列表。
        for (String key : cookieMap.keySet()){
            System.out.println(key + ":" + cookieMap.get(key));
        }
    }
    @Test
    public void postTest(){// 电子账户信息
        Response response = given()
                //设置request Content-Type
                .headers("Content-Type","application/json")
                .body("{\n" +
                        "\"channel\": \"QJ10301\",\n" +
                        "\"serviceCode\":\"RB000001\",\n" +
                        "\"requestNo\": \"56789876578903456\",\n" +
                        "\"requestData\": {\n" +
                        " \"channelUserId\":\"shengou01\",\n" +
                        " \"productCode\":\"\",\n" +
                        " \"prodComCode\":\"QJCCB\",\n" +
                        " \"idNo\":\"410102199003076074\"\n" +
                        "}\n" +
                        "}\n")
                .expect()  //开始校验response是否达到预期
                //判断responseCode是否包含了000000
               // .body("responseCode",hasItems(0000))//这个中不能适用
                .body("responseData.prodComCode",is("QJCCB"))
//直接字符串匹配
                .body("responseData.eacctState",equalTo("12"))
                .when()
                .post("https://idp-stg.jryzt.com/vega/core/inner/deposit");
        //打印出response
        response.print();
        //获取reponse的状态码200,是int类型
        System.out.println("StatusCode" + response.getStatusCode());
        //获取Response body,并转成String类型:
        //response.getBody().asString(),打印出来结果和上面一样
        System.out.println("asString:"+response.getBody().asString());

             //解析json
        //获取响应结果里的bankCardList
        ArrayList<ArrayList<String>> bankCardLists = response.jsonPath().get("responseData.bankCardList");
        for (int i = 0; i < bankCardLists.size(); i++) {
                System.out.println("bankCardLists:"+ bankCardLists.get(i));
        }
        System.out.println("_________");
        //获取响应结果里的eacctCardNo
        System.out.println("eacctCardNo:" + response.jsonPath().get("responseData.eacctCardNo").toString());
    }

}

4、解析JSON

Rest Assured 自带支持对JSON、xml的解析
如上的,解析。
response.jsonPath().get("")

5、校验Response 是否达到预期

Rest Assured提供了类似hasITems ,is,equalTo等静态方法供使用,使用时先导入方法,无法自动匹配导入。

import static org.hamcrest.CoreMatchers.hasItems;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.core.IsEqual.equalTo;

尽管Rest Assured 提供了校验方法,但是在实际API自动化测试过程中,因为往往需要校验的字段非常多,建议还是直接先把要校验的JSON字段解析出来,再通过TestNG提供的Assert类进行校验。

相关文章

网友评论

      本文标题:接口自动化测试-----Rest-Assured

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