一篇文章教你pytest+yaml实现参数化

目录

一、使用背景

二、parametrize

三、yaml

四、将yaml数据转换成parametrize可读的列表形式

总结:


一、使用背景

当我们在设计用例的时候,经常会出现需要不同参数的情况,例如一个登录的用例,我们需要测试它登录名正常、为空、长度过长、过短、特殊字符等情况,因此就需要有不同情况下的参数,而当这些参数过多时,我们如果要一步一步的输入,便会显得有点繁琐,因此就需要有参数化的概念。这里用到pytest里的parametrize+yaml来实现参数化。

  Python自动化测试学习交流群:全套自动化测试面试简历学习资料获取点击链接加入群聊【python自动化测试交流】:http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=DhOSZDNS-qzT5QKbFQMsfJ7DsrFfKpOF&authKey=eBt%2BF%2FBK81lVLcsLKaFqnvDAVA8IdNsGC7J0YV73w8V%2FJpdbby66r7vJ1rsPIifg&noverify=0&group_code=198408628

一篇文章教你pytest+yaml实现参数化_第1张图片

 

二、parametrize

首先我们需要知道parametrize的用法。下面是官方文档中的说明

一篇文章教你pytest+yaml实现参数化_第2张图片

这里我总结了一下:

@pytest.mark.parametrize("参数名",列表数据)
参数名:用来接收每一项数据,并作为测试用例的参数。
列表数据:一组测试数据。

接下来直接用代码说明:

1

2

3

4

@pytest.mark.parametrize("a, b, c", [(1, 2, 3), (4, 5, 9), (1, 3, 6)])

def test_add01(a, b, c):

    res = a + b

    assert res == c

  

这里是比较a+b是否等于c,显然只有2个满足该条件,故断言只有2个通过  

运行结果:

一篇文章教你pytest+yaml实现参数化_第3张图片

三、yaml

能用来做参数化的形式其实有很多种,可以用xlrd读取excel表做参数化也可以。这里我选择用yaml来做参数化。因为yaml是一个可读性高,用来表达数据序列化的格式,它不是一门语言,跟json有点类似,是一种储存数据的载体,且支持多种语言,也比较容易理解。需要注意的是yaml比较注重格式,下面是yaml格式的一些基本语法:

一篇文章教你pytest+yaml实现参数化_第4张图片

 示例:

1

2

3

4

5

6

7

8

9

-

  - 1

  - 2

  - 3

-

  - 3

  - 4

  - 7

  

1

2

3

4

5

6

- case1:

  - search_key: "python"

- case2:

  - search_key: "ddt"

- case3:

  - search_key: "selenium"

  

四、将yaml数据转换成parametrize可读的列表形式

从上面我们知道了parametrize需要传一个数据参数 ,所以现在的关键点是怎么把yaml格式的数据转换成parametrize可接受的数据格式。

1

2

3

4

5

6

7

8

9

10

11

12

import yaml

def get_yaml(yaml_file):

    with open(yaml_file, "r", encoding="utf-8") as fp:

        = fp.read() # 读出来是字符串

        print(type(f))

    = yaml.load(f) # 转列表

    print("读取到yaml文件数据")

    print(d)

    print(type(d))

    return d

 封装一个方法,该方法用来将yaml中的数据转换成列表。上面的两个yaml示例转换成列表后如下:

一篇文章教你pytest+yaml实现参数化_第5张图片

 知道了yaml格式和如何转换yaml数据之后,接下来要实现用例的参数化就好办多了。

test_parametrize.py

1

2

3

4

5

6

7

8

9

import pytest

from testyaml import get_yaml

file = get_yaml("D:\\python project\\test\\test.yaml")

@pytest.mark.parametrize("a, b, c"file)

def test_add02(a, b, c):

    res = + b

    assert res == c

test_yaml

1

2

3

4

5

6

7

8

9

-

  - 1

  - 2

  - 3

-

  - 3

  - 4

  - 7

  运行测试用例后,可以看到有两组用例测试通过

一篇文章教你pytest+yaml实现参数化_第6张图片

 如果后续想继续加数据,可直接将数据写再yaml文件里即可。即实现了参数化功能,做到数据与代码分离。

总结:

感谢每一个认真阅读我文章的人!!!

我个人整理了我这几年软件测试生涯整理的一些技术资料,包含:电子书,简历模块,各种工作模板,面试宝典,自学项目等。欢迎大家点击下方名片免费领取,千万不要错过哦。

  Python自动化测试学习交流群:全套自动化测试面试简历学习资料获取点击链接加入群聊【python自动化测试交流】:http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=DhOSZDNS-qzT5QKbFQMsfJ7DsrFfKpOF&authKey=eBt%2BF%2FBK81lVLcsLKaFqnvDAVA8IdNsGC7J0YV73w8V%2FJpdbby66r7vJ1rsPIifg&noverify=0&group_code=198408628

一篇文章教你pytest+yaml实现参数化_第7张图片

你可能感兴趣的:(自动化测试,pytest,python,开发语言,自动化,android)