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

Python接口自动化实战 ( 第一阶段) - 封装接口请求类和异常处理

从零封神!Python接口自动化测试全栈落地(Requests+pytest+Allure+CI)实战班 | 学完直接扔进简历!

1.封装http接口请求

已经实现了一个简单的接口请求,接下来就要考虑封装这个请求,在后面的用例中,只需要传递参数(URL ,Params,cookie,heade,method 等)每次去调用这个请求类,

然后根据接口的请求类型来调用相应的处理,如果是get方式就调用get方法,如果是post方式就调用post方法,经过这样的设计后,测试方法中的代码结构会更加清晰有层次,也更容易维护。

代码实现:

# 导入requests包
import requestsclass HttpRequest:def http_request(self, url, params, http_method):res = ''if http_method.upper()=='POST':try:res=requests.post(url,params)print("正在进行post请求")except Exception as e:print("post请求出现了异常:{0}".format(e))elif http_method.upper()=='GET':try:res=requests.post(url,params)print("正在进行get请求")except Exception as e:print("get请求出现了异常:{0}".format(e))return resif __name__ == '__main__':url = 'http://27.154.55.14:8180/api/fcb2bcrm/webRegister'datas = {'LoginAccount': 'testapi01@emai.com', 'Password': '123456', 'Type': 'Pro'}res=HttpRequest().http_request(url, datas, 'post')print(res.json())

执行结果:

4.TestCase调用封装好的http请求,并添加异常处理。

在运行用例的时候,发现无论断言成功与否,测试报告都是全部通过,后面发现是在处理异常的时候,没有将异常抛出。

以下是test_register.py 修改后的代码:

# 导入
import unittest
import requests
from Common.http_request import HttpRequestclass TestRegister (unittest.TestCase):   # 类必须以Test开头,继承TestCaseurl = 'http://27.154.55.14:8180/api/fcb2bcrm/webRegister'def setUp(self):print("======开始执行测试用例======")def tearDown(self):print("======测试用例执行完毕======")# 测试用例 - 正常注册def test_register_normal(self):  # 每一条测试用例以test_开头# 发送请求params = {'LoginAccount': 'apitest09@emai.com', 'Password': '123456', 'Type': 'Pro'}# res = requests.post(self.url,params)res = HttpRequest().http_request(self.url,params,'post')# 断言:根据实际测试场景,可以查询数据库是否有新注册的用户、对比接口的返回信息、对比状态码等等try:self.assertEqual(200, res.status_code)print('成功测试用户:{}'.format(params['LoginAccount']))except AssertionError as e:print('Failed')raise e   # 注意一定要抛出异常# 测试用例 - 重复注册def test_register_existing(self):# 发送请求params = {'LoginAccount': 'apitest05@emai.com', 'Password': '123456', 'Type': 'Pro'}# res = requests.post(self.url,params)res = HttpRequest().http_request(self.url, params, 'post')# 断言try:self.assertIn("The email has been registered", res.json()['Message'])print("执行结果:pass:", res.json()['Message'])except AssertionError as e:print('执行结果:Failed')raise e# 测试用例 - 无效的邮箱格式去注册def test_register_invalid_email(self):# 发送请求params = {'LoginAccount': 'testapi@emai', 'Password': '123456', 'Type': 'Pro'}# res = requests.post(self.url,params)res = HttpRequest().http_request(self.url, params, 'post')# 断言try:self.assertIn("valid email", res.json()['Message'])print("执行结果:pass:", res.json()['Message'])except AssertionError as e:print('执行结果:Failed')raise e

从零封神!Python接口自动化测试全栈落地(Requests+pytest+Allure+CI)实战班 | 学完直接扔进简历!

 

http://www.dtcms.com/a/292958.html

相关文章:

  • Ubuntu 虚拟机配置 与Windows互传文件
  • react19相关问题和解答
  • 【技术新闻】OpenAI发布GPT-5,AI编程助手迎来革命性突破
  • React集成百度【BMap Draw】教程(001):实现距离测量和面积测量
  • dubbo源码分析之请求调用异步化原理
  • Pandas核心数据结构详解
  • 第3章通用的服务可用性治理手段——3.2 重试
  • Kotlin 作用域函数 let 的实现原理
  • 大疆视觉算法面试30问全景精解
  • 基于Java+MySQL实现(Web)文件共享管理系统(仿照百度文库)
  • Java自动拆箱机制
  • 云祺容灾备份系统阿里云对象存储备份与恢复实操手册
  • List<UserInfo> list = new ArrayList<>();为什么要这样创建数组?
  • 智能文本抽取在法院卷宗管理应用剖析
  • 力扣-139.单词拆分
  • Qt 网络编程如何采用Http进行通信
  • 碳化硅缺陷分类与原因
  • C++的lambda表达式原理
  • 【RK3576】【Android14】MIC开发调试
  • 【iOS】SideTable
  • [学习] 笛卡尔坐标系的任意移动与旋转详解
  • 交叉编译opencv(Cpp)于arm64架构开发板上
  • AI 音频产品开发模板及流程(二)
  • 使用python中的pymysql库,并且转化为数组元组数据
  • 【多任务YOLO】A-YOLOM
  • 字体识别实战:用Python打造智能字体侦探工具
  • for-of和for-in
  • 2025年07月22日Github流行趋势
  • Day20-二叉树基础知识
  • python flusk 监控