pytest的前置和后置的具体使用(pytest测试框架的基本使用与介绍)
pytest的前置和后置的具体使用(pytest测试框架的基本使用与介绍)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的内容,那么今天呢小编想好好的给大家介绍一下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()函数输出
-x  --exitfirst  exit instantly on first error or failed test
-m 只运行带有装饰器配置的测试用例
-h 帮助
    
py.test # run all tests below current dir
py.test test_mod.py # run tests in module file test_mod.py
py.test somepath # run all tests below somepath like ./tests/
py.test -k stringexpr # only run tests with names that match the
# the "string expression"  e.g. "MyClass and not method"
# will select TestMyClass.test_something
# but not TestMyClass.test_method_simple
py.test test_mod.py::test_func # only run tests that match the "node ID" 
# e.g "test_mod.py::test_func" will be selected
# only run test_func in test_mod.py
    

使用装饰器:@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
    
如何使用:
py.test test_pyexample.py --html=report.html
    
更详细的测试报告
安装 pytest-cov:
pip install pytest-cov 
    
如何使用
py.test --cov-report=html --cov=./ test_code_target_dir
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
    
如何使用:
py.test test_pyexample.py -n NUM
    
其中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)
    
好了,今天的分享就到这里了,各位大佬可以帮忙多多点赞和收藏,喜欢我的可以关注我哟。





