接口自动化复习第四天利用正则和faker提取替换变量值
在做接口自动化测试的时候,我们经常会遇到,有些字段利用随机生成数据就行了,不需要自己去构造测试数据。今天我就是要python中的第三方库faker来构造随机数,其次使用正则表达式来提取变量。
首先在接口数据中构造变量名,像postman和apifox都是使用{{变量名}},这里我使用的是#变量名#
接口数据如下:
{ "prodName": "py59#random_str#", "brief": "", "video": "", "prodNameEn": "py59#random_str#", "prodNameCn": "py59#random_str#", "contentEn": "", "contentCn": "<p><img src="http://img30.360buyimg.com/popWareDetail/jfs/t1/93610/13/36623/126712/63f833c0Fdb5a886c/45aa553e45c8e01a.jpg.avif" alt="" /></p>", "briefEn": "", "briefCn": "py59给力", "pic": "#pic#", "imgs": "#pic#", "preSellStatus": 0, "preSellTime": null, "categoryId": 329, "skuList": [{ "price": 66, "oriPrice": 100, "stocks": 100, "skuScore": 1, "properties": "", "skuName": "", "prodName": "", "weight": 0, "volume": 0, "status": 1, "partyCode": "#cur_time#", "prodNameCn": "py59#random_str#", "prodNameEn": "py59#random_str#" }], "tagList": [2], "content": "", "deliveryTemplateId": 1, "totalStocks": 100, "price": 66, "oriPrice": 100, "deliveryModeVo": { "hasShopDelivery": true, "hasUserPickUp": false, "hasCityDelivery": false } }
可以看到我这接口数据中构造了3个变量,#random_str#,#pic#,#cur_time#。
这里random_str是使用faker随机生成的,cur_time是用python中的time进行生成的时间戳,pic是上一个接口返回的数据将它设置为全局变量,后面进行调用。
封装工具类
这里需要封装两个工具类,一个是生成随机数和时间戳的工具类,类名是handle_gen_data(类名自己随便取);另一个是替换的工具类,类名是:handle_replace
handle_gen_data
import time
from faker import Faker
fk = Faker("zh-CN")
def random_str():
return fk.pystr(8,10)
def cur_time():
return str(int(time.time() * 1000))
handle_replace
"""
替换的步骤
1.在excel中填写需要替换的地方 #全局变量名#
2.使用正则提取
3.获取到这几个全局变量之后再进行替换
数据的来源:可能是从python的函数,也可能是全局变量类里面
占位符太多的情况使用,hasattr和getattr来判断和获取
"""
import re
from tools import handle_gen_data
from tools.handle_global_data import GlobalData
def replace_mark_by_data(req_str):
"""
:param req_data: 从excel中提取出来的数据
:return:替换完成之后的字符串
"""
#从excel的请求数据里面提取占位符
res = re.findall("#(\w+)#",req_str)
#提取出来之后去重
if res:
to_be_replace_mark = list(set(res))
print(f"要被替换的占位符是{to_be_replace_mark}")
else:
print("没有要替换的占位符")
return req_str
#遍历所有占位符进行替换
for mark in to_be_replace_mark:
print(f"要替换的占位符是:{mark}")
if hasattr(GlobalData,mark):
req_str = req_str.replace(f"#{mark}#",getattr(GlobalData,mark))
print(f"在全局变量中找到了{mark}全局变量,值是{getattr(GlobalData,mark)}")
elif hasattr(handle_gen_data,mark):
value = getattr(handle_gen_data,mark)()
req_str = req_str.replace(f"#{mark}#",value)
print("替换完成")
else:
print(f"{mark}找不到可以替换的值")
return req_str
工具类写好后就去编写测试脚本。
import os
import json
import pytest
import requests
from tools import handle_gen_data
from tools.handle_excel import MyExcel
from tools.handle_req import Handle_req
from tools.handle_global_data import GlobalData
from tools.handle_path import img_dir,testdata_dir
from tools.handle_replace import replace_mark_by_data
from tools.handle_extract import extract_value_from_resp
#实例化请求
hrq = Handle_req()
#读取excel中的测试数据
me = MyExcel(os.path.join(testdata_dir,"cases.xlsx"),"添加产品")
all_datas = me.read_all_data()
class TestAddProd:
@pytest.mark.parametrize("case",all_datas)
def test_add_prod(self,case):
#替换请求数据里面的占位符
if case.get("req_data"):
case["req_data"] = replace_mark_by_data(case.get("req_data"))
#调用请求方法,发送请求
resp = hrq.send_req(case.get("method"),case.get("url"),json_data=case.get("req_data"),
files=case.get("file"),token=getattr(GlobalData,"token"))
#请求结果转成字典
try:
resp_dict = resp.json()
except:
resp_dict = {"data":resp.text}
#将提取列的东西转换成全局变量
if case.get("extract"):
extract_value_from_resp(case.get("extract"),resp_dict)
print(resp.status_code)
print(resp.text)
结果:

接口自动化复习第四天利用正则和faker提取替换变量值的更多相关文章
- python接口自动化(十四)--session关联接口(详解)
简介 上一篇cookie绕过验证码模拟登录博客园,但这只是第一步,一般登录后,还会有其它的操作,如发帖,评论等等,这时候如何保持会话呢?这里我以jenkins平台为例,给小伙伴们在沙场演练一下. se ...
- python 利用正则表达的式提取特定数据如手机号
import re file=open('1.txt','r') listfile=file.readlines() listfile=','.join(listfile)#合并文本 listfile ...
- php正则给图片提取/替换/添加alt标签的正则代码
有的时候我们需要对富文本编辑器的内容做一些处理,例如图片的alt标签.百度的富文本编辑器添加的图片就是没有的,那么我们要添加就必须使用正则了,下面一起来看看如何实现吧. $preg = "/ ...
- jmeter接口自动化和性能学习目录
目录黑色代表未完成的,绿色代表已完成的文章.目录的作用的为了引导和总结自己的学习,也是为了更好的分享给大家. 一.接口自动化 jmeter解决登录token获取 jmeter五种提取器 之 正则表达 ...
- python接口自动化(十)--post请求四种传送正文方式(详解)
简介 post请求我在python接口自动化(八)--发送post请求的接口(详解)已经讲过一部分了,主要是发送一些较长的数据,还有就是数据比较安全等.我们要知道post请求四种传送正文方式首先需要先 ...
- python接口自动化(四)--接口测试工具介绍(详解)
简介 “工欲善其事必先利其器”,通过前边几篇文章的介绍,大家大致对接口有了进一步的认识.那么接下来让我们看看接口测试的工具有哪些. 目前,市场上有很多支持接口测试的工具.利用工具进行接口测试,能够提供 ...
- 【python接口自动化】- 正则用例参数化
我们在做接口自动化的时候,处理接口依赖的相关数据时,通常会使用正则表达式来进行提取相关的数据. 正则表达式,又称正规表示式.正规表示法.正规表达式.规则表达式.常规表示法(Regular Ex ...
- 接口自动化框架两大神器-正则提取器和Jsonpath提取器
一 接口自动化框架 一 框架结构 二 结构说明 - API 用于封装被测系统的接口(用request模块封装的请求方法) - TestCase 将一个或多个接口封装成测试用例,并使用UnitTest管 ...
- python+request接口自动化框架
python+request接口自动化框架搭建 1.数据准备2.用python获取Excel文件中测试用例数据3.通过requests测试接口4.根据接口返回的code值和Excel对比 但本章只讲整 ...
- jemeter 实现接口自动化回归测试
jemeter做接口自动化测试的优点: 1.首先我认为最重要的是不需要编程基础,很多一直想做接口测试但一直徘徊在门边的原因可能就是不想写代码 2.可以更快的上手,能让测试人员更好的理解什么是接口测试, ...
随机推荐
- [CF1168C] And Reachability
And Reachability 题面翻译 题目描述 Toad Pimple 有一个整数数组 \(a_1,\dots,a_n\). 当 \(x < y\) 且存在 \(x = p_1 < ...
- VUE路由基本操作
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- C++ Qt开发:TreeWidget 树形选择组件
Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍TreeWid ...
- 从零玩转QQ登录-clwzqqdlu
title: 从零玩转QQ登录 date: 2021-05-01 15:55:39.951 updated: 2023-03-30 13:29:03.865 url: https://www.yby6 ...
- 文心一言 VS 讯飞星火 VS chatgpt (174)-- 算法导论13.3 3题
三.用go语言,假设图13-5 和图13-6 中子α.β.γ.δ和ε的黑高都是k.给每张图中的每个结点标上黑高,以验证图中所示的转换能保持性质 5. 文心一言: 在Go语言中,你可以通过以下步骤来为图 ...
- JavaFX打包exe+Wind+Mac+Linux多平台分发等等
JavaFX打包exe+Wind+Mac+Linux多平台分发等等 由于此教程相对复杂,适合对java有一定掌握的同学操作,于是我又写了一篇用idea简单打包exe的教程,文章地址:https://b ...
- Spring 中循环依赖的处理
Spring 提供了十分强大的依赖注入功能,使得我们不再需要手动去管理对象的依赖项.然而,在实际的使用场景中,可能会遇到类似下面的依赖异常: Exception encountered during ...
- rime中州韵 输入效果一览 100+增强功能效果
rime是一个定制化程度很高的输入法框架, 我们可以在该框架上搭建适合自己的输入法程序.我们将在专栏 小狼毫 Rime 保姆教程 中完成以下近百种定制化效果的配置与演示.欢迎订阅. 以下为个性化定制的 ...
- 开源云原生网关Linux Traefik本地部署结合内网穿透远程访问
开源云原生网关Linux Traefik本地部署结合内网穿透远程访问 前言 Træfɪk 是一个云原生的新型的 HTTP 反向代理.负载均衡软件,能轻易的部署微服务.它支持多种后端 (Docker ...
- Vue 2 和 Vue 3 中 toRefs的区别
摘要:本文将介绍 Vue 2 和 Vue 3 中 toRefs 函数的不同用法和行为,并解释其在各个版本中的作用. 正文: Vue 是一款流行的 JavaScript 框架,用于构建用户界面.在 Vu ...