在做接口自动化测试的时候,我们经常会遇到,有些字段利用随机生成数据就行了,不需要自己去构造测试数据。今天我就是要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提取替换变量值的更多相关文章

  1. python接口自动化(十四)--session关联接口(详解)

    简介 上一篇cookie绕过验证码模拟登录博客园,但这只是第一步,一般登录后,还会有其它的操作,如发帖,评论等等,这时候如何保持会话呢?这里我以jenkins平台为例,给小伙伴们在沙场演练一下. se ...

  2. python 利用正则表达的式提取特定数据如手机号

    import re file=open('1.txt','r') listfile=file.readlines() listfile=','.join(listfile)#合并文本 listfile ...

  3. php正则给图片提取/替换/添加alt标签的正则代码

    有的时候我们需要对富文本编辑器的内容做一些处理,例如图片的alt标签.百度的富文本编辑器添加的图片就是没有的,那么我们要添加就必须使用正则了,下面一起来看看如何实现吧. $preg = "/ ...

  4. jmeter接口自动化和性能学习目录

     目录黑色代表未完成的,绿色代表已完成的文章.目录的作用的为了引导和总结自己的学习,也是为了更好的分享给大家. 一.接口自动化 jmeter解决登录token获取 jmeter五种提取器 之 正则表达 ...

  5. python接口自动化(十)--post请求四种传送正文方式(详解)

    简介 post请求我在python接口自动化(八)--发送post请求的接口(详解)已经讲过一部分了,主要是发送一些较长的数据,还有就是数据比较安全等.我们要知道post请求四种传送正文方式首先需要先 ...

  6. python接口自动化(四)--接口测试工具介绍(详解)

    简介 “工欲善其事必先利其器”,通过前边几篇文章的介绍,大家大致对接口有了进一步的认识.那么接下来让我们看看接口测试的工具有哪些. 目前,市场上有很多支持接口测试的工具.利用工具进行接口测试,能够提供 ...

  7. 【python接口自动化】- 正则用例参数化

    ​ 我们在做接口自动化的时候,处理接口依赖的相关数据时,通常会使用正则表达式来进行提取相关的数据. ​ 正则表达式,又称正规表示式.正规表示法.正规表达式.规则表达式.常规表示法(Regular Ex ...

  8. 接口自动化框架两大神器-正则提取器和Jsonpath提取器

    一 接口自动化框架 一 框架结构 二 结构说明 - API 用于封装被测系统的接口(用request模块封装的请求方法) - TestCase 将一个或多个接口封装成测试用例,并使用UnitTest管 ...

  9. python+request接口自动化框架

    python+request接口自动化框架搭建 1.数据准备2.用python获取Excel文件中测试用例数据3.通过requests测试接口4.根据接口返回的code值和Excel对比 但本章只讲整 ...

  10. jemeter 实现接口自动化回归测试

    jemeter做接口自动化测试的优点: 1.首先我认为最重要的是不需要编程基础,很多一直想做接口测试但一直徘徊在门边的原因可能就是不想写代码 2.可以更快的上手,能让测试人员更好的理解什么是接口测试, ...

随机推荐

  1. [ARC145B] AB Game

    The game is played by Alice and Bob. Initially, there are $n$ stones. The players alternate turns, m ...

  2. [ABC265G] 012 Inversion

    Problem Statement You are given a sequence $A=(A_1,\ldots,A_N)$ of length $N$. Each element is $0$, ...

  3. 使用C++和QT实现Log自定义日志系统

    MyLog 说明 使用QT的qInstallMessageHandler函数结合qDebug,qInfo实现自定义的日志系统 输出日志到文件和控制台 自动检测日志文件大小 自动更新日志文件修改日期 自 ...

  4. 单元测试框架pytest

    1.什么是pytest pytest是一个非常成熟的全功能的Python测试框架,主要有以下特点: 简单灵活,容易上手,文档丰富 支持参数化,可以细粒度地控制要测试的测试用例 能够支持简单的单元测试和 ...

  5. 【开源项目推荐】OpenMetadata——基于开放元数据的一体化数据治理平台

    大家好,我是独孤风. 这几年数据治理爆火,但迟迟没有一个优秀的开源数据治理平台的出现.很多公司选择元数据管理平台作为基础,再构建数据质量,数据血缘等工具. 今天为大家推荐的开源项目,是一个一体化的数据 ...

  6. 【Python】【OpenCV】Cameo项目(一)实时显示摄像头帧

    Cameo项目介绍: 1.实时捕获并显示摄像头帧. 2.具备截图.保存视频和退出三个功能键. 要求存在文件:manager.py 和 cameo.py 一.manager.py 两个类:Capture ...

  7. 独立于 Github,更方便地管理自己的静态网站?来试试这套自托管 Git 仓库方案!

    原文章来自:独立于 Github,更方便地管理自己的静态网站?来试试这套自托管 Git 仓库方案! - Sxrhhh 的个人小站 就在前几天,我成功地将我自己的网站由 wordpress 迁移为了静态 ...

  8. Ubuntu 安装Nvidia 显卡驱动

    在Nvidia官网下载对应驱动:https://www.nvidia.cn/geforce/drivers/ sudo vim /etc/modprobe.d/blacklist.conf black ...

  9. 调用含有header的WebService时,跳过证书验证

    最近在做Webservice的接口调用,header的用户名和密码都是正确的,地址也是对的,但一直提示:基础连接已关闭,未能与SSL/TLS安全通道建立信任关系. 解决方案: 请求之前加上下面得代码即 ...

  10. C#判断字符串是否是有效的XML格式数据

    说明 在try-catch语句块中,创建XmlDocument对象,并使用LoadXml方法加载xml字符串.如果没有异常,则说明xml字符串是有效的,返回true,反之为false. 代码实现 // ...