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

2023Python接口自动化测试实战教程,附视频实战讲解

这两天一直在找直接用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

 大家也可以看看这个视频学接口自动化测试,只能说超级详细了,

B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)

相关文章:

2023Python接口自动化测试实战教程,附视频实战讲解

这两天一直在找直接用python做接口自动化的方法,在网上也搜了一些博客参考,今天自己动手试了一下。 一、整体结构 上图是项目的目录结构,下面主要介绍下每个目录的作用。 Common:公共方法:主要放置公共的操作的类,比如数据库sql…...

【原创】java+swing+sqlserver药品管理系统设计与实现

之前数据库都是用的mysql,今天我们使用sqlserver在配合swing来开发一个药品管理系统。方便医院工作人员进行药品的管理,基础功能基本都是一些增删改查操作。 功能分析: 药品管理系统主要提供给管理员和员工使用,功能如下&#x…...

软考高级信息系统项目管理师系列之二十七:信息文档管理与配置管理

软考高级信息系统项目管理师系列之二十七:信息文档管理与配置管理 一、信息文档管理与配置管理内容整理二、信息系统文档管理1.信息系统文档概念2.软件文档分类与质量等级三、配置管理1.配置管理2.典型配置项3.配置项4.配置项操作权限5.配置项状态6.配置项版本号7.配置项版本管…...

软考高级-信息系统管理师之项目管理基础(最新版)

项目管理基础 项目管理特点战略管理三个过程IT项目特点项目管理概念项目管理特点软技能PRINCE2的四个要素组织结构职能型组织优缺点职能型组织优点同时,职能型组织也存在着如下缺点:项目型组织优缺点项目型组织优点项目型组织也存在着如下缺点:矩阵型组织优缺点矩阵型组织的优…...

leetcode240+Search a 2D Matrix II+从右上角开始

链接 class Solution { public:bool searchMatrix(vector<vector<int>>& matrix, int target) {if(matrix.size()0 || matrix[0].size()0) return false;int i0, jmatrix[0].size()-1; //从右上角开始while (i<matrix.size()&&j>0) {int x mat…...

0xL4ugh 2023

这回跟着个队伍跑&#xff0c;不过还是2X以后的成绩&#xff0c;前边太卷了。自己会的部分&#xff0c;有些是别人已经提交了的。记录一下。Cryptocrypto 1给了一些数据&#xff0c;像这样就没有别的了ct [0, 1, 1, 2, 5, 10, 20, 40, 79, 159, 317, 635, 1269, 2538, 5077, 1…...

Mybatis(4)之跟着老杜做一个简单的银行转账会话

这是个MVC项目&#xff0c;我不一定可以完整的实现这个项目&#xff0c;但力求把这个复现出来&#xff0c;尽量的复现细节。 第一步&#xff1a;创建数据库 表 创建表如下&#xff1a; 我们使用 int 是为了方便 然后采用 demcial&#xff0c;精确度较高 添加两个用户 然后…...

VBA提高篇_ 22 事件处理

文章目录1.事件编程2.常用工作簿事件名称与对应处理过程名称示例3. 事件编程的步骤4&#xff0e;工作簿事件4.1 Open4.2 BeforeClose4.3 NewSheet5&#xff0e;工作表事件6&#xff0e;变量和过程函数的作用域1.事件编程 写在事件发生地(对应工作簿或工作表) 2.常用工作簿事…...

【蓝桥杯集训·周赛】AcWing 第91场周赛

文章目录第一题 AcWing 4861. 构造数列一、题目1、原题链接2、题目描述二、解题报告1、思路分析2、时间复杂度3、代码详解第二题 AcWing 4862. 浇花一、题目1、原题链接2、题目描述二、解题报告1、思路分析2、时间复杂度3、代码详解第三题 AcWing 4861. 构造数列一、题目1、原题…...

【人工智能AI】三、NoSQL 实战《NoSQL 企业级基础入门与进阶实战》

帮我写一篇介绍NoSQL的技术文章&#xff0c;文章标题是《NoSQL 实战》&#xff0c;不少于3000字。这篇文章的目录是 3.NoSQL 实战 3.1 MongoDB 入门 3.1.1 MongoDB 基本概念 3.1.2 MongoDB 安装与配置 3.1.3 MongoDB 数据库操作 3.2 Redis 入门 3.2.1 Redis 基本概念 3.2.2 Red…...

platform 总线

驱动的分离与分层思想 分离&#xff1a;硬件信息分离&#xff1b; 在编写硬件驱动的时候&#xff0c;需要操作许多硬件寄存器。比如gpio 驱动&#xff0c;你需要知道gpio控制器 寄存器的地址&#xff0c;你想要哪个gpio输出&#xff1f;或是输入? 这些操作最终都是靠设置寄存…...

2023第10届生物发酵展3月30-4月1号山东济南开展,参观路线来了

2023第10届生物发酵展3月30-4月1号山东济南开展&#xff0c;参观路线来了&#xff01;展会时间&#xff1a;2023年3月30日-4月1日展馆地址&#xff1a;山东国际会展中心&#xff08;济南市槐荫区日照路1号&#xff09;展馆&#xff1a;4号馆、5号馆BIO CHINA生物发酵展&#xf…...

RK356x U-Boot研究所(命令篇)3.6 fdt命令的用法

平台U-Boot 版本Linux SDK 版本RK356x2017.09v1.2.3文章目录 一、fdt命令的配置二、fdt命令的定义三、fdt命令的用法3.1 fdt list3.2 fdt rm3.3 fdt set一、fdt命令的配置 .config配置文件需要有以下配置: rk3568_defconfig默认已使能。 二、fdt命令的定义 usb命令定义在cm…...

2023年社工工资多少钱一月 能领多少补贴

2023年社会工作者人员的待遇还算可以&#xff0c;每月的全额工资一共5000多&#xff0c;扣完五险一金以后每月的到手工资一共4000多&#xff0c;不同地区薪资也是不同的&#xff0c;一线城市会在7千元以上&#xff0c;还可以领取几百到几千元不等的补贴。 12023年社工工资多少钱…...

面试攻略,Java 基础面试 100 问(十一)

抽象类&#xff08;abstract class&#xff09;和接口&#xff08;interface&#xff09;有什么异同? 抽象类和接口都不能够实例化&#xff0c;但可以定义抽象类和接口类型的引用。一个类如果继承了某个抽象类或者实现了某个接口都需要对其中的抽象方法全部进行实现&#xff…...

接口测试(Fiddler工具)

目录 1.Fiddler是什么&#xff1f; 2.Fiddler的原理 3.Fiddler安装 4.Fiddler界面 4.1.常用工具 4.2 会话列表 4.3 状态栏 4.4 内容显示区 1.Fiddler是什么&#xff1f; Fiddler是客户端与服务器之间的HTTP代理&#xff0c;是当前最常用的HTTP协议抓包工具。 主要功能&a…...

Debian/Ubuntu 安装和使用 perf 调试工具

为操作系统安装基本依赖环境&#xff1a;apt-get update -y apt-get upgrade -y apt-get install lrzsz zip unzip libkrb5-dev libicu-dev screen iftop openssl libssl-dev libunwind8 iftop net-tools gcc gdb cmake curl wget -y apt-get install gcc gdb cmake python-dev…...

【Python语言基础】——Python NumPy 数组连接

Python语言基础——Python NumPy 数组连接 文章目录 Python语言基础——Python NumPy 数组连接一、Python NumPy 数组连接一、Python NumPy 数组连接 连接 NumPy 数组 连接意味着将两个或多个数组的内容放在单个数组中。 在 SQL 中,我们基于键来连接表,而在 NumPy 中,我们按…...

解决IDEA报错:无效的目标发行版: 17

解决IDEA报错&#xff1a;无效的目标发行版: 17 目录解决IDEA报错&#xff1a;无效的目标发行版: 17报错由来解决报错【1】检查setting设置&#xff0c;查看编译器编译模块的编译版本是否是你需要的【2】尝试去修改当前项目的启动设置&#xff0c;设置JRE为你需要的版本。【3】…...

Redis第四讲

目录 四、Redis04 4.1 Redis集群应用场景 4.2 集群 4.2.1 基本原理 4.2.2 主从复制的作用 4.3 配置集群&#xff08;一台虚拟机&#xff09; 4.3.1 规划网络 4.3.2 创建节点 4.3.3 创建目录 4.3.4 配置redis7001.conf 4.3.5 配置其余文件 4.3.6 后台启动redis 4.3…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架&#xff0c;支持"一次开发&#xff0c;多端部署"&#xff0c;可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务&#xff0c;为旅游应用带来&#xf…...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

聊一聊接口测试的意义有哪些?

目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开&#xff0c;首…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI&#xff08;https://spring.io/projects/spring-ai&#xff09;作为Spring生态中的AI集成框架&#xff0c;其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似&#xff0c;但特别为多语…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在 GPU 上对图像执行 均值漂移滤波&#xff08;Mean Shift Filtering&#xff09;&#xff0c;用于图像分割或平滑处理。 该函数将输入图像中的…...

用机器学习破解新能源领域的“弃风”难题

音乐发烧友深有体会&#xff0c;玩音乐的本质就是玩电网。火电声音偏暖&#xff0c;水电偏冷&#xff0c;风电偏空旷。至于太阳能发的电&#xff0c;则略显朦胧和单薄。 不知你是否有感觉&#xff0c;近两年家里的音响声音越来越冷&#xff0c;听起来越来越单薄&#xff1f; —…...