当前位置: 首页 > 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性能测试

请添加图片描述

九、总结(尾部小惊喜)

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

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

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

http://www.lryc.cn/news/118816.html

相关文章:

  • CRUD操作-select
  • SD-WAN网络加速及应用场景分析
  • python机器学习(六)决策树(上) 构造树、信息熵的分类和度量、信息增益、CART算法、剪枝
  • eNSP:ospf和mgre的配置
  • 培训报名小程序-订阅消息发送
  • 资深测试员才知道的五个行业秘密
  • Ozone命令行接口详解
  • 机器学习笔记 - 基于C++的​​深度学习 二、实现卷积运算
  • python pandas 获取Excel文件下所有的sheet名称,表格数据
  • gateway做token校验
  • C#学习记录-线程
  • Spring Boot 启动注解分析
  • React Native数据存储
  • 【网络编程】揭开套接字的神秘面纱
  • MySQL 8.0 事务定义和基本操作
  • 项目经理必备:常用的项目管理系统推荐!
  • 【香瓜说职场】信任危机(2022.08.19)
  • 【Rust】Rust学习 第六章枚举和模式匹配
  • Win10安装GPU支持的最新版本的tensorflow
  • 20个Golang自动化DevOps库
  • 【WiFi】WiFi 6E最新支持的国家和频段
  • 如何使用html,包括css,js 画思维导图?有哪些可用的方法?
  • 机器学习---梯度下降代码
  • 【VB6|第23期】原来Jet.OLEDB也可以读取新版.xlsx的Excel文件
  • 通过控制ros节点的启停,软实现人工控制和紧急停止功能的图示
  • 面试热题(滑动窗口最大值)
  • 【代码】表格封装 + 高级查询 + 搜索 +分页器 (极简)
  • ant.design 组件库中的 Tree 组件实现可搜索的树: React+and+ts
  • Linux系统编程之信号(上)
  • 23.Netty源码之内置解码器