微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

测试框架pytest(三)

上一篇,本章节讲参数化以及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或者从数据库中取都是类似的

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文件里,使用类或者函数都可以。

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐