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 requests
r = 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 == 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 下的第一个数据。
(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()方法,并接收预期结果的值。
更多软件测试行业资讯可关注主页了解更多哦~
评论