当前位置: 首页 > news >正文

自动化测试怎么做?python自动化测试断言详细实战代码(看这一篇就够了)

目录:导读

    • 前言
    • 一、Python 接口自动化断言
    • 二、Java 接口自动化断言
    • 三、总结


前言

在测试用例中,执行完测试用例后,最后一步是判断测试结果是 pass 还是 fail,自动化测试脚本里面一般把这种生成测试结果的方法称为断言assert。

接口请求断言是指在发起请求之后,对返回的响应内容去做判断,用来查看是否响应内容是否与规定的返回值相符。

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

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

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

一、Python 接口自动化断言

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

r = requests.get("https://xxxxx")

响应结果:

{
  "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://xxxxx"
}

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

响应断言
响应状态码断言

1、断言成功

import requests
r = requests.get('https://xxxxx')
assert r.status_code==200

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

2、断言失败

>>> import requests
>>> r = requests.get('https://xxxxx')
>>> 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://xxxxx',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://xxxx"
}

通过 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://xxxxx").
                //通常通过 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://xxxxx").
                then().body("headers.Host", equalTo("httpbin.ceshiren.com")).log().all();
    }
}

通过 then().body(“headers.Host”, equalTo(“httpbin.ceshiren.com”)) 对 json 的内容进行断言,其中 then().body() 是获取相应的内容。

第一个参数是从响应内容中提取实际的字段值。

第二个参数调用了 equalTo() 方法,并在其中传入了期望结果。

三、总结

不是所有的拼搏都会成功,我们不能盲目的拼搏,必须带上我们的智慧,将属于我们的机会牢牢抓住,才会多一份成功。

青春是短暂的,而这短暂的时间里我们的任务很重。让花儿尽情的开吧,只要它不是落了一个虚度年华的罪名,那么,我都乐意。

这世界从来不会跟你过不去,你得到的任何好与坏,都是自己做的。根本没有正确的选择,我们只不过是要努力奋斗,使当初的选择变得正确。

相关文章:

  • 100天精通Python(数据分析篇)——第61天:Pandas.to_datetime函数(处理时间)
  • C#多线程学习总结
  • 网络安全漏洞原理利用与渗透
  • 【DDR3 控制器设计】(4)DDR3 的读操作设计
  • 基于OpenCV的单目相机标定与三维定位(推广)
  • Java数据结构:单链表的实现与面试题汇总
  • 2022年都说软件测试不香了?在职3年月薪16k我满意了,你们觉得前景怎么样?
  • python做了个自动关机工具,再也不会耽误我下班啦
  • BUUCTF NewStarCTF 公开赛赛道Week5 Writeup
  • @Conditional注解详解
  • 动态路由协议解析(rip)
  • 38、Java 中的正则表达式(单字符匹配和预定义字符)
  • 电气论文实现:基于优化算法和python-pandapower的配电网重构(IEEE33节点算例)
  • 刚来的00后真的卷,听说工作还没两年,跳到我们公司直接起薪20k...
  • 【云原生 · Docker】Docker 镜像操作、容器操作常用指令
  • 230. Kth Smallest Element in a BST
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • Android优雅地处理按钮重复点击
  • docker python 配置
  • JavaScript函数式编程(一)
  • JavaScript类型识别
  • Java程序员幽默爆笑锦集
  • js递归,无限分级树形折叠菜单
  • Linux Process Manage
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • redis学习笔记(三):列表、集合、有序集合
  • Redis在Web项目中的应用与实践
  • scala基础语法(二)
  • spring security oauth2 password授权模式
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 深入浅出webpack学习(1)--核心概念
  • 算法---两个栈实现一个队列
  • 想使用 MongoDB ,你应该了解这8个方面!
  • 《码出高效》学习笔记与书中错误记录
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • 说说我为什么看好Spring Cloud Alibaba
  • ​TypeScript都不会用,也敢说会前端?
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • #stm32整理(一)flash读写
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (70min)字节暑假实习二面(已挂)
  • (poj1.2.1)1970(筛选法模拟)
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • (转)程序员疫苗:代码注入
  • (转)视频码率,帧率和分辨率的联系与区别
  • (转载)(官方)UE4--图像编程----着色器开发
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .bat批处理出现中文乱码的情况
  • .net连接MySQL的方法
  • .NET项目中存在多个web.config文件时的加载顺序
  • [2018][note]用于超快偏振开关和动态光束分裂的all-optical有源THz超表——