写点什么

软件测试 | 接口测试断言

  • 2023-02-22
    北京
  • 本文字数:1828 字

    阅读完需:约 6 分钟

1.接口测试断言简介

在对服务器接口自动化测试过程中,测试程序员向服务端发起请求之后还需要对响应值进行验证。验证响应值符合预期值,这一个接口自动化测试用例才算通过。下面将讲解在接口自动化测试中,如何对服务端返回响应值做断言验证。

2.实战演示

接口测试的断言是用于验证接口发起 HTTP 请求,获取响应内容(值)之后,对响应值做断言验证,演示代码如下(Python 版和 Java 版)。


(1)Python 演示代码

测试程序向服务端发起请求,并使用一个变量 r 存储响应对象返回的内容。

r = requests.get("https://httpbin.ceshiren/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" }, "orgin":"119.123.205.82", "url":"https://httpbin.ceshiren.com/get"}
复制代码


响应断言的内容如下。


1)响应状态码断言


断言成功


import requestsr = requests.get('https://httpbin.ceshiren.com/get')assert r.static_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 不相等,所以抛出了异常。


2)json 响应断言


data = {     "hogwarts":["a","b","c"]}r = requests.post('http://httpbin.ceshiren.com/post',json=data)print(json.dumps(r.json(),indent=2))assert r.status_code == 200assert 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 下的第一个数据。


(2)Java 演示代码


Java 提供 then()方法进行断言验证,then()方法可以对多种不同类型的响应信息进行验证,如验证状态码、验证请求信息是否符合预期结果等。


响应断言的内容如下。


1)响应状态码断言


断言成功


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>.
复制代码


2)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()是获取相应的内容。body()接收的第一个参数是从响应内容中提取的实际的字段值,第二个参数调用了 equalTo()方法,并接收预期结果的值。


更多软件测试行业资讯可关注主页了解更多哦~

用户头像

社区:ceshiren.com 微信:ceshiren2023 2022-08-29 加入

微信公众号:霍格沃兹测试开发 提供性能测试、自动化测试、测试开发等资料、实事更新一线互联网大厂测试岗位内推需求,共享测试行业动态及资讯,更可零距离接触众多业内大佬

评论

发布
暂无评论
软件测试 | 接口测试断言_测试_测吧(北京)科技有限公司_InfoQ写作社区