1.什么是pytest?
pytest是一个python的一个自动化测试框架,主要用于单元测试和功能测试。
java: junit 或者 testng
python: unittest 或者 pytest
2.pytest有哪些特点?
pytest是一个非常成熟的全功能的Python测试框架,主要特点有以下几点:
1.免费
2.简单灵活,容易上手,文档丰富
3.插件丰富,目前已有600+
- pytest-selenium(集成selenium)、
- pytest-html(完美html测试报告生成)、
- pytest-rerunfailures(失败case重复执行)、
- pytest-xdist(测试用例分布式执行,多cpu分发)
- allure-pytest(用于生成美观的测试报告)
- pytest-ordering (改变测试用例的执行顺序)
4. 支持参数化,可以有效的控制测试用例。
5. 能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试、接口自动化测试(pytest+requests。
6、可以很好的和CI工具结合,例如jenkins
7.Pytest可用于在API,数据库等上测试各种应用程序
8.Pytest能够在测试执行期间从所有测试方法中跳过一些测试方法
9.Pytest可以根据条件选择运行特定的测试方法或特定测试文件的所有测试方法
3. 如何安装pytest
首先用命令行查看是否已经安装:
pip list
如果没有安装用命令行进行安装:
pip install pytest
检查是否安装了正确的版本:
pytest --version
查看有哪些命令参数:
pytest --help
4. 创建测试用例
4.1 第一个测试用例-简单测试
创建一个.py 文件,写入如下代码:
def add(x,y):
return x+y
def test1():
assert 2==add(1,1)
def test2():
assert 1!=add(1,1)
打开终端用pytest执行文件代码:
pytest -vv D:\pythonProject1\test_func.py
4.2 第二个测试用例-错误测试
def add(x,y):
return x+y
def test1():
assert 3==add(1,1)
def test2():
assert 1!=add(1,1)
用pytest再次执行:
pytest -vv D:\pythonProject1\test_func.py
4.3 第三个测试用例-传入参数的异常测试
import pytest
def add(x,y):
return x+y
def test1():
assert 2==add(1,1)
def test2():
assert 1!=add(1,1)
def func(x):
if x==0:
raise ValueError("value error")
else:
pass
def test_mytest1():
with pytest.raises(ValueError):
func(0)
def test_mytest2():
assert func(1)==None
用pytest执行代码:
4.4 第四个测试用例-不同参数传递测试
import pytest
def add(x,y):
return x+y
def test1():
assert 2==add(1,1)
def test2():
assert 1!=add(1,1)
def func(x):
if x==0:
raise ValueError("value error")
else:
pass
def test_mytest1():
with pytest.raises(ValueError):
func(0)
def test_mytest2():
assert func(1)==None
@pytest.mark.parametrize(
"x,y,expected",
[
(1,1,2),
(2,2,4),
(10,10,20),
]
)
def test_add(x,y,expected):
assert add(x,y) == expected
用pytest执行代码:
4.5 第五个测试用例-分组测试
如果测试文件中有100个函数,但是我仅仅想测试其中几个函数,如何去做?这就需要对这些函数进行分组,用到的命令如下:
pytest --markers
import pytest
def add(x,y):
return x+y
@pytest.mark.a
def test1():
assert 2==add(1,1)
@pytest.mark.a
def test2():
assert 1!=add(1,1)
def func(x):
if x==0:
raise ValueError("value error")
else:
pass
def test_mytest1():
with pytest.raises(ValueError):
func(0)
def test_mytest2():
assert func(1)==None
@pytest.mark.parametrize(
"x,y,expected",
[
(1,1,2),
(2,2,4),
(10,10,20),
]
)
def test_add(x,y,expected):
assert add(x,y) == expected
执行代码:
pytest -vv -m "a"