当前位置: 首页 > news >正文

全网超全,接口自动化测试-动态数据生成/替换数据(实战应用)

目录:导读

    • 前言
    • 一、Python编程入门到精通
    • 二、接口自动化项目实战
    • 三、Web自动化项目实战
    • 四、App自动化项目实战
    • 五、一线大厂简历
    • 六、测试开发DevOps体系
    • 七、常用自动化测试工具
    • 八、JMeter性能测试
    • 九、总结(尾部小惊喜)


前言

接口自动化过程中,动态数据如何生成、动态数据与数据库数据进行对比并替换?

应用场景

注册接口参数需要手机号,手机号如何动态生成?
生成的手机号如何与数据库数据进行对比?
未注册的手机号如何替换用例数据中的手机号?

动态手机号处理思路

①编写函数,生成随机的手机号;
②将生成的手机号进行数据库查询;
③如手机号已存在,就重新生成手机号;
④如手机号不存在,就将此手机号替换测试用例中的手机号。

动态手机号处理

1、注册接口测试用例
在data/cases.xlsx中,新建register工作簿,填充注册接口用例,其中mobile_phone是动态参数,如果写死,在自动化过程中,会运行失败。

2、动态生成手机号
在common目录下,新建文件helper.py,用于编写辅助函数,实现特定的功能(类似于HttpRunner中的debugtalk.py)。

实现批量生成11位手机号,代码如下:

import random
def generate_mobile():"""生成随机手机号"""phone = "1" + random.choice(["3","5","7","8","9"])for i in range(0,9):num = random.randint(1,9)phone += str(num)return phone
if __name__ == '__main__':print(generate_mobile())

运行之后,结果为:

13889546979

上面代码生成批量手机号,比较简易,如对手机号格式要求更精确,可以自行按要求编写。

数据库查询并替换

1、replace()方法
描述:
replace() 方法把字符串中的 old(旧字符串) 替换成 new(新字符串)

replace语法:

str.replace(old, new[, max])

old – 将被替换的字符串。
new – 新字符串,用于替换old字符串。
max – 可选字符串, 替换不超过 max 次

replace实战例子:
现有字符串如下:
Str = ‘coco爱读书’

现在将Str中的coco改为vivi。

Str = 'coco爱读书'
print(Str.replace('coco', 'vivi'))

输出结果如下:

vivi爱读书

2、编写注册接口用例

接下来的注册接口用例代码,大多数代码其实和登录用例一样,只是新增了查询数据库操作。

大致思路如下:
①从excel中读取用例数据;
②判断用例数据中是否包含#new_phone#;
③如包含#new_phone#,则随机生成手机号;
④如随机生成的手机号在数据库中存在,则重新生成;
⑤如随机生成的手机号在数据库中不存在,则用此手机号替换#new_phone#,进行注册。

import json
import unittest
from common.db_handler import DBHandler
from common.helper import generate_mobile
from common.logger_handler import logger
from common.requests_handler import RequestHandler
from common.excel_handler import ExcelHandler
from config.setting import config
from libs import ddt
from middleware.yaml_handler import yaml_data@ddt.ddt
class TestRegister(unittest.TestCase):# 读取register sheet数据excel = ExcelHandler(config.data_path)data = excel.read_excel('register')def setUp(self):self.req = RequestHandler()self.db = DBHandler(host=yaml_data['mysql']['host'], port=yaml_data['mysql']['port'],user=yaml_data['mysql']['user'], password=yaml_data['mysql']['password'],database=yaml_data['mysql']['db'], charset=yaml_data['mysql']['charset'])def tearDown(self):self.req.close_session()self.db.close()@ddt.data(*data)def test_register(self,items):# 判断#new_phone#是否在用例数据中if "#new_phone#" in items['payload']:while True:# 使用自动生成手机号的函数mobile = generate_mobile()# 从数据库中查询此手机号是否存在query_mobile = self.db.query("select * from member where mobile_phone=%s;",args=[mobile])# 如果不存在,就跳出循环if not query_mobile:break# 将#new_phone#替换为生成的手机号        items['payload'] = items['payload'].replace('#new_phone#', mobile)logger.info('*'*30)logger.info('测试第{}条测试用例:{}'.format(items['case_id'],items['case_title']))logger.info('测试数据是:{}'.format(items))# 访问注册接口,获取实际结果res = self.req.visit(items['method'],config.host+items['url'],json=json.loads(items['payload']))# 断言:预期结果与实际结果对比try:self.assertEqual(res['code'],items['expected_result'])logger.info(res)result = 'PASS'except AssertionError as e:logger.error("测试用例执行失败{}".format(e))result = 'fail'raise efinally:TestRegister.excel.write_excel(config.data_path,'register',items['case_id']+1,8,res['code'])TestRegister.excel.write_excel(config.data_path,'register',items['case_id'] + 1,9, result)
if __name__ == '__main__':unittest.main()

运行结果为:

{'code': 0,'msg': 'OK','data': {'leave_amount': 240.0,'mobile_phone': '155********',}
}
下面是我整理的2023年最全的软件测试工程师学习知识架构体系图

一、Python编程入门到精通

请添加图片描述

二、接口自动化项目实战

请添加图片描述

三、Web自动化项目实战

请添加图片描述

四、App自动化项目实战

请添加图片描述

五、一线大厂简历

请添加图片描述

六、测试开发DevOps体系

请添加图片描述

七、常用自动化测试工具

请添加图片描述

八、JMeter性能测试

请添加图片描述

九、总结(尾部小惊喜)

生命不息,奋斗不止,每一份汗水都是青春的燃料。勇往直前,超越自我,追寻无限可能。别放弃,坚持到底,胜利属于那些敢于为之拼搏的人。挥洒激情,开创辉煌!

时光流转,岁月更替,唯有奋斗永恒。勇往直前,不畏艰险,拼搏出无限可能。披荆斩棘,化压力为动力,砥砺前行,成就自我辉煌。坚守梦想,绽放光芒,努力奋斗,收获终将属于你!

人生犹如舞台,奋斗是最精彩的演出。勇往直前,超越极限,用汗水浇灌梦想的花朵。不畏失败,坚持不懈,相信自己的力量,创造属于自己的辉煌篇章。

相关文章:

全网超全,接口自动化测试-动态数据生成/替换数据(实战应用)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 接口自动化过程中…...

CRUD操作-select

CRUD操作-select 基本查询(一) -- CRUD操作 -- insert into -- insert -- replace intouse dbok; show tables; drop table if exists t5,t6,t_stu,t_student,t_teacher;-- 建立学生表 create table t_student(sid int unsigned auto_increment,sname v…...

SD-WAN网络加速及应用场景分析

SD-WAN技术实现网络加速的主要方式有以下几个: 智能路由:SD-WAN技术可以自动智能地选择最佳路径,将数据流量传输到最优路线上,从而避免了传统VPN网络较为笨重的配置和管理方式,大大节省了时间和精力,提高了…...

python机器学习(六)决策树(上) 构造树、信息熵的分类和度量、信息增益、CART算法、剪枝

决策树算法 模拟相亲的过程,通过相亲决策图,男的去相亲,会先选择性别为女的,然后依次根据年龄、长相、收入、职业等信息对相亲的另一方有所了解。 通过决策图可以发现,生活中面临各种各样的选择,基于我们的…...

eNSP:ospf和mgre的配置

完成下图操作&#xff1a; 信息标注&#xff1a; 如下是各路由器上的命令&#xff1a; r1&#xff1a; <Huawei>sys Enter system view, return user view with CtrlZ. [Huawei]sys r1 [r1]int loop0 [r1-LoopBack0]ip add 192.168.1.1 24 [r1-LoopBack0]int g0/0/0 …...

培训报名小程序-订阅消息发送

目录 1 创建API2 获取模板参数3 编写自定义代码4 添加订单编号5 发送消息6 发布预览 我们上一篇讲解了小程序如何获取用户订阅消息授权&#xff0c;用户允许我们发送模板消息后&#xff0c;按照模板的参数要求&#xff0c;我们需要传入我们想要发送消息的内容给模板&#xff0c…...

资深测试员才知道的五个行业秘密

作为一名资深测试员&#xff0c;总有一些平时难以诉说的行业秘密&#xff0c;我也不例外。也许这些秘密你认可&#xff0c;也许你嗤之以鼻&#xff0c;但不管如何&#xff0c;我都希望能给你带来一丝感悟&#xff0c;更深的认识测试&#xff0c;并走得更远。 1、手工测试不可替…...

Ozone命令行接口详解

命令行接口简介 Ozone Shell是命令行与Ozone交互的主要界面&#xff0c;底层用的是Java。 有些功能只能通过Ozone Shell进行操作&#xff1a; 创建带有限额限制的Volume管理内部ACLs&#xff08;访问控制列表&#xff09;创建带有加密密钥的存储桶 大部分操作除了Shell操作…...

机器学习笔记 - 基于C++的​​深度学习 二、实现卷积运算

一、卷积 卷积是信号处理领域的老朋友。最初的定义如下 在机器学习术语中: I(…)通常称为输入 K(…)作为内核,并且 F(…)作为给定K的I(x)的特征图。 虑多维离散域,我们可以将积分转换为以下求和 对于二维数字图像,我们可以将其重写为: <...

python pandas 获取Excel文件下所有的sheet名称,表格数据

方法1&#xff1a; 一定要加sheet_nameNone&#xff0c;才能读取出所有的sheet&#xff0c;否则默认读取第一个sheet&#xff0c;且获取到的keys是第一行的值 df pd.read_excel(自己的Excel文件路径.xlsx, sheet_nameNone) # 路径注意转义 for i in df.keys():print(i)方法…...

gateway做token校验

本文使用springcloud的gateway做token校验 登录的本质&#xff1a;拿用户名和密码 换 token。 token会返回给浏览器&#xff08;存储&#xff09;&#xff0c;当访问的时候&#xff0c;携带token 发起请求。 token校验图 引入redis依赖 <dependency><groupId>or…...

C#学习记录-线程

线程 定义&#xff1a;Thread t new Thread(Test); //可以用匿名 lamda 调用&#xff1a;t.Start("ljc6666");方法可以无参或一个参数&#xff0c;如果要传入多个参数&#xff0c;可以传入一个结构体 namespace _17_线程Thread {internal class Program{stati…...

Spring Boot 启动注解分析

虽然我们在日常开发中&#xff0c;Spring Boot 使用非常多&#xff0c;算是目前 Java 开发领域一个标配了&#xff0c;但是小伙伴们仔细想想自己的面试经历&#xff0c;和 Spring Boot 相关的面试题都有哪些&#xff1f;个人感觉应该是比较少的&#xff0c;Spring Boot 本质上还…...

React Native数据存储

最近做RN开发中需要数据存储&#xff0c;查阅RN官方资料&#xff0c;发现推荐我们使用 AsyncStorage,对使用步骤做一下记录。 AsyncStorage是什么 简单的&#xff0c;异步的&#xff0c;持久化的key-value存储系统AsyncStorage在IOS下存储分为两种情况&#xff1a; 存储内容较…...

【网络编程】揭开套接字的神秘面纱

文章目录 1 :peach:简单理解TCP/UDP协议 :peach:2 :peach:网络字节序 :peach:3 :peach:socket编程接口 :peach:3.1 :apple:socket 常见API :apple:3.2 :apple:sockaddr结构:apple: 4 :peach:简单的UDP网络程序 :peach:4.1 :apple:基本分析:apple:4.2 :apple:udpServer.hpp(重点…...

MySQL 8.0 事务定义和基本操作

MySQL 事务&#xff08;Transaction&#xff09;的四大特性&#xff1a;A、C、I、D A、原子性&#xff1a;&#xff08;Atomicity&#xff09; 一个事务是不可分割的最小工作单位。 执行的事务&#xff0c;要么全部成功&#xff0c;要么回滚到执行事务之前的状态。 C、一致…...

项目经理必备:常用的项目管理系统推荐!

当我们成为项目负责人时&#xff0c;找到合适的工具来管理跟进项目&#xff0c;就成为了迫切需要解决的问题。一款优秀的工具&#xff0c;在项目的管理跟进中&#xff0c;起着极为重要的作用&#xff0c;一般可以付费购买专门的项目管理软件。 1.可快速切换查看不同角度的项目信…...

【香瓜说职场】信任危机(2022.08.19)

自从17年4月份开始辞职创业&#xff0c;已经5年零4个月了。今天跟大家聊一点不太正能量的事。 首先关于“要不要说些不好的”这件事&#xff0c;我爸妈常建议我不要把不好的事情写出来&#xff0c;因为觉得丢人、不体面、怕影响合伙人关系、影响同事关系。而我觉得如果只写好的…...

【Rust】Rust学习 第六章枚举和模式匹配

本章介绍 枚举&#xff08;enumerations&#xff09;&#xff0c;也被称作 enums。枚举允许你通过列举可能的 成员&#xff08;variants&#xff09; 来定义一个类型。首先&#xff0c;我们会定义并使用一个枚举来展示它是如何连同数据一起编码信息的。接下来&#xff0c;我们会…...

Win10安装GPU支持的最新版本的tensorflow

我在安装好cuda和cudnn后&#xff0c;使用pip install tensorflow安装的tensorflow都提示不能找到GPU&#xff0c; 为此怀疑默认暗转的tensorflow是不带GPU支持的。 在tensorflow官网提供了多个版本的GPU支持的windows的安装包 https://www.tensorflow.org/install/pip?hlz…...

UTM虚拟机终极指南:5分钟在iOS和macOS设备上运行Windows和Linux系统

UTM虚拟机终极指南&#xff1a;5分钟在iOS和macOS设备上运行Windows和Linux系统 【免费下载链接】UTM Virtual machines for iOS and macOS 项目地址: https://gitcode.com/gh_mirrors/ut/UTM 想要在iPhone、iPad或Mac上体验Windows系统吗&#xff1f;UTM虚拟机让你的苹…...

5分钟掌握Unity游戏去马赛克:免费插件完整使用指南

5分钟掌握Unity游戏去马赛克&#xff1a;免费插件完整使用指南 【免费下载链接】UniversalUnityDemosaics A collection of universal demosaic BepInEx plugins for games made in Unity3D engine 项目地址: https://gitcode.com/gh_mirrors/un/UniversalUnityDemosaics …...

DICOM多序列融合渲染崩溃频发?C++引擎内存池碎片率超68%的隐蔽诱因及工业级RAII重构模板(含FDA Class II认证代码片段)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;DICOM多序列融合渲染崩溃频发的临床影响与系统级定位 临床决策链路的中断风险 当放射科医师在阅片工作站中执行T1/T2/FLAIR/DWI多序列DICOM融合渲染时&#xff0c;若渲染引擎异常退出&#xff0c;将直…...

DeepSeek V4利好国产算力,超节点成为弯道超车的技术底座

超节点架构以系统级工程补齐单点算力短板&#xff0c;满足了从万亿参数大模型训练到规模化AI推理的多样化需求。2026年4月24日&#xff0c;DeepSeek发布了新一代旗舰模型DeepSeek V4&#xff0c;将总参数推至1.6万亿&#xff0c;首次将百万Token上下文打成标配&#xff0c;并实…...

告别‘震耳欲聋’:5分钟搞定RK3568开发板的系统音量默认值(修改设备树参数)

RK3568开发板音量优化实战&#xff1a;5分钟修改设备树解决默认音量问题 第一次在RK3568开发板上用aplay播放音频时&#xff0c;突如其来的巨大音量差点让我把耳机扔出去——这恐怕是许多开发者共同的"惊悚体验"。不同于传统PC或手机&#xff0c;嵌入式设备的音频系统…...

【仅限信创首批试点单位内部流通】:Java中间件国产化适配checklist V3.2(含国密算法注入、SM4加解密模板代码)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Java中间件国产化适配的战略背景与政策合规要点 近年来&#xff0c;国家对关键信息基础设施自主可控提出明确要求&#xff0c;《网络安全审查办法》《关键信息基础设施安全保护条例》及信创产业“28N”…...

Python的__complex__与__float__数值转换协议在科学计算中的支持

Python的数值转换协议在科学计算中扮演着关键角色&#xff0c;尤其是__complex__与__float__这两个特殊方法&#xff0c;它们为自定义对象提供了与内置复数、浮点数无缝交互的能力。科学计算领域常涉及复数运算&#xff08;如信号处理、量子力学&#xff09;和高精度浮点计算&a…...

OpCore Simplify:告别黑苹果配置难题,四步构建完美EFI

OpCore Simplify&#xff1a;告别黑苹果配置难题&#xff0c;四步构建完美EFI 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为黑苹果复杂的Open…...

如何通过3步迁移完成R语言空间数据处理技术栈的终极升级

如何通过3步迁移完成R语言空间数据处理技术栈的终极升级 【免费下载链接】sf Simple Features for R 项目地址: https://gitcode.com/gh_mirrors/sf/sf 在R语言空间数据分析领域&#xff0c;从传统sp包迁移到现代sf包已成为技术演进的必然选择。sf包作为Simple Features…...

如何用CheatEngine-DMA插件实现终极内存修改:5步完整指南

如何用CheatEngine-DMA插件实现终极内存修改&#xff1a;5步完整指南 【免费下载链接】CheatEngine-DMA Cheat Engine Plugin for DMA users 项目地址: https://gitcode.com/gh_mirrors/ch/CheatEngine-DMA 在游戏修改和内存分析领域&#xff0c;CheatEngine-DMA插件为D…...