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

接口自动化测试框架公共组件之测试数据管理

 Excel数据驱动​(handle_excel)

  • 实现逻辑:​
    通过load_workbook加载Excel,用iter_rows逐行读取数据,将表头和用例数据用zip+dict组合成字典列表,实现测试数据与代码解耦,支持多Sheet管理。

    关键函数:​

  • load_workbook():加载Excel文件
  • iter_rows(values_only=True):按行读取数据
  • dict(zip()):将表头与数据映射为字典
from openpyxl import load_workbook


class HandleExcel:
    def __init__(self,file_name):  #file_name: 测试用例文件名称(绝对路径)
        self.wb_obj = load_workbook(filename=file_name) #load_workbook加载excel

        #获取所有excel中sheet的名称
        self.sheet_names = self.wb_obj.sheetnames

    def get_excel_test_cases(self,sheet_name):  #sheet_name: excel中sheet名称
        #临时变量存放数据
        cases_list = []  
        #获取指定表单对象
        sheet_obj = self.wb_obj[sheet_name]
        #iter_rows迭代所有行数据,按行读取封装成list输出结果类似于[('id','title'),(1,'登陆成功')],values_only是False返回对象,True返回单元格对应数据,datas获取表单sheet中所有数据
        datas = list(sheet_obj.iter_rows(values_only=True))
        #获取表头
        case_title = datas[0] 
        #获取表数据
        case_datas  = datas[1:] 
        #遍历每一行数据
        for case in case_datas:
            #zip(key,val)把两个元素压缩在一起,再把每一行数据使用dict转换成字典类型,zip函数是python的内置函数
            result = dict(zip(case_title,case))
            cases_list.append(result)
        self.close_file()
        return cases_list

    def close_file(self):
        #关闭excel
        self.wb_obj.close()  

if __name__ == '__main__':
      #存放excel测试数据的文件名(放本目录下的路径)
      cl = HandleExcel(file_name="case_data.xlsx",sheet_name="login")
      cl.get_excel_test_cases()

动态数据生成​(handle_phone)

  • 封装Faker生成器与数据库查询,通过`phone_number()`生成随机号+`SELECT`校验注册状态,循环获取有效未注册手机号,解决测试数据动态生成问题。
  • **实现逻辑:​**
    1. 使用Faker库生成随机中文手机号
    2. 通过SQL查询校验手机号是否已注册
    3. 循环生成直到获取未注册的有效手机号

  • **关键函数:​**

    - `Faker().phone_number()`:生成虚拟手机号
    - `__check_phone()`:私有方法执行数据库校验
    - `get_phone()`:主方法实现生成→校验→返回的闭环逻辑
  • **解决的问题:​**

    1. 自动化生成未注册的测试手机号
    2. 避免测试数据重复导致的用例失败
    3. 动态生成测试数据替代硬编码
from faker import Faker
from tools.handle_db import mysql

class HandlePhone:
    def __init__(self):
        self.fk = Faker(locale="zh-cn")


    def __check_phone(self,phone):
        sql = "SELECT * FROM 表名 WHERE user_mobile = '{}'".format(phone)
        #去数据库查询是否注册,注册了再重新生成,直到在数据库中找不到,就表示未注册;
        result = mysql.get_datas(sql=sql)
        return result

    def get_phone(self):
        while True:
            #生成新的手机号
            phone = self.fk.phone_number()
            # 去数据库校验是否已注册
            result = self.__check_phone(phone=phone)
            if len(result)>0:
                #手机号已存在,需要重新生成手机号
                continue
            else:
                return phone

全局配置管理​(setting.py)

  • 通过字典结构分类存储数据库连接、用户凭证、文件参数等配置项,实现配置数据与测试代码解耦,解决多环境参数硬编码维护难题。
  • **实现逻辑:​**
  1. 集中管理测试环境配置参数
  2. 采用字典结构分类存储不同功能模块配置
  3. 实现配置数据与业务代码分离
  • **关键配置项:​**
  1. - `user_info`:系统登录凭证
  2. - `mysql_info`:数据库连接四要素
  3. - `image_info`:文件上传参数
  4. - `assert_db_info`:动态路径断言参数
  5. - `setup_sql_info`:前置SQL变量替换值
#setting.py 用于存放当前框架中的所有配置信息(使用不频繁,修改不频繁的数据)
#通过配置文件传参-软编码;在代码中写死-硬编码;


#管理者登陆账号信息
user_info = {"user_name":"xdfjewg","password":"dfergbu"}

#图片上传信息
image_info = {"file_name":"song.png","file_type":"image/png"}

#连接数据库信息
mysql_info = {"host":"11.111.111.11","post":"3306","user":"lemon","password":"vdnjkvs","db":"fsegjvskjv"}

#数据库断言替换信息,如"file_path":"2022/04/cd54sdgruissafmscsd/vds"图片上传路径
assert_db_info = {}

#前置sql语句执行需要替换的参数
setup_sql_info = {}

相关文章:

  • ios使用swift调用deepseek或SiliconFlow接口
  • 稚晖君级硬核:智元公司开源机器人通信框架AimRT入驻GitCode平台
  • DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)示例3: 行选择
  • Golang的容器化部署实践要点与技巧总结
  • 【LeetCode 热题 100】438. 找到字符串中所有字母异位词 | python 【中等】
  • 找一款好用的手机和电脑可以同步的便签备忘录
  • 【selenium工具操作web页面中的下拉框元素 】
  • [特殊字符] Django 常用命令
  • 使用OpenCV和MediaPipe库——实现人体姿态检测
  • 【高并发】深入解析 Netty:3W 学习法 + Java 实战 + 开源项目推荐
  • 【leetcode hot 100 240】搜索二维矩阵Ⅱ
  • flutter环境最新踩坑
  • 什么是TiDB,什么是分布式数据库?它和 MySQL 比优缺点是什么?
  • 【大模型学习】第十一章 什么是算力
  • vue实现日历签到效果
  • 代码随想录算法训练营第三十二天 | 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯
  • Cryptography 与 PyCryptodome 源码级解析
  • 爬虫逆向:脱壳工具BlackDex的详细使用
  • 发行思考:全球热销榜的频繁变动
  • [UE C++]实现自己的事件分发机制
  • 素材网站/360识图
  • 中国网站建设世界排名/免费做网站推广的软件
  • 电影推荐网站开发/网站搜索关键词优化
  • wordpress简易主题/seo二级目录
  • 企业网站的建设论文/品牌营销策划方案怎么做才好
  • wordpress弹窗评论/做seo前景怎么样