资深测试总结,自动化测试-ddt数据驱动yaml文件实战(详细)

news2024/11/17 15:41:27

目录:导读

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


前言

ddt 驱动 yaml/yml 文件来实现数据驱动测试

ddt.file_data:装饰测试方法,参数是文件名。文件可以是 json 或者 yaml 类型。

注意:如果文件是以 “.yml”或者".yaml" 结尾,ddt 会作为 yaml 类型处理,其他文件都会作为 json 文件处理。

如果文件是列表,列表的值会作为测试用例参数,同时,会作为测试用例方法名后缀显示。

如果文件是字典,字典的 key 会作为测试用例方法的后缀显示,字典的 value 会作为测试用例参数。

1、yaml 文件基础格式要求

基础语法:
大小写敏感;
使用缩进表示层级关系;
缩进不允许使用 tab,只允许空格;
缩进的空格数不重要,只要相同层级的元素左对齐即可;
‘#’ 表示注释;

YAML 支持以下几种数据类型:
对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)  
数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)  
纯量(scalars):单个的、不可再分的值  
yaml 列表结构
以 - 开头的行表示构成一个数组

# data.yaml 文件内容

-
  data1
-
  data2
-
  data3
import yaml

f = open("data", encoding="utf8")
v = yaml.load(f)
print(v)
print(type(v))
f.close()

# 结果如下
['data1', 'data2', 'data3']
<class 'list'>

yaml 多维列表结构

# data.yaml 文件内容

-
  - data1
  - data2
-
  data3
import yaml

f = open("data", encoding="utf8")
v = yaml.load(f)
print(v)
print(type(v))
f.close()

# 结果如下
[['data1', 'data2'], 'data3']
<class 'list'>

yaml 字典结构
字典结构没有 -
冒号前为键,冒号后为值
冒号后面一定要空格

# data.yaml 文件内容

username : admin
password : "123456"
import yaml

f = open("data", encoding="utf8")
v = yaml.load(f)
print(v)
print(type(v))
f.close()

# 结果如下
{'username': 'admin', 'password': '123456'}
<class 'dict'>

yaml 多维字典结构

# data.yaml 文件内容

data :
  username: admin
  password: "123456"
code : "0000"
msg : "登录成功!"
import yaml

f = open("data", encoding="utf8")
v = yaml.load(f)
print(v)
print(type(v))
f.close()

# 结果如下
{'data': {'username': 'admin', 'password': '123456'}, 'code': '0000', 'msg': '登录成功!'}
<class 'dict'>

列表 + 字典,复杂结构

# data.yaml 文件内容

-
  username : admin
  password : "123456"
-
  username : Evan
  password : xxxxxx
import yaml

f = open("data", encoding="utf8")
v = yaml.load(f)
print(v)
print(type(v))
f.close()

# 结果如下
[{'username': 'admin', 'password': '123456'}, {'username': 'Evan', 'password': 'xxxxxx'}]
<class 'list'>

yaml 纯量
字符串;布尔值;整数;浮点数;Null;时间;日期

boolean: 
    - TRUE  #true,True都可以
    - FALSE  #false,False都可以
float:
    - 3.14
    - 6.8523015e+5  #可以使用科学计数法
int:
    - 123
    - 0b1010_0111_0100_1010_1110    #二进制表示
null:
    nodeName: 'node'
    parent: ~  #使用~表示null
string:
    - 哈哈
    - 'Hello world'  #可以使用双引号或者单引号包裹特殊字符
    - newline
      newline2    #字符串可以拆成多行,每一行会被转化成一个空格
date:
    - 2018-02-17    #日期必须使用ISO 8601格式,即yyyy-MM-dd
datetime: 
    -  2018-02-17T15:02:31+08:00    #时间使用ISO 8601格式,时间和日期之间

使用T连接,最后使用+代表时区

2、实例详细

pip install pyyaml

注意:安装的包名为 pyyaml,但是导入的是 yaml

yaml 文件可以通过 open 函数来读取,然后通过 load() 方法转换成字典
如下图实例

A1

import yaml

f = open("ddt_data.yaml", encoding="utf8")
print(yaml.load(f))
f.close()

# 运行结果如下
"""
[{
'url': 'http://cms.duoceshi.cn/xxx/xxxx/xxxxx', 
'method': 'post', 
'header': {'Content-Type': 'application/x-www-form-urlencoded'}, 
'params': {'userAccount': 'admin', 'loginPwd': 123456}
}]
"""

如下图为我的数据文件,且文件中数据类型为字典

A2

import requests
import unittest
from ddt import ddt, file_data

@ddt
class CmsLogin(unittest.TestCase):

    @file_data("ddt_data.yaml")
    def testcase(self, method, url, header, params):
        res = requests.request(method, url, headers=header, data=params)
        print(res.text)

if __name__ == '__main__':
    unittest.main()

# 运行结果如下
"""
Ran 2 tests in 0.215s

..
{"code":"200","msg":"登录成功!","model":{}}
{"code":"400","msg":"登录帐号不存在!","model":{}}
----------------------------------------------------------------------
"""

如下图为我的数据文件,且文件中数据类型为列表

A3

import yaml
from ddt import ddt, data, unpack

def get_yml_data(yml_file):
    with open(yml_file, encoding="utf8") as f:
        return yaml.load(f)

@ddt
class CmsLogin(unittest.TestCase):

    @data(*get_yml_data("ddt_data.yml"))
    @unpack
    def testcase(self, name, age):
        print(name + "----" + str(age))

if __name__ == '__main__':
    unittest.main()

# 运行结果如下
"""
Ran 3 tests in 0.000s

...
Evan----19
Lvan----20
Alex----21
"""
下面是我整理的2023年最全的软件测试工程师学习知识架构体系图

一、Python编程入门到精通

请添加图片描述

二、接口自动化项目实战

请添加图片描述

三、Web自动化项目实战

请添加图片描述

四、App自动化项目实战

请添加图片描述

五、一线大厂简历

请添加图片描述

六、测试开发DevOps体系

请添加图片描述

七、常用自动化测试工具

请添加图片描述

八、JMeter性能测试

请添加图片描述

九、总结(尾部小惊喜)

生命的意义在于奋斗,拥抱挑战,超越自我。跨越艰难,攀登巅峰,用汗水书写辉煌的传奇。相信自己的力量,坚持不懈,绽放梦想的光芒,让每一次努力都成为自己成长的里程碑!

积极拥抱挑战,不畏困难努力前行。胜利属于勇敢者,成功源于不懈奋斗。牢记初心使命,砥砺前行,用汗水浇灌理想的花朵,绽放生命的壮丽篇章。

勇往直前,不屈不挠,奋斗的汗水浇灌希望的花朵。追逐梦想,超越自我,用拼搏书写属于自己的传奇篇章。每一次努力都是收获的种子,坚信奋斗,未来必将绽放出耀眼的光芒!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/804227.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

matplotlib从起点出发(5)_Tutorial_5_sytleSheets

1 使用样式表和rcParams自定义matplotlib 以下是自定义matplotlib的属性和默认样式的提示。 有三种方式来自定义matplotlib: 在运行时设置rcParams&#xff1b;使用样式表&#xff1b;改写matplotlibrc文件。 在运行时设置rcParams优先于样式表&#xff0c;样式表优先于matp…

用户分享|当我升级了 CloudQuery 2.2.0 后......

导读&#xff1a; 7 月 13 日&#xff0c;CloudQuery&#xff08;下文简称 CQ&#xff09; 2.2.0 版本正式发布&#xff0c;在看到官方文档对新版本的介绍后&#xff0c;马上进行安装测试。本文主要为大家介绍从 CQ 1.4.2 升级到 2.2 的考量因素、测试情况&#xff0c;分享一些…

SCO 267,1656261-09-4,是一种变构GPR40全激动剂

资料编辑|陕西新研博美生物科技有限公司小编MISSwu 产品结构式&#xff1a; ​ 产品规格&#xff1a; SCO-267 1.CAS号&#xff1a;1656261-09-4 2.分子式&#xff1a;C36H46N4O5 3.分子量&#xff1a;614.79 4.包装规格&#xff1a;1g、5g、10g&#xff0c;包装灵活 5.外观颜…

【图像分类】CNN + Transformer 结合系列.1

介绍三篇结合使用CNNTransformer进行学习的论文&#xff1a;CvT&#xff08;ICCV2021&#xff09;&#xff0c;Mobile-Former&#xff08;CVPR2022&#xff09;&#xff0c;SegNetr&#xff08;arXiv2307&#xff09;. CvT: Introducing Convolutions to Vision Transformers, …

ping命令

上图为IA ping B的过程&#xff0c;在此过程中&#xff1a; 包传送在x位置时&#xff0c;DestMacB左&#xff0c;SourceMacMac_A&#xff0c;Dest ipIp_B,Src_ipIp_A包传送在y位置时&#xff0c;DestMacB右&#xff0c;SourceMacB左 &#xff0c; Dest ipIp_B,Src_ipIp_A MAC…

想学Python高级编程?这个技巧你不能错过!

前言 熟悉Python的朋友都知道&#xff0c;Python有一个让人又爱又恨的特点&#xff1a;数据类型的定义和使用非常的灵活。 在编写一个简易脚本的时候&#xff0c;这个特点让编程难度显著下降&#xff1b;但如果你需要编写一个大型程序&#xff0c;而且还需要多人协作时&#…

电磁波定义、特性以及信道相关知识

文章目录 前言一、电磁波的定义、特性、波谱1、电磁波的特性2、电磁波谱的划分及用途 二、地球大气层的结构三、电磁波的传播方式1、地波&#xff08;ground-wave&#xff09;2、天波&#xff08;sky-wave&#xff09;3、视线传播&#xff08;line-of-sight&#xff09;①、相关…

Spread for Winform 16.2.20231.0 (SP2) Crack

Spread for Winform 16.2.20231.0 (SP2)发布。此版本包含针对客户报告的问题的重要修复&#xff1a; 安装版本 16 后&#xff0c;FarPoint.Localization.dll 将丢失。 将数据绑定到 Spread 时会出现 InvalidOperationException。 通过 Spread Designer 设置的上标将不会保留。…

视频加密的两种常见的方式数字版权管理和加密算法与应用

视频加密的两种常见的方式数字版权管理和加密算法与应用实例&#xff1a; 数字版权管理&#xff08;DRM&#xff09;对视频做加密处理。 数字版权管理是指使用数字版权管理技术对视频内容进行加密和保护。这可以通过给视频文件添加特殊的加密标识符、许可证或者限制访问的方式…

SpringBoot——整合Redis

简单介绍 redis是一款key-velue存储结构的内存级NoSQL数据库 - 支持多种数存储格式- 支持持久化- 支持集群 简单理解成一个大Map&#xff0c;反正我就是这么理解的。当然他的内部有很多复杂的数据类型和操作&#xff0c;咱们在这里就不过多赘述了。 安装并简单的使用Redis …

JVM-类加载

1.了解冯诺依曼计算机结构 1.1计算机处理数据过程 (1)提取阶段:由输入设备把原始数据或信息输入给计算机存储器存起来 (2)解码阶段:根据CPU的指令集架构(ISA)定义将数值解译为指令 (3)执行阶段:再由控制器把需要处理或计算的数据调入运算器 (4)最终阶段:由输出设备把最后运…

postgresql13远程连接报错 Connection to 117.50.184.237:5432 refused. Check that the hostname and port are c

报错信息 Connection to hostname:port refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections. Connection refused: no further information 解决方案 修开配置文件 vim /var/lib/pgsql/13/data/postgresql.conf…

二叉树某个节点的深度

微信公众号&#xff1a;码云成化 关注可了解更多的教程及进阶技巧。问题或建议&#xff0c;请公众号留言;如果你觉得阿云对你有所帮助&#xff0c;欢迎赞赏 深度的定义 [ 当前结点的层数。默认叶子节点是 null 节点&#xff0c;深度是 0 。其子节点是 null 节点&#xff0c;深…

JAVA基础-多线程入门(详解)

目录 引言 一&#xff0c;线程概念 二&#xff0c;创建线程 2.1&#xff0c;继承Thread类&#xff0c;重写run方法 2.2&#xff0c;实现Runnable接口&#xff0c;重写run方法&#xff0c;实现Runnable接口的实现类的实例对象作为Thread构造函 数的target 2.3&#xff0c;通…

【Vuvuzela 声音去噪算法】基于流行的频谱减法技术的声音去噪算法研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

C# SourceGenerator 源生成器初探

简介 注意&#xff1a; 坑极多。而且截至2023年&#xff0c;这个东西仅仅是半成品 利用SourceGenerator可以在编译结束前生成一些代码参与编译&#xff0c;比如编译时反射之类的&#xff0c;还有模板代码生成都很好用。 演示仓库传送门-Github-yueh0607 使用 1. 创建项目 …

EPICS asyn测试程序--如何连接asynManager

这是一个如何连接asynManager的示例。这个示例放在<top>/testApp中并且包含以下组件&#xff1a; rootorangepi5:/usr/local/EPICS/program/asynTest/testApp# ls -R .: Db Makefile src./Db: Makefile test.db./src: echoDriver.c echoDriver.dbd Makefile testM…

3.Java面试题—JVM基础、内存管理、垃圾回收、JVM 调优

本文目录如下&#xff1a; 七、JVM一、JVM 基础什么是Java虚拟机?Java对象 创建过程?对象有哪几种引用&#xff1f; 二、内存管理说⼀下 JVM 的内存区域 (堆 和 栈)&#xff1f;内存溢出 和 内存泄漏 是什么意思&#xff1f;内存泄漏可能由哪些原因导致呢&#xff1f;Java 堆…

OceanMind海睿思助力南京钢铁苏粮集团入选中国信通院审计“领航”案例

近日&#xff0c;由中国内部审计协会指导&#xff0c;中国信息通信研究院主办的2023年内部审计数字化转型“领航”案例征集结果公布。 其中&#xff0c;中新赛克海睿思参与建设的《南京钢铁-基于数字化审计为核心的全域风控管理》入选标杆案例&#xff0c;《苏粮集团-风控内控合…

Vue中使用echarts

1 安装 npm install -g cnpm --registryhttps://registry.npm.taobao.org cnpm install echarts -S 2 main.js引入 3 引入成功