当前位置: 首页 > 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.dtcms.com/a/296404.html

相关文章:

  • 关闭 Chrome 浏览器后,自动删除浏览历史记录
  • 3.7 综合挑战项目
  • C语言(长期更新)第5讲:数组练习(三)
  • 跑步有氧训练
  • MegaTTS3 使用
  • Elasticsearch 的聚合(Aggregations)操作详解
  • Mysql窗口函数
  • 数据库垂直拆分和水平拆分
  • 面经 - 车载多媒体系统
  • 【已解决】YOLO11模型转wts时报错:PytorchStreamReader failed reading zip archive
  • PyTorch数据选取与索引详解:从入门到高效实践
  • es 和 lucene 的区别
  • 【REACT18.x】CRA+TS+ANTD5.X实现useImperativeHandle让父组件修改子组件的数据
  • R study notes[1]
  • linux入门 相关linux系统操作命令(二)--文件管理系统 ubuntu22.04
  • 二分查找-153-寻找旋转排序数组中的最小值-力扣(LeetCode)
  • unordered_map和unordered_set特性以及解决哈希冲突
  • Gemini拿下IMO2025金牌的提示词解析
  • Redis Lua脚本语法详解
  • Redis ①⑦-分布式锁
  • 跨模态理解的基石:非文本内容向量化方法全景解析
  • Lua协同程序(coroutine)
  • leetcode100.相同的树(递归练习题)
  • Xilinx-FPGA-PCIe-XDMA 驱动内核兼容性问题修复方案
  • 基于单片机睡眠质量/睡眠枕头设计
  • 1.1.2 建筑构造要求
  • 无人机正摄影像自动识别与矢量提取系统
  • 用phpEnv安装Thinkphp8.x出错调试全过程记录
  • C++ 中打开文件的多种方式及相关流类
  • matplotlib的详细知识点