• 技术分享 | 接口自动化测试中,如何做断言验证?


    原文链接

    本文节选自霍格沃兹测试开发学社内部教材

    在服务端自动化测试过程中,发起请求之后还需要对响应值进行验证。验证响应信息符合预期值之后,这一条接口自动化测试用例才算完整的通过。所以这一章节,将会讲解在接口自动化测试中,如何对服务端返回的响应内容做断言验证。

    实战练习

    对接口服务发起 HTTP 请求信息,获得响应内容之后,对其做断言验证。

    Python 演示代码

    在发起请求后,使用一个变量r存储响应的内容,也就是Response对象。

    r = requests.get("https://httpbin.ceshiren.com/get")
    
    

    响应结果:

    {
      "args": {},
      "headers": {
        "Accept": "*/*",
        "Accept-Encoding": "gzip, deflate",
        "Host": "httpbin.ceshiren.com",
        "User-Agent": "python-requests/2.25.1",
        "X-Forwarded-Host": "httpbin.ceshiren.com",
        "X-Scheme": "https"
      },
      "origin": "119.123.205.82",
      "url": "https://httpbin.ceshiren.com/get"
    }
    
    

    Response 对象有很多功能强大的方法可以调用,比如直接获取响应头,获取 Unicode 编码后的响应内容,获取二进制的响应内容,获取原始的响应内容等等。

    响应断言

    响应状态码断言

    • 断言成功
    import requests
    r = requests.get('https://httpbin.ceshiren.com/get')
    assert r.status_code==200
    
    

    assert是 python 的内置函数,用来判断表达式,当表达式条件为 False 的时候就会触发异常。r.status_code是 response 对象内的一个方法,用于获得返回值的状态码。assert r.status_code==200 就是在判断状态码是否等于 200,如果不等于 200 则会抛出异常。

    • 断言失败
    >>> import requests
    >>> r = requests.get('https://httpbin.ceshiren.com/get')
    >>> assert r.status_code==400
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    AssertionError
    
    

    从以上例子可了解到,此响应状态码实际输出与预期结果状态码 400 不相等,所以抛出了异常。

    Json 响应断言

    data = {
          "hogwarts": ["a","b","c"]
      }
    r = requests.post('https://httpbin.ceshiren.com/post',json=data)
    print(json.dumps(r.json(),indent=2))
    assert r.status_code == 200
    assert r.json()["json"]["hogwarts"][0] == "a"
    
    

    响应结果:

    "args": {},
      "data": "{"hogwarts": ["a", "b", "c"]}",
      "files": {},
      "form": {},
      "headers": {
        ...省略...
      },
      "json": {
        "hogwarts": [
          "a",
          "b",
          "c"
        ]
      },
      "origin": "113.89.8.68",
      "url": "https://httpbin.ceshiren.com/post"
    }
    
    

    通过 assert r.json()["json"]["hogwarts"][0] == "a" 对 json 的内容进行断言,其中 r.json() 是获取相应的内容,r.json()["json"] 是获取到 json 的内容,r.json()["json"]["hogwarts"] 是获取到 hogwarts 的内容,r.json()["json"]["hogwarts"][0] 是 hogwarts 下的第一个数据。

    Java 演示代码

    Java 通过 then 进行断言验证,then() 方法可以对多种不同类型的响应信息进行验证。

    • 断言响应状态码成功
    import static io.restassured.RestAssured.*;
    
    public class Requests {
        public static void main(String[] args) {
            given().when().get("https://httpbin.ceshiren.com/get").
                    //通常通过 then 进行断言验证 
                    then().statusCode(200);
        }
    }
    
    

    通过 then() 方法提供的 statusCode() 方法即可实现对于响应状态码的验证,statusCode() 方法通常接收的是 int 类型的参数。statusCode(200) 表示判断响应状态码是否等于 200,如果不等于 200 则会抛出异常。

    如果将以上代码中断言验证的代码改成 statusCode(300),那么控制台则会输出异常信息。

    Exception in thread "main" java.lang.AssertionError: 1 expectation failed.
    Expected status code <300> but was <200>.
    
    

    json 响应断言

    import static io.restassured.RestAssured.*;
    import static org.hamcrest.core.IsEqual.equalTo;
    
    public class Requests {
        public static void main(String[] args) {
            given().when().get("https://httpbin.ceshiren.com/get").
                    then().body("headers.Host", equalTo("httpbin.ceshiren.com")).log().all();
        }
    }
    
    

    通过 then().body("headers.Host", equalTo("httpbin.ceshiren.com")) 对 json 的内容进行断言,其中 then().body() 是获取相应的内容,第一个参数是从响应内容中提取实际的字段值,第二个参数调用了 equalTo() 方法,并在其中传入了期望结果。

    ⬇️ 你好呀,喜欢这篇文章的话烦请点个“赞”哦!大家的支持很重要~() PS:有问题可以联系我们哦~v ceshiren001

    >>更多技术文章分享和免费资料领取

  • 相关阅读:
    git和github的使用
    C语言 -- 链表操作
    数据结构之表达式求值(C++版)
    数据结构之一元多项式加法(C++版)
    数据结构之邻接矩阵(C++版)
    数据结构之二叉树,赫夫曼树(C++版)
    数据结构之循环队列(C++版)
    数据结构之顺序栈(C++版)
    数据结构之单链表(C++版)
    数据结构之顺序表(C++版)
  • 原文地址:https://www.cnblogs.com/hogwarts/p/16523497.html
Copyright © 2020-2023  润新知