python 接口自动化测试

2023-05-16

python 接口自动化测试

  • request
    • requests.post() data和json 的区别
    • 文件上传
    • 带cookie测试
    • 同一个session中完成多个请求测试
  • pytest
    • 命令行
    • 配置文件
    • Pytest前后置条件
    • 生成allure报告
    • 数据驱动的测试
  • postman
    • 接口关联
    • 环境切换
    • 动态传参
    • 业务闭环(增删改查)
    • 断言
      • 状态断言
      • 业务断言
    • 文件上传
    • 批量测试
      • 文件上传批量测试接口报错
    • 数据驱动测试
    • 带请求头的测试
    • Cookie 鉴权测试
    • postman 的 Mock Server服务器
    • 接口测试加密解密
  • Newman
  • RobotFrameWork
    • 自定义关键字
    • 常用库

课程地址

request

requests.post() data和json 的区别

postdata = {'jobId': '1',
            'jobType': 'predict',
            'targetClass': 'vm',
            'targetId': 123}
requests.post('http://127.0.0.1:5000/api/getPredictInfo', json=postdata,
                          headers={'Content-Type': 'application/json'})
或者
requests.post('http://127.0.0.1:5000/api/getPredictInfo', data=json.dunps(postdata))    

data传参表示表单传参:默认的请求头是Content-Type:application/x-www-formurlencoded,请求参数的格式:(k1=v1&k2=v2),参数是纯键值对的dict.,如:
{key1:value1,key2:value2}
data传参表示文本传参:默认的请求头:text/plain。参数:str类型
json传参表示json传参:默认的请求头:application/json,参数是dict类型
json是包括有键值对和列表的Dict类型

文件上传

postdata = {'midea':open('./test.jpg',"rb")}
requests.post('http://127.0.0.1:5000/api/getPredictInfo', files=postdata)

带cookie测试

rep= requests.get()
通过get请求获取到登陆的token,然后登陆测试
headers = {"Accept":"aplication/json,text/javascript,*/*;q=0.01",
			"X-Requested-With":"XMLHttpRequest"}
rep = requests.post(url,data=data,headers=headers,cookies=rep.cookies)

同一个session中完成多个请求测试

可以将上面的requests.postrequests.get等换成

requests.session().request("post",xxx)
requests.session().request("get",xxx)

这样统一接口,requests.post都是调用的requests.request()

pytest

1.模块名必须以test_或_test开头
2.测试类必须以Test开头,并且不能有init方法
3.测试方法必须以test_开头
4.Pytest有很多的强大的插件。pip install 安装

pytest-html 生成简易报告
pytest-xdist 多线程
pytest-orderding 控制测试用例的执行顺序
pytest-rerunfailures 失败用例重跑
pytest-base-url 基础路径的配置
allure-pytest 生成allure报告

命令行

pytest -vs
pytest -k “add” 执行所有测试用例名中含有“add”的用例
pytest - s 打印测试用例中print语句
pytest -v 增加打印细节
pytest - x 一旦发现失败用例,停止运行
pytest -maxfail=2 当测试遇到两条失败,立刻停止运行
pytest -m “标签名” 给测试用例加标签
pytest -n 多线程(需要安装pytest-xdist)
pytest --reruns=2 失败用例重跑2次
pytest --html='./report.html' 生成简易报告

配置文件

注意:
1.不管是命令行方式还是主函数的方式都会自动的读取这个配置文件
2.pytest.ini文件可以改变pytest默认的测试用例的规则
3.这个文件一般是放在项目的根目录下

[pytest]
#配置参数
addopts = ‐vs
#配置测试用例文件夹
testpaths = ./testcases
#配置测试模块的规则
python_files = test_*.py
#配置测试类的规则
python_classes = Test*
#配置测试方法的规则
python_functions = test_*
#配置接口测试的基础路径
base_url = http://127.0.0.1/
#给用例分组
markers =
smoke:冒烟测试
usermanage:用户管理

冒烟和用户管理要在用例上面加上装饰器:

@pytest.mark.smoke
@pytest.mark.usermanage

在执行时需要使用:

-m 分组名 or 分组名

Pytest用例执行顺序默认:是从上到下的顺序
可以通过如下标记改变测试用例的执行顺序@pytest.mark.run(order=1)

Pytest前后置条件

在所有类,所有用例之前或之后

def setup_class(self):
	print("在类之前的操作")
	
def teardown_class(self):
	print("在类之后的操作")
	
def setup(self):
	print("在所有用例之前的前置操作")

def teardown(self):
	print("在所有用例之后的后置操作")

希望在部分用例之前或之后执行。使用Fixture
Fixture装饰器完整结构如下:

@pytest.fixture(scope="作用域",autouser="自动执行",params="数据驱
动",ids="参数别名",name="fixture别名")

scope:标记fixture的作用域

  • function:函数级别(可以手动,也可以自动)
  • class:类级别(一般是自动)
  • module:模块级别(一般是自动)
  • package/session:会话级别(一般是自动):明天封装框架用法。

autouser=True 自动执行
params数据驱动
name表示fixture的别名,当使用了name起别名之后,那么原来的fixture的名称就失效了。

部分前置的用例,测试用例直接把前置函数的函数名传入

import pytest

# 部分测试用例前置
@pytest.fixture()
def conn_database():
    print("连接数据")
    yield
    print("关闭")


class TestALL:

    def test_A(self):
        print("test A")

    def test_B(self,conn_database):
        print("test B")

    def test_C(self):
        print("test C")

if __name__ == '__main__':
    pytest.main(['-vs'])

优化
一般情况下fixture会和conftest.py文件一起使用。

conftest.py是专门用于存放fixture的,是固定名称
conftest.py文件的方法使用时不需要导包
conftest.py文件可以有多个

将上面的conn_database函数放入新建的conftest.py文件中

@pytest.fixture(scope="session",autouse=True)
def claer_yaml():
    YamlUtil().clear_yaml()

claer_yaml函数自动执行,不需要当作参数传入

生成allure报告

1,下载安装
2,pip install allure-pytest
3,addopts = ‐vs --allurdir ./temp # 生成的json 文件的保存路径
4,通过json 生成报告os.system("allure generate temp -o report") 生成到report目录中

数据驱动的测试

import pytest
class TestApi:
    @pytest.mark.parametrize("args",["a","b","c"])
    def test_api(self,args):
        print(args)

if __name__ == '__main__':
    pytest.main(['test_2.py'])

postman

接口关联

在这里插入图片描述
其他接口需要用到上面接口的返回值,如下操作
在这里插入图片描述

环境切换

在这里插入图片描述
在这里插入图片描述

动态传参

{{$timestamp}} 生成当前时间的时间戳
{{$randomInt}} 生成0-1000之间的随机数(很少用)
{{$guid}} 生成速记GUID字符串

自定义动态参数
在这里插入图片描述
请求的时候通过{{time}} 引用
在这里插入图片描述

业务闭环(增删改查)

利用全局变量,然后删改查直接引用全局变量
在这里插入图片描述

断言

Pre-request-Script模块中
在这里插入图片描述

状态断言

在这里插入图片描述

业务断言

在这里插入图片描述

在tests页签里面不能通过{{}}方式获取全局变量,只能通过以下方式获取
在这里插入图片描述
在这里插入图片描述
完全相同的断言,可以作为全局断言,不用在每个脚本中重复
在这里插入图片描述
在这里插入图片描述

文件上传

在这里插入图片描述

批量测试

一次测试多个脚本
在这里插入图片描述
在这里插入图片描述

文件上传批量测试接口报错

postman软件更改设置
Settings->General->Location
1,打开 Allow reading files outside working drectory
2,把要上传测试的文件复制到默认目录下(postman会在默认目录下读取文件)

数据驱动测试

一般CSV或者JSON文件
在这里插入图片描述
批量测试的时候,遇到返回的结果一样,可能是之前Params中参数值写死了,需要改成按照变量获取
在这里插入图片描述
取文件中变量的值,采用data.变量名不是之前的global.

带请求头的测试

需要用到抓包工具Telerik Fiddler

在这里插入图片描述
复制到Headers 中,删除掉一些地址,不必要的信息

Cookie 鉴权测试

Cookie是一小段的文本信息,在客户端第一次请求服务端的时候生成
第一次请求时在请求头没有Cookie 的,在响应头set-cookie生成Cookie并返回传给客户端,以后请求的时候会在请求头中带上Cookie

postman 会自动保存Cookie

postman 的 Mock Server服务器

使用场景:前后端分离,后端接口没有完成,但是前端已经完成,前端的业务流程依赖于后端的接口

在这里插入图片描述
相当于可以自己创建一个后端接口,用来测试前端,可以自定义返回信息

接口测试加密解密

加密解密测试网站
Pre-Script-Request 中写代码加密文档之后设置成全局变量测试

Newman

到处postman 中的测试用例,全局变量,环境变量,数据文件
在这里插入图片描述
NewMan安装

newman run 接口脚本.json -e 环境变量.json -r html --reporter-html-export test.html

参数详解

RobotFrameWork

安装 Robot Framework

pip install robotframework

安装GUI界面

pip install –i https://pypi.douban.com/simple robotframework-ride

自定义关键字

在这里插入图片描述
在这里插入图片描述
右键新建的文件
在这里插入图片描述
刚创建的还不能被使用,必须在套件中导入资源文件
在这里插入图片描述

常用库

扩展库
1)web自动化库–Selenium

pip install –i https://pypi.douban.com/simple robotframework- seleniumlibrary

2)api自动化库–requests

pip install -i https://pypi.python.org/pypi/robotframework-requests

3)app自动胡库

pip install robotframework-AppiumLibrary 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python 接口自动化测试 的相关文章

随机推荐

  • FreeRTOS学习 任务调度

    任务调度 任务调度实现在多个任务之间轮流使用CPU xff0c 他的主要工作分为三个阶段 xff1a 保存当前任务上下文到任务栈选择新任务恢复新任务的上下文 这三个步骤需要在中断服务函数中执行 xff0c 所以要求执行的速度要快 xff0c
  • FreeRTOS学习 信号量

    信号量 FreeRTOS 学习仓库 xff1a https gitee com killerp free rtos study 在深入理解了消息队列后 xff0c 信号量也就很容易学习了 因为信号量就是使用消息队列实现的 信号量是特殊的消息
  • Java-CSS基础选择器

    标签选择器 HTML标签作为标签选择器的名称 p为标签选择器 p 属性 font size 20px 声明 值 类选择器 lt 标签名 class 61 34 类名称 34 gt 标签内容 lt 标签名 gt class为类名称 xff1b
  • Java-CSS层次选择器

    层次选择器 后代选择器 选择器 xff1a E F xff08 两个选择器之间必须要以空格隔开 xff09 功能 xff1a 选择匹配的F元素 xff0c 且匹配的F元素被包含在匹配的E元素内 lt p gt 1 lt p gt lt p
  • arm-linux-gcc踩坑1

    嵌入式实验要用到交叉编译arm linux gcc xff0c 其中遇到一些问题 xff0c 记录如下 1 安装交叉编译器并更新环境 xff1a export PATH 61 PATH usr local arm 4 6 2 bin gcc
  • python实现基本算法之归并排序(Merge sort)

    基本算法之归并排序 Merge sort 基本算法 04 归并排序 Merge sort 算法 往期请看选择排序 xff0c 插入排序 xff0c 归并排序 xff0c 快速排序等等都发布的 xff01 欢迎大家批评指正 xff01 文章目
  • Linux学习笔记——第一章 Linux是什么如何学习

    前言 鸟叔的Linux私房菜第四版 学习笔记 1 Linux是什么 1 1 Linux是什么 Linux是一套操作系统 xff0c 就像Windows一样 操作系统会有效率的控制计算机硬件的资源分配 xff0c 并提供计算机运作所需要的功能
  • MaxWell的使用

    Maxwell的使用 1 Maxwell的概述 1 1 官网简介 This is Maxwell s daemon an application that reads MySQL binlogs and writes row updates
  • 对图像维度进行调整(升降维和调整顺序)

    图片路径 xff1a img path span class token operator 61 span span class token punctuation span span class token operator span d
  • 题目 3:逆函数随机采样

    题目 3 xff1a 随机采样 小透明 任务定义 已知 LaplaceX 随机变量X xff0c 它的均值为 0 xff0c 方差为 1 通过一个均匀分布的随机抽样 xff0c 实现对x p x 的抽样 xff0c 并得到对应的 100 个
  • VMware虚拟机如何为GPU直通启用

    查阅了很多资料是 目前的我的电脑显卡不支持 xff0c 基本上N卡的好多常用卡都不支持 具体可以查看以下内容 https www dell com support article zh hk sln288103 E5 A6 82 E4 BD
  • PX4 docker gazebo 安装踩坑记

    本来想在Linux上自己一步步搭建 px4的仿真gazebo程序的 xff0c 查了资料发现docker已经打包好了 xff0c 就直接找到这个目录 xff0c 跟着一步一步的安装 PX4 docker 但是在安装的过程中 xff0c 有一
  • 关于paddlepaddle使用推理模式时CUDA error:out of memory错误的解决办法

    在paddlepaddle的export py导出的模型 xff08 也就是生成 model params deploy yaml三个文件 xff09 xff0c 运行时报错Out of memory error on GPU 0 Cann
  • k8s学习(2)- 虚拟机搭建搭建Kubernetes集群(1.24.2)

    虚拟机搭建搭建Kubernetes集群 环境规划 虚拟机搭建配置网络解决和主机复制粘贴的问题使用MobaXterm连接虚拟机安装vmware tools xff08 建议使用MobaXterm xff09 配置yum源关闭防火墙关闭Swap
  • [enforce fail at inline_container.cc:145] . PytorchStreamReader failed reading zip archive: failed f

    weights span class token operator 61 span span class token string 39 yolov5s pt 39 span ckpt span class token operator 6
  • AX210 PCIE网卡 安装记录(linux)

    AX210 PCIE网卡 安装记录 win11 安装安装之前安装之后 Linux 安装 装了 win11 和 Ubuntu 双系统 xff0c 需要分别安装 win11 安装 安装之前 家里500M宽带 安装之后 卖家发的驱动装上没反应 自
  • 区块链学习(3)

    区块链学习 xff08 3 xff09 以太坊账户交易的数据结构交易中的nonce交易中的gasgas的计算交易的 value 和 data特殊交易 xff1a 创建 xff08 部署 xff09 合约 以太坊账户 外部账户 xff08 e
  • 社区公众号的解决方案

    用户一 xff1a BEABA纸尿裤小喵 粉丝圈的搭建其实还是挺方便的 xff0c 是立足于微信环境下的微论坛形式 xff0c 可以配合微信公众号或者群来使用 搭建的话 xff0c 客服会有指导后台操作也不算难 xff0c 摸索几次就学会了
  • 比较Dask,Ray,Modin,Vaex和RAPIDS

    看到了一篇文章 xff0c 在这儿记录一下 Modin xff0c Ray作为后端 通过安装这些 xff0c 您可能会看到仅更改一行 xff08 import pandas as pd 到 import modin pandas as pd
  • python 接口自动化测试

    python 接口自动化测试 requestrequests post data和json 的区别文件上传带cookie测试同一个session中完成多个请求测试 pytest命令行配置文件Pytest前后置条件生成allure报告数据驱动