python+requests实现接口自动化测试
这两天一直在找直接用python做接口自动化的方法,在网上也搜了一些博客参考,今天自己动手试了一下。
一、整体结构

上图是项目的目录结构,下面主要介绍下每个目录的作用。
Common:公共方法:主要放置公共的操作的类,比如数据库sqlhelper、文件操作类等
Config:公共变量:主要放置公共变量,比如ST、UAT、生产环境的url地址、用户名密码、数据库连接
Data:数据层,有点类似三层架构中的DAL,它是数据的来源,根据数据存放的格式再细分json、xml、表单和数据库
Log:日志层:存放日志,便于跟踪调试
Page:页面层:先把整个系统划分若干子系统,每个子系统包含若干页面。这个把用户操作的页面抽象成了page对象,页面的操作抽象成方法,这样测试人员可以传递不同的测试案例进行测试,如果是面向服务的纯接口性质的,没有页面那就没必要再这样划分,这样就把接口测试转换成了python的单元测试。
Result:存放单元测试的执行结果,也可以把每次执行的结果存到数据库打点,然后做测试结果趋势分析,如果后续把项目集成到Jenkins中的话,相当于Jenkins集成python单元测试,这样的话这层也可以不需要。
Case:测试案例层,针对上面Page对应的单个方法利用测试数据和期望数据进行assert判断,这里用到的测试数据和期望数据后续可以放在Excel中,测试人员只需填充测试数据。
Run:这里用来组装成suite然后进行运行案例。
二、测试
1.安装HTMLTestRunner
把它下载下来放到python安装目录的lib目录下
2.业务逻辑层
这里模拟一些业务处理,这里做接口自动化时会使用requests库进行请求。
# -*- coding: utf-8 -*- import sys reload(sys) sys.setdefaultencoding('utf-8') import requestsdef Add(name,pwd):session=requests.session()response=session.get('http://www.baidu.com')print(response.status_code)return response.status_code==200def Edit(name,pwd):return {'name':name,'pwd':pwd}def Delete(name,pwd):return {'name':name,'pwd':pwd}def Search(name,pwd):return {'name':name,'pwd':pwd}
3.案例层
原本计划增加一个套件suite层,如果是单个接口的不加也可以,如果是多个接口进行流程测试,使用suite时案例的顺序就不会改变。如果是流程的,也可以写成case,只是里面需要多次调用业务逻辑层。
# -*- coding: utf-8 -*- import sys reload(sys) sys.setdefaultencoding('utf-8') import unittest from Root.Page import Login from Root.Page.UserManager import Index import HTMLTestRunner import time class index(unittest.TestCase):def setUp(self):print('setUp')def tearDown(self):print('tearDown')def test_add(self):arr= Login.Login('admin', '123456')flag= Index.Add(arr[0], arr[1])self.assertTrue(flag)flag= Index.Add(arr[0], arr[1])self.assertTrue(flag==False)def test_edit(self):response= Login.Login('admin', '123456')dic= Index.Edit(response[0], response[1])self.assertNotEqual(dic,{'name':'123'})def test_delete(self):response= Login.Login('admin', '123456')dic= Index.Delete(response[0], response[1])self.assertNotEqual(dic,{'name':'123'})
4.运行
这里主要考虑可能整个系统会分成不同的模块进行运行,这样也能维护上也必将方便,可以多执行机执行。这里使用的HTMLTestRunner来生成报告.
# -*- coding: utf-8 -*- import sys reload(sys) sys.setdefaultencoding('utf-8') import os import unittest from HTMLTestRunner import HTMLTestRunner from Root.Test.Case.UserManager import Index import HTMLTestRunner import time if __name__ == '__main__':# 1、构造用例集suite = unittest.TestSuite()# 2、执行顺序是安加载顺序:先执行test_sub,再执行test_addsuite.addTest(Index.index("test_add"))suite.addTest(Index.index("test_edit"))suite.addTest(Index.index("test_delete"))suite.addTest(Index.index("test_edit"))suite.addTest(Index.index("test_edit"))filename = "../../../Result/{0}Report.html".format(time.strftime("%Y%m%d%H%M%S", time.localtime()) ) # 定义个报告存放路径,支持相对路径f = file(filename, 'wb') # 结果写入HTML 文件runner = HTMLTestRunner.HTMLTestRunner(stream=f, title='测试报告', description='XXX系统接口自动化测试测试报告',verbosity=2) # 使用HTMLTestRunner配置参数,输出报告路径、报告标题、描述runner.run(suite)

三、测试案例参数化
上面的每个单元测试只能运行一个测试案例的数据,就是如何实现参数化,这样配置一下案例数据就能运行多次单元测试,这样就会方便很多。找了下python自带的单元测试框架不支持,这里使用了nose和parameterized 。
# -*- coding: utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
from nose.tools import assert_equal
from parameterized import parameterized
import HTMLTestRunner
import time
import unittest
import math@parameterized([(2, 2, 4),(2, 3, 8),(1, 9, 1),(0, 9, 0),
])
def test_pow(base, exponent, expected):assert_equal(math.pow(base, exponent), expected)class TestMathUnitTest(unittest.TestCase):@parameterized.expand([("negative", -1.5, -2.0),("integer", 1, 1.0),("large fraction", 1.6, 1),])def test_floor(self, name, input, expected):assert_equal(math.floor(input), expected) 然后cmd跳转到该python文件的目录下,输入命令,它会把该文件中test开头的案例都跑了,然后就可以看到有一个案例运行输出结果的html文件.
nosetests testRuncase.py --with-html --html-report=nose_report2_test.html 
相关文章:
python+requests实现接口自动化测试
这两天一直在找直接用python做接口自动化的方法,在网上也搜了一些博客参考,今天自己动手试了一下。 一、整体结构 上图是项目的目录结构,下面主要介绍下每个目录的作用。 Common:公共方法:主要放置公共的操作的类,比如数据库sqlhe…...
rtthread 线程
创建动态线程最简单代码 #include <rtthread.h>//包含头文件static rt_thread_t thread1 RT_NULL; //创建线程控制块指针,指向空static void thread1_entry(void *parameter)//线程入口(干什么) {rt_kprintf("do something"…...
伯恩光学再成被执行人:多次因劳动纠纷被起诉,曾冲刺港交所上市
近日,贝多财经从天眼查APP了解到,伯恩光学(深圳)有限公司(下称“伯恩光学”)因《伯恩光学(深圳)有限公司与温*燕劳动合同纠纷的案件》一事,被广东省深圳市龙岗区人民法院…...
mysql基础操作2
通配符_:一个任意字符,like ‘张_’%:任意长度的字符串,like ‘co%’,‘%co’,‘%co%’【】:括号中所指定范围内的一个字符,like ‘9W0【1-2】’【^】:不在括号中所指定范…...
指针的进阶【下篇】
文章目录📀8.指向函数指针数组的指针📀9.回调函数📀8.指向函数指针数组的指针 🌰请看代码与注释👇 int Add(int x, int y) {return x y; } int Sub(int x, int y) {return x - y; } int main() {int (*pf)(int, int…...
不同序列模型的输入和输出总结
不同序列模型的输入和输出总结 文章目录不同序列模型的输入和输出总结RNNLSTMGRURNN RNN 是迭代输出: 输入第一个 -> 输出第二个, 输入第二个 -> 输出第三个, 输出倒数第二个 -> 输出最后一个。 LSTM LSTM 也是迭代输出ÿ…...
基于神经网络补偿的主动悬架自适应控制
目录 前言 1. 1/4悬架模型 2.仿真分析 2.1仿真模型 2.2仿真结果 2.1 形① 2.2 形② 3. 总结 前言 上两篇博客我们介绍了神经网络补偿控制律的仿真测试,从仿真结果我们可以得知神经网络具有逼近扰动,并将其补偿的作用。 上两篇文章链接…...
什么是链表,如何实现?(单链表篇)
欢迎来到 Claffic 的博客 💞💞💞 “仅仅活着是不够的,还需要有阳光,自由和花的芬芳。” 前言: 在日常使用的网站和软件中,列表属于最常见的一种东西了,其实现形式有顺序表࿰…...
探针台简介
探针台,是我们半导体实验室电学性能测试的常用设备,也是各大实验室以及芯片设计、封装测试的熟客。设备具备各项优势,高性能低成本,用途广,操作方便,在不同测试环境下,测试结果稳定,…...
ABAP 辨析 标准表|排序表|哈希表
1、文档介绍 本文档将介绍内表的区别和用法,涉及标准表、排序表、哈希表 2、用法与区别 2.1、内表种类 内表顶层为任意表,任意表分为索引表和哈希表,索引表又可分为标准表和排序表,结构如图: 2.2、内表用法 2.2.1…...
MIGO 物料过账 创建物料凭证 BAPI_GOODSMVT_CREATE
文章目录1.前台操作2.需求分析2.1调用方式2.2分为两大概括:2.3业务逻辑细节图3.BAPI_GOODSMVT_CREATE4.RFC接口代码5.总结1.前台操作 SAP CO01(创建生产订单)/MIGO(发货投料)前台操作 这里面有migo的前台操作,首先了解前台操作后再去写RFC接口是比较容易理解的.!! 2.需求分析…...
项目经理处理团队冲突 5大注意事项
1、在时间、场景、体验矩阵中的5种处理方式 第一种方式:强迫命令,即职位高的一方在不考虑对方感受的情况下,强迫职位低的一方接受自己的意见。这种处理方式的适用场景为重要且紧急,这种方式团队成员的体验感低。 第二种方式&#…...
Linux(Centos)安装TDengine
目录1:简介2:前期准备3:安装4:启动5:开机自启动6:安装客户端驱动(如果别的服务器需要链接TD则需要此步操作)7:基础命令1:简介 官网: https://www.taosdata.com/简介&…...
大数据处理技术导论(6) | Datawhale组队学习46期
文章目录1. hive 概述2. hive 与传统关系型数据库的对比3. hive 数据类型4. hive 数据模型5. hive 实战5.1 创建表5.2 修改表5.3 清空表、删除表5.4 其他命令项目地址 https://github.com/datawhalechina/juicy-bigdata,感谢项目团队的付出。本次主要学习 hive 相关…...
Java——异常
目录 什么是异常 异常处理主要的5个关键字 异常的体系结构 异常语法 异常的分类 异常的处理流程 异常的处理 防御式编程 异常的抛出 throw的注意事项 异常的捕获 异常声明throws try-catch捕获处理 finally 自定义异常类 throw和throws区别 什么是异常 程序在运行时出现错…...
Netty之io.netty.util.concurrent.Promise与io.netty.util.concurrent.Future初解
目录 目标 Netty版本 Netty官方API 三者之间的关系 基本使用方法 java.util.concurrent.Future io.netty.util.concurrent.Future io.netty.util.concurrent.Promise 目标 了解io.netty.util.concurrent.Promise与io.netty.util.concurrent.Future的基本使用方法。了解…...
【正点原子FPGA连载】第二十一章AXI DMA环路测试 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Vitis开发指南
1)实验平台:正点原子MPSoC开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id692450874670 3)全套实验源码手册视频下载地址: http://www.openedv.com/thread-340252-1-1.html 第二十一章AXI D…...
手把手搭建springboot项目06-springboot整合RabbitMQ及其原理和应用场景
目录前言工作流程-灵魂画手名词解释交换机类型一、安装1.1 [RabbitMQ官网安装](https://www.rabbitmq.com/download.html)1.2 Docker安装并启动二、食用教程2.1.导入依赖2.2 添加配置2.3 代码实现2.3.1 直连(Direct)类型2.3.2 引入消息手动确认机制2.3.2…...
如何根据IP地址判断是IPv4还是IPv6
IPv4地址的书写形式为:“192.168.0.1” IPv6地址的书写形式为:“2001:DB8:85A3:8D3:1319:8A2E:370:7344” 给你一个IP地址,它有三种可能:IPv4、IPv6、既不是IPv4也不是IPv6的无效地址。所以,如果用函数ipGetAddressAsNumber,只能判断是不是ipv4,编写如下函数: int R…...
山地车和公路车怎么选
公路车: 只能适应平坦的路面,骑行阻力小,速度快比较适合新手 山地车: 能适应所有路面,更注重操控性和舒适性 怎么选? 1、先决定用途 旅游:旅行车、山地车、 通勤:公路车 2、预…...
保姆级教程:在Windows上用CMake+QT给CloudCompare 2.13.x添加一个Standard插件(附OpenCV配置)
从零构建CloudCompare插件:Windows平台CMakeQT全流程实战指南 在三维点云处理领域,CloudCompare凭借其开源特性和丰富的插件生态,已成为研究人员和工程师的首选工具之一。但对于刚接触插件开发的初学者而言,从环境配置到成功编译第…...
DanKoe 视频笔记:生产力提升:专注工作的力量 [特殊字符]
在本节课中,我们将要学习如何通过每天仅 4 小时的专注工作,来显著改变你的生活轨迹。我们将探讨注意力的价值、识别高回报机会的方法,并掌握一套进入并保持深度专注状态的实用技巧。 能够有意识地引导你的注意力,不仅能节省时间&a…...
Go语言HTTP服务开发:从标准库到框架
Go语言HTTP服务开发:从标准库到框架 作为一个写了十几年代码的Go后端老兵,我在HTTP服务开发上踩过不少坑。今天就来分享一下Go语言HTTP服务开发的实践经验,从标准库到框架。 一、标准库net/http 1. 基本用法 package mainimport ("fmt&q…...
2025年—ComfyUI面部与手部修复实战指南:从插件选择到模型优化
1. ComfyUI面部修复插件深度对比 在AI绘画领域,面部修复一直是让新手头疼的问题。相比WebUI的一键式ADetailer插件,ComfyUI需要更手动化的操作流程,但这反而让我们能更深入理解AI修复的底层逻辑。2025年最新版的ComfyUI中,有两个插…...
Mind+连接百度AI实战:手把手教你做一个能听会说的垃圾分类小助手
Mind与百度AI融合实战:打造智能垃圾分类助手的完整指南 在创客教育和STEAM领域,将硬件编程与人工智能结合已成为培养学生综合能力的新趋势。Mind作为一款图形化编程工具,以其低门槛和丰富的扩展库深受教育者和爱好者青睐。而百度AI开放平台提…...
nli-distilroberta-base企业实操:政务问答系统中立性与矛盾识别模块
nli-distilroberta-base企业实操:政务问答系统中立性与矛盾识别模块 1. 项目概述 在政务问答系统开发中,准确判断用户提问与政策条文之间的关系至关重要。nli-distilroberta-base是基于DistilRoBERTa模型的自然语言推理(NLI)服务,专门用于分…...
AWS Lambda性能调优终极指南:如何通过内存配置平衡成本与执行速度
AWS Lambda性能调优终极指南:如何通过内存配置平衡成本与执行速度 【免费下载链接】aws-lambda-power-tuning AWS Lambda Power Tuning is an open-source tool that can help you visualize and fine-tune the memory/power configuration of Lambda functions. It…...
MiniCPM-V-2_6在Android应用开发中的实战:移动端AI集成指南
MiniCPM-V-2_6在Android应用开发中的实战:移动端AI集成指南 最近在捣鼓一个智能相册应用,想让它能自动识别照片里的内容,比如是猫是狗、是风景还是美食,然后智能分类。一开始想用云端的AI服务,但转念一想,…...
无需复杂配置:Ollama一键运行EmbeddingGemma-300m嵌入模型教程
无需复杂配置:Ollama一键运行EmbeddingGemma-300m嵌入模型教程 1. 为什么选择EmbeddingGemma-300m 在当今AI应用蓬勃发展的时代,文本嵌入技术已成为构建智能系统的核心组件。然而,大多数嵌入模型要么体积庞大难以部署,要么性能不…...
RAPIDMP3嵌入式音频模块:UART控制的高保真MP3/WAV协处理器
1. RAPIDMP3 模块深度技术解析:面向嵌入式系统的高保真音频处理方案1.1 模块定位与工程价值RAPIDMP3(即 RAPID_MP3_V1)并非通用音频解码库,而是一款硬件级立体声 MP3 播放与 WAV 录音模块,其核心价值在于将复杂的音频编…...
