在做接口自动化测试的时候,我们经常会遇到,有些字段利用随机生成数据就行了,不需要自己去构造测试数据。今天我就是要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. Python+Selenium+Webdriver+unittest 实现登录126邮箱

    第一版:登录 #encoding=utf-8 import unittest import time from selenium import webdriver from selenium.webd ...

  2. Cesium被接入数字孪生系统后会发生怎样的改变?

    众所周知,Cesium凭借其开源免费的特点一直垄断着整个三维GIS的生态系统,但是随着数字孪生技术的发展以及各项新需求的不断涌现,Cesium与数字孪生系统相结合的潜力也逐渐凸显. 一般而言,Cesi ...

  3. Vue学习笔记-生命周期

    整体页面代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...

  4. thymeleaf使用

    thymeleaf使用 1.依赖 <parent> <artifactId>spring-boot-starter-parent</artifactId> < ...

  5. AES算法在网络安全中的应用:如何守护数据宝藏?

    摘要:高级加密标准(AES)是美国国家标准与技术研究所(NIST)用于加密电子数据的规范.本文从历史.算法原理.性能优势和应用等方面全面介绍了AES算法,旨在帮助读者更好地理解这一广泛应用的对称加密算 ...

  6. 【JVM】一文掌握JVM垃圾回收机制

    作为Java程序员,除了业务逻辑以外,随着更深入的了解,都无法避免的会接触到JVM以及垃圾回收相关知识.JVM调优是一个听起来很可怕,实际上很简单的事. 感到可怕,是因为垃圾回收相关机制都在JVM的C ...

  7. Jenkins简介及安装配置详解:开启持续集成之旅

    Jenkins简介及安装配置详解:开启持续集成之旅 一.Jenkins介绍 Jenkins是一个开源的.用Java编写的持续集成和持续交付(CI/CD)工具.它提供了一种简单易用的方式来自动化构建.测 ...

  8. 一些JavaSE学习过程中的思路整理(四)(主观性强,持续更新中...)

    目录 一些JavaSE学习过程中的思路整理(四)(主观性强,持续更新中...) 多线程编程:资源类&任务&运行机制的解耦合 关于重入锁(ReentrantLock)的细节 条件对象配合 ...

  9. vue常用函数

     this.$router.back();  //回退上一页面

  10. Llama2-Chinese项目:6-模型评测

      测试问题筛选自AtomBulb[1],共95个测试问题,包含:通用知识.语言理解.创作能力.逻辑推理.代码编程.工作技能.使用工具.人格特征八个大的类别. 1.测试中的Prompt   例如对于问 ...