接口自动化复习第四天利用正则和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.可以更快的上手,能让测试人员更好的理解什么是接口测试, ...
随机推荐
- [CF1599A] Weights
题目描述 You are given an array $ A $ of length $ N $ weights of masses $ A_1 $ , $ A_2 $ ... $ A_N $ . ...
- Codeforces #449 div2 C题
C. Nephren gives a riddle time limit per test 2 seconds memory limit per test 256 megabytes input st ...
- 一步一步教你写kubernetes sidecar
本文分享自华为云社区<一步一步教你写kubernetes sidecar>,作者: 张俭. 什么是sidecar? sidecar,直译为边车. 如上图所示,边车就是加装在摩托车旁来达到拓 ...
- 部署堡垒机5——安装Core
部署jumpserver服务核心组件Core 一.前期准备 一个后台程序,基本上都是需要依赖于数据库才能运行,后台程序在启动的时候,代码就回去连接数据库,保证数据库,正确启动,且可以正确连接,否则后台 ...
- R6900 R7000刷梅林 AImesh组网
本文作者: Colin本文链接: https://www.colinjiang.com/archives/netgear-r6900-flash-merlin-rom.html 然后开始讲正题,刷梅林 ...
- [P2416 泡芙] 题解报告
题目链接:P2416 泡芙 简化题意 给定一个无向图 \(G\),每条边有边权 \(0 / 1\),现给定 \(m\) 组询问,每次询问形如 \(s, t\),问是否可以从 \(s\) 走到 \(t\ ...
- JavaImprove--Lesson05--Arrays,对象排序,Lambda表达式,方法引用简化Lambda表达式
一.Arrays 用来操作数组的一个工具类 在Java中,没有内置的"Arrays工具类",但有一个名为java.util.Arrays的类,它包含了一些用于操作数组的静态方法.这 ...
- 一文带你掌握OBS的两种常见的鉴权方式
摘要:本文就将带您了解OBS的两种常见的鉴权方式--Header携带签名和URL携带签名. OBS提供了REST(Representational State Transfer)风格API,支持您通过 ...
- 一通百通,带你一次性全理解Spring 中的Template
摘要:Template定义了问题的边界,子类定义了具体的实现,只要在模板的范围内玩耍就可以了. 本文分享自华为云社区<Spring 中的Template一次全理解,解析问题的本质>,作者: ...
- 面对 Log4j2 漏洞,安全人都做了什么?
摘要:本文从漏洞复现.漏洞防护.漏洞检测.软件供应链安全等方面,介绍安全人针对该漏洞做的尝试. 本文分享自华为云社区<面对 Log4j2 漏洞,安全人都做了什么?>,作者:maijun. ...