pytest框架学习1

1.pytest特点:

  1. 简单灵活,容易上手,文档丰富
  2. 支持参数化,可以细粒度地控制要测试的测试用例
  3. 支持简单的单元测试,复杂的功能测试,还可以做selenium/appnium等自动化测试,接口自动化测试(pytest+requests)
  4. pytest具有很多第三方库插件,并且可以自定义扩展。比较好用的如pytest-html(完美的html测试报告),pytest-rerunfailures(失败case重复执行),pytest-xdist(多CPU分发)等
  5. 测试用例的skip和xfail处理
  6. 很好的和CI工具结合,例如Jenkins

 

 

2.pytest用例编写规范:

  1. 测试文件以test开头(以test结尾也可以)
  2. 测试类以Test开头,并且不能带有init方法
  3. 测试函数以test_开头
  4. 断言使用基本的assert即可

 

3.Console参数介绍:

  1. -v 用于显示每个测试函数的执行结果
  2. -s 用于显示测试函数中print()函数输出
  3. -q 只显示测试整体测试结果
  4. -x,--exitfirst 在第一个错误或测试失败时立即退出
  5. -h 帮助

 

4.执行方法:

  1. 配置PyCharm执行:设置 -> 工具 -> 测试下拉框选择pytest
  2. main方法:pytest.main(['-s','-v','test1.py'])
  3. 命令行:pytest -s -v 模块名

 

实例:

import pytest


def test1():
    print("test1")

def test2():
    print("test2")


if __name__ == '__main__':
    pytest.main(['-sv','test1.py'])

pytest.main(['参数','模块名'])

 

5.给用例打标签:

注册标签通过.ini配置文件,格式如下:

保存文件pytest.ini

[pytest]
markers=
    do: do
    undo: undo

实例:

import pytest

@pytest.mark.do
def test1():
    print("test1")

@pytest.mark.undo
def test2():
    print("test2")


if __name__ == '__main__':
    pytest.main(['-sv','test1.py'])

控制台输入:pytest -m do test1.py

结果:标记为do的用例被执行了

 

6.pytest参数化处理

使用工具:pytest.mark.parametrize(argnames,argvalues)

argnames:表示参数名称,argvalues:表示参数值

数据可以是列表,元祖,字典或自定义id

实例:

import pytest

# 列表
data = ['123', '456']


@pytest.mark.parametrize('pwd', data)
def test1(pwd):
    print(pwd)


# 元祖
data2 = [
    (1, 2, 3),
    (4, 5, 6)
]


@pytest.mark.parametrize('a,b,c', data2)
def test2(a, b, c):
    print(a, b, c)


# 字典
data3 = (
    {'user': 1,
     'pwd': 2},
    {'age': 23,
     'email': 'tom@qq.com'}
)


@pytest.mark.parametrize('dic', data3)
def test3(dic):
    print(dic)


data_1 = [
    pytest.param(1, 2, 3, id="(a+b):pass"),  # id的值可以自定义 只要能清晰描述用例即可
    pytest.param(4, 5, 10, id="(a+b):fail")
]


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


class TestParametrize(object):
    @pytest.mark.parametrize('a, b, expect', data_1)
    def test_parametrize_1(self, a, b, expect):
        assert add(a, b) == expect

 

7.pytest fixture 实现用例之间的调用

  1. 定义fixture和定义普通的函数差不多,唯一的区别就是在函数上加个装饰器@pytest.fixture()
  2. fixture命名不要以test开头,跟用例区分,fixture是有返回值的,没有返回值默认为None
  3. 用例调用fixture的返回值,直接就把fixture的函数名称当做变量名称
posted @ 2020-11-10 20:46  海浪。  阅读(117)  评论(0)    收藏  举报