软件测试 | 接口测试断言

518 篇文章 3 订阅
514 篇文章 2 订阅

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()方法,并接收预期结果的值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值