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

测试学习之——Pytest Day5

一、接口测试用例

1、设计用例内容

  1. 名字
  2. 标记(可选)
  3. 步骤:
  • 请求接口: GET https://www.baidu.com
  • 响应断言; status_code == 200
  • 提取变量: json()['code']

2、YAML表示用例

name: 登录成功的用例
steps:- request:method: POSTurl:  http://127.0.0.1:5000/loginparams:json:{"username":"admin","password":"admin123"}- response:status_code: 200json:code: 0msg: 登录成功data:login_time:username: admin- extract:token: [json,$.data.token]

二、封装接口自动化框架

1、请求接口

外部工具请求接口:requests

HTTP协议抓包,请求组成由三部分组成:

  • 行:方法+地址(必填)
  • 头:请求头(键值对)
  • 体:参数内容
import requests
### 1、方法
url = "http://127.0.0.1:5000/login"
#GET方法
requests.get(url)
#POST方法
requests.post(url)
#任意方法
requests.requests(''MOV',url)

头:

import requests
###2、头
url = "http://127.0.0.1:5000/login"
method = "POST"def test_login():r = requests.request(method,url,headers={#字符串字典"1":"a","2":"b"}
)print(r.status_code)print(r.text)

参数:

import requestsurl = "http://127.0.0.1:5000/login"
method = "POST"requests.requests(method,url,json ={"a":1,"b":[1,2,3],"c":{}}
)

2、断言响应

  1. 响应包含什么
  • 行:状态码
  • 头:响应头(键值对)
  • 体:响应内容
  1. 响应如何断言
import requests
#断言全部内容 
from responses_validator import  validator### 1、方法
url = "http://127.0.0.1:5000/login"json = {"username": "admin","password": "admin123"
}
method = "POST"def test_login():r = requests.request(method,url,json = json)# 断言单个内容是否正确assert r.status_code == 200assert 'admin' in r.textassert r.json()['data']["username"]=="admin"#断言全部内容validator(r,status_code=200,text='*admin*',json={"data": {"username": "admin"}})print(r.status_code)print(r.text)print(r.headers)print(r.json())

3、变量提取

基本原则:

  • JSON:JSONPATH
  • HTML:XPATH
  • 字符串:RE(兜底)
import jsonpathdef extract(resp,name,exp):try:resp.json = resp.json()except:resp.json = {}attr = getattr(resp, name)res = jsonpath.jsonpath(attr,exp)return res
from extract_utils import extractvar = extract(r,'json','$..username')print(var)

4、框架落地封装

import requests
import responses_validator
from commons.extract_utils import extractimport logginglogger = logging.getLogger("hejie")
def runner(k,v,my_var):match k:case 'requests':logger.info('1.正在发送请求。。。')logger.info(f'{v}')my_var['resp']  = requests.request(**v)#字典使用 **case 'response':logger.info('2.正在验证响应。。。')logger.info(f'{v}')responses_validator.validator(my_var['resp'] ,**v)case 'extract':logger.info('3.正在提取变量。。。')for var_name,var_exp in v.items():value =  extract(my_var['resp'] ,*var_exp) #列表使用 *logger.info(f'{var_name} = {value}')
import allurefrom commons.extract_utils import extractfrom commons.runner_utils import runnerdef test_yaml():my_var = {}data = extract("/Users/user/python/tmp_1112/tests/test_api_1.yaml")allure.title(data['name'])for step in data['steps']:for k ,v in step.items():runner(k,v,my_var)
import pytest
import  ospytest.main()#执行命令
os.system("allure generate ./allure-results -o ./allure-report --clean")
name: 登录成功的用例
steps:- request:method: POSTurl:  http://127.0.0.1:5000/loginparams:json:{"username":"admin","password":"admin123"}- response:status_code: 200json:code: 0msg: 登录成功data:login_time:username: admin- extract:token: [json,$.data.token]
[pytest]addopts = --alluredir=./allure-results --clean-alluredir -m web  --driver chrome -vsmarkers =
api:接口测试
web:UI测试
ut:单元测试
login:登录相关
pay:支付相关
ddt:数据驱动测试log_file= ./logs/pytest.log
log_file_level= info
log_file_format= %(levelname)-8s %(asctime)s [%(name)s:%(lineno)s] : %(message)s
log_file_date_format= %Y-%m-%d %H:%M:%S
;记录用例执行结果
result_log_enable=1
;记录用例分割线
result_log_separator=1
;分割线等级
result_log_level_separator= warning
;异常信息等级
result_log_level_verbose= info

http://www.lryc.cn/news/598258.html

相关文章:

  • Java泛型初始化ArrayList<String>()和ArrayList<>()的区别
  • 【C++】简单学——list类
  • HTTP和HTTPS复习
  • Ethereum: 从零到一为DApp开发搭建专属的私有测试网络
  • USRP X440
  • LeetCode 10:正则表达式匹配
  • Python:开启机器学习的魔法之门
  • 无源域自适应综合研究【2】
  • Android Telephony UrspRule 介绍
  • EVAL长度限制突破方法
  • C#_定时器_解析
  • Flink-1.19.0源码详解7-Flink集群端调度
  • ubuntu安装teams解决方法
  • 大模型回复数据标注优化方案
  • 系统架构师:系统安全与分析-思维导图
  • AIRIOT智慧选煤厂管理解决方案
  • 家政小程序系统开发:开启智慧家政新时代
  • Nginx 信创版本源码升级 1.22.1 升级到1.28.0
  • SSE与Websocket有什么区别?
  • uniapp nvue开发App 横竖屏切换丢失上下文导致 setTimeout和clearTimeout报错
  • 全面解析 CSS Flex 布局:从入门到精通的所有属性详解
  • 深入掌握CSS Grid布局:每个属性详解与实战示例
  • k8s通过NUMA亲和分配GPU和VF接口
  • DeepSeek-R1+豆包迭代一次完成中国象棋游戏
  • 二、计算机网络技术——第6章:应用层
  • rk3588开发板使用硬件编码处理视频
  • 国产数据库拐点已至:电科金仓用“融合+AI”重新定义下一代数据底座
  • C++ 23种设计模式-工厂模式
  • (实用攻略)Linux操作系统(一)
  • 输电线路微气象在线监测装置:保障电网安全的科技屏障