接口自动化测试(三)_pytest参数化,skip/xfail,用例执行顺序

一.pytest参数化

比如说登录,正确的用户名/密码和错误的用户名/密码是两组不同的参数,通过不同的参数驱动测试用例,这就是pytest的参数化。
先尝试传一个参数看看,用@pytest.mark.parametrize()方法

接口自动化测试(三)_pytest参数化,skip/xfail,用例执行顺序

再来试试多参数多值,一个参数对应一个值,此时在后面的列表里存放元组(列表也行,不一定要是元组),每一个元组中的数据对应上前面的参数名

接口自动化测试(三)_pytest参数化,skip/xfail,用例执行顺序

多参数对应多值,每个参数对应多个值,在列表里存放多个元组,对应的,用例依照元组个数执行多次

接口自动化测试(三)_pytest参数化,skip/xfail,用例执行顺序
这边的写法可以是 @pytest.mark.parametrize('one,two',[(1,2),(5,88)])
也可以是 @pytest.mark.parametrize(['one','two'],[(1,2),(5,88)]),都是映射赋值

如果是给一个测试用例多个parametrize呢

接口自动化测试(三)_pytest参数化,skip/xfail,用例执行顺序

这边的参数还有几个特性:

  1. 只要定义了就一定要用到
  2. 测试用例里定义参数时,不能给参数默认值,比如def test_003(one,two=2)是不被允许的

这边的值有以下几个特性:

  1. 如果使用到元组的话,元组里的个数与参数个数必须相等,像’a,b’ [(1,2,3)],两个参数对上三个值,会报错
  2. 可以用元组,列表来装值,也可以用集合set()来装,但不推荐,set会去重
  3. 如果参数只有一个,可以有多个值与其对应,如 @pytest.mark.parametrize('one_parma',['test',1,2,3])

用例代码:

import pytest

@pytest.mark.parametrize('one_parma',['test',1,2,3])
def test_param(one_parma):
    assert  one_parma == 'test'

@pytest.mark.parametrize('one,two',[(1,2)])
def test_002(one,two):
    assert  one+1==two

@pytest.mark.parametrize(['one','two'],[(1,2),(5,88)])
def test_003(one,two):
    assert  one+1==two

@pytest.mark.parametrize('a',[1,2,3])
@pytest.mark.parametrize('b,c',[(4,5),(6,7)])
def test_004(a,b,c):
    print(a,b,c)

二.pytest常用标记skip,xfail

skip标记: 只有当满足某条件时才执行测试用例,否则跳过执行这个用例
xfail标记: 因为一个确切的原因,知道打上xfail标记的用例会失败,

skip

1.在用例上方加上@pytest.mark.skip()跳过执行该用例

接口自动化测试(三)_pytest参数化,skip/xfail,用例执行顺序
2.为skip添加条件,满足条件则skip用例的执行
接口自动化测试(三)_pytest参数化,skip/xfail,用例执行顺序

3.skip的条件还可以定义在文件夹下面的公共函数conftest.py里面

接口自动化测试(三)_pytest参数化,skip/xfail,用例执行顺序

然后在相应的用例文件里调用一下定义的这个skip_reason,就可以跳过用例的执行了

接口自动化测试(三)_pytest参数化,skip/xfail,用例执行顺序

4.在类里使用skip
最基础的,在类上方加个skip,没啥好说的

接口自动化测试(三)_pytest参数化,skip/xfail,用例执行顺序

; xfail

1.先跑个简单的例子看看

接口自动化测试(三)_pytest参数化,skip/xfail,用例执行顺序

2.也可以把xfail写在函数内部,也会生效,xfail语句前的语句会执行,xfail后的语句不会执行

接口自动化测试(三)_pytest参数化,skip/xfail,用例执行顺序

skip里有skipif的用法,xfail也有类似的用法(注意不是xfailif),满足if条件就会执行xfail,认为用例将会执行失败,如果不满足条件的话就会报错

接口自动化测试(三)_pytest参数化,skip/xfail,用例执行顺序

xfail,skip与参数parametrize结合起来使用

其中用到了pytest.param来包装一组参数,并为这组参数使用了skip或者xfail的方法,具体用法可以搜下

接口自动化测试(三)_pytest参数化,skip/xfail,用例执行顺序
@pytest.mark.parametrize(
    'n,expected',
    [
        (1,1),
        pytest.param(2,1,marks=pytest.mark.xfail(),id='xfail'),
        pytest.param(3,3,marks=pytest.mark.skip,id='skip')
    ]
)
def test_conbine(n,expected):
    assert n == expected

三.pytest用例的执行顺序

首先,如果没有预先指定的话,pytest直接执行所有模块下的测试用例的话,它会把.py文件根据文件名的首字母排序,然后按顺序执行文件中的测试用例(也就是根据ACSCII码来排序,然后执行文件里的用例)。
其次,在文件内部,没有预先指定的情况下,pytest默认从上到下执行文件里的用例。

如果要人为指定运行顺序的话,先安装库pytest-ordering

接口自动化测试(三)_pytest参数化,skip/xfail,用例执行顺序

然后就可以在代码里使用方法pytest.mark.run(order=)来指定运行顺序

接口自动化测试(三)_pytest参数化,skip/xfail,用例执行顺序

; 四.生成测试报告

借助第三方插件 pytest-html

接口自动化测试(三)_pytest参数化,skip/xfail,用例执行顺序

然后在项目里新建一个reports文件夹,所有的测试报告都放在下面。并且新建一个run.py文件,用来运行指定的测试用例并最终生成测试报告。

接口自动化测试(三)_pytest参数化,skip/xfail,用例执行顺序

然后我们打开reports下面的html测试报告

接口自动化测试(三)_pytest参数化,skip/xfail,用例执行顺序

接口自动化测试(三)_pytest参数化,skip/xfail,用例执行顺序

Original: https://blog.csdn.net/qq_38175040/article/details/118539603
Author: 336699强强
Title: 接口自动化测试(三)_pytest参数化,skip/xfail,用例执行顺序

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/776324/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球