ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

测试框架pytest(三)

2022-04-25 14:01:49  阅读:196  来源: 互联网

标签:__ 框架 get demo yaml pytest 测试 data


续上一篇,本章节讲参数化以及fixture

在测试过程中,我们经常会遇到一个接口或者业务过程需要重复不同传参的情况,pytest也是可以使用

装饰器@pytest.mark.parametrize来满足这种需求,例子如下


import pytest


def add_demo(a, b):
return a+b


@pytest.mark.smoke
class TestDemo:
@pytest.mark.parametrize("a,b,expected", [(3, 5, 8),
(-1, -2, -3),
(100, 200, 300), ],
ids=["level1", "level2", "level3"])
def test_add_demo(self, a, b, expected):
assert add_demo(a, b) == expected


if __name__ == "__main__":
pytest.main(['test_demo1.py', '-m', 'smoke'])
 

运行方式不再多说,看到如上编写方式,大家应该会觉得这样硬编码不太好,所以我们可以把数据的读取这一块提取出来,重新封装

新建一个数据读取文件get_data.py,我们使用yaml文件的方式当做数据源,其他方式比如excel或者从数据库中取都是类似的

  • 新建yaml数据源文件data.yaml
  • 获取数据源的数据
  • 讲获取的数据放到代码中

get_data.py代码如下,

import yaml


def get_data():
    return yaml.safe_load(open('data.yaml'))

整改后的test_demo.py代码如下:

import pytest
from get_data import get_data


def add_demo(a, b):
    return a+b


@pytest.mark.smoke
class TestDemo:
    @pytest.mark.parametrize("a,b,expected", get_data(),
                             ids=["level1", "level2", "level3"])
    def test_add_demo(self, a, b, expected):
        assert add_demo(a, b) == expected


if __name__ == "__main__":
    pytest.main(['test_demo1.py', '-v', '-m', 'smoke'])

具体的yaml文件编写规则格式如下:

  1. 大小写敏感
  2. 使用缩进表示层级关系,只要是左边对齐的一列数据都是同一个层级的
  3. 数据值前边必须有空格,作为分隔符,否则无法识别该字段值为一个属性(比如 port: 8082,8082前边必须最少有一个空格,可以有多个)
  4. 禁止使用tab缩进,只能使用空格键
  5. 字符串可以用也可以不用引号引起来
  6. 缩进长度没有限制,只要元素对齐就表示这些元素属于一个层级。
  7. 使用 # 表示注释

基本数据例子如下:

常量

server: 

ip: 127.0.0.1

列表:

list_number:
-
- 2 - 3 - 4 - - 0 - 3 - 5

字典

student:
  name: lisi
  age: 14
  home: sz

其他如json或者从数据库中取数据的方式都可以单独封装在get_data.py文件里,使用类或者函数都可以。

 

标签:__,框架,get,demo,yaml,pytest,测试,data
来源: https://www.cnblogs.com/doumayi/p/16189946.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有