Pytest测试框架基本使⽤⽅法详解
pytest介绍
pytest是⼀个⾮常成熟的全功能的Python测试框架,主要特点有以下⼏点:
1、简单灵活,容易上⼿,⽂档丰富;
2、⽀持参数化,可以细粒度地控制要测试的测试⽤例;
3、能够⽀持简单的单元测试和复杂的功能测试,还可以⽤来做selenium/appnium等⾃动化测试、接⼝⾃动化测试(pytest+requests);
4、pytest具有很多第三⽅插件,并且可以⾃定义扩展
如pytest-selenium(集成selenium)、
pytest-html(完美html测试报告⽣成)、
pytest-rerunfailures(失败case重复执⾏)、
pytest-xdist(多CPU分发)、
pytest--ordering(控制测试运⾏的顺序)
5、测试⽤例的skip和xfail处理;
6、可以很好的和CI⼯具结合,例如jenkins
编写规则:
测试⽂件以test_开头(以_test结尾也可以)
测试类以Test开头,并且不能带有 init ⽅法
测试函数以test_开头
断⾔使⽤基本的assert即可
快速⽰例
test_pyexample.py
import pytest
class TestClass:
def test_one(self):
x = "this"
assert 'h' in x
def test_two(self):
x = "hello"
assert hasattr(x, 'check')
def test_three(self):
a = "hello"
b = "hello world"
assert a in b
通过命令⾏运⾏:
1、cd 到代码所在的⽬录,执⾏命令:py.test test_pyexample.py
2、安装pytest-sugar插件可以看到进度条
Pycharm配置运⾏:
1.file->Setting->Tools->Python Integrated Tools->项⽬名称->Default test runner->选择py.test
import pytest
class TestClass:
def test_one(self):
x = "this"
assert 'h' in x
def test_two(self):
x = "hello"
assert hasattr(x, 'check')
def test_three(self):
a = "hello"
b = "hello world"
assert a in b
if __name__ == "__main__":
pytest.main('-q test_class.py')
Console常⽤参数介绍:
-v ⽤于显⽰每个测试函数的执⾏结果
-q 只显⽰整体测试结果
-
s ⽤于显⽰测试函数中print()函数输出app接口测试工具
-x, --exitfirst, exit instantly on first error or failed test
-m 只运⾏带有装饰器配置的测试⽤例
-h 帮助
# the "string expression", e.g. "MyClass and not method"
# will st_something
# but st_method_simple
# only run test_func in test_mod.py
pytest参数化
使⽤装饰器:@pytest.mark.parametrize()
单个参数:
import pytest
import random
@pytest.mark.parametrize('x',[(1),(2),(6)])
def test_add(x):
print(x)
assert x==random.randrange(1,7)
多个参数:
import pytest
@pytest.mark.parametrize('x,y',[
(1+2,3),
(2-0,1),
(6*2,12),
(10*2,3),
("test","test"),
])
def test_add(x,y):  #必须与上⾯保持⼀致,只能⽤x,y不能⽤其他字母
assert x==y
控制测试运⾏顺序
安装pytest-ordering
pip install pytest-ordering
借助于装饰器@pytest.mark.run(order=1)控制测试运⾏的顺序import pytest
import time
value=0
@pytest.mark.run(order=2) #后执⾏order=2
def test_add2():
print("I am 2")
time.sleep(2)
assert value==10
@pytest.mark.run(order=1)  #先执⾏order=1
def test_add():
print("I am add")
global value
value=10
assert value==10
运⾏后⽣成测试报告(htmlReport)
安装pytest-html:
pip install -U pytest-html
如何使⽤:
更详细的测试报告
安装 pytest-cov:
pip install pytest-cov
如何使⽤
Console参数介绍
--cov=[path], measure coverage for filesystem path (multi-allowed), 指定被测试对象,⽤于计算测试覆盖率
--cov-report=type, type of report to generate: term, term-missing, annotate, html, xml (multi-allowed), 测试报告的类型
--cov-config=path, config file for coverage, default: .coveragerc, coverage配置⽂件
--no-cov-on-fail, do not report coverage if test run fails, default: False,如果测试失败,不⽣成测试报告
--cov-fail-under=MIN, Fail if the total coverage is less than MIN. 如果测试覆盖率低于MIN,则认为失败
多进程运⾏
安装pytest-xdist:
pip install -U pytest-xdist
如何使⽤:
其中NUM填写并发的进程数。
重新运⾏失败的⽤例
安装pytest- rerunfailures:
import random
def add(x,y):
return x+y
def test_add():
random_value=random.randint(2,7)
print('random_value:'+str(random_value))
assert add(1,3)==random_value
如何使⽤:
命令:pytest --reruns 重试次数
  ⽐如:pytest --reruns 3  表⽰:运⾏失败的⽤例可以重新运⾏3次
命令:pytest --reruns 重试次数 --reruns-delay 次数之间的延时设置(单位:秒)
  ⽐如:pytest --reruns 3 --reruns-delay 5  表⽰:(译:瑞软四、地类)运⾏失败的⽤例可以重新运⾏3次,第⼀次和第⼆次的间隔时间为5秒钟
另外也可以通过装饰器的⽅式配置:
@pytest.mark.flaky(reruns=3, reruns_delay=5)
以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。