pytest实践

pytest是一个非常成熟的全功能的Python测试框架,很多优秀源码如requests都在使用

安装

pip install pytest

编写规则

编写pytest测试样例非常简单,只需要按照下面的规则:

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

fixture的scope参数

scope参数有四种,分别是'function','module','class','session',默认为function。

  • function:每个test都运行,默认是function的scope
  • class:每个class的所有test只运行一次
  • module:每个module的所有test只运行一次
  • session:每个session只运行一次

setup和teardown操作

  • setup,在测试函数或类之前执行,完成准备工作,例如数据库链接、测试数据、打开文件等
  • teardown,在测试函数或类之后执行,完成收尾工作,例如断开数据库链接、回收内存资源等
  • 备注:也可以通过在fixture函数中通过yield实现setup和teardown功能

一、函数级的(setup_function、teardown_function)只对函数用例生效,而且不在类中使用

二、类级的(setup_class、teardown_class)在类中使用,类执行之前运行一次,类执行之后运行一次

三、类中方法级的(setup_method、teardown_method)在每一个方法之前执行一次,在每一个方法之后执行一次

四、模块级的(setup_module、teardown_module)全局的,在模块执行前运行一遍,在模块执行后运行一遍

如何执行

  • pytest # run all tests below current dir
  • pytest test_mod.py # run tests in module file test_mod.py
  • pytest somepath # run all tests below somepath like ./tests/
  • pytest -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
  • pytest 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对test方法分类执行

通过@pytest.mark控制需要执行哪些feature的test,例如在执行test前增加修饰@pytest.mark.website

  • 通过 -m "website" 执行有website标记的test方法

通过 -m "not website" 执行没有website标记的test方法

Console参数介绍

  • -v 用于显示每个测试函数的执行结果
  • -q 只显示整体测试结果
  • -s 用于显示测试函数中print()函数输出
  • -x, --exitfirst, exit instantly on first error or failed test
  • -h 帮助

实时打印日志

pytest pytest_lean2.py -o log_cli=true -o log_cli_level=DEBUG

程序中使用logging.debug()即可以看到打印信息

 

测试报告

安装与样例

pip install pytest-cov # 计算pytest覆盖率,支持输出多种格式的测试报告
pytest --cov-report=html --cov=./ test_code_target_dir

.conftest

 上面的案例都是写在同一个.py 文件内的。倘若有多个.py 文件需要调用 login() 方法,就必须把 login() 方法写在外面,这里引用了conftest.py 配置文件。test_xxx.py 测试文件中无需 import  conftest,pytest 会自动搜索同级目录中的 conftest.py 文件。

 conftest.py 与 测试文件 目录层级关系

# 新建conftest.py,和 test_sample.py 同级目录
import pytest

@pytest.fixture(scope='function')
def login():
    print("登录")




# test_sample.py 代码如下
import pytest

def test_1():
    print('测试用例1')

def test_2(login):
    print('测试用例2')

if __name__ =="__main__":
    pytest.main(['test_sample.py','-s'])

 

pycharm配置,工具中选择

1.运行后生成测试报告(htmlReport)

安装pytest-html:

 

pip install -U pytest-html

运行模式:

 

pytest --html=report.html

模式1:直接运行test_se.py文件中的所有cases:

 

pytest test_se.py

模式2:运行test_se.py文件中的TestClassOne这个class下的两个cases:

 

pytest test_se.py::TestClassOne

模式3:运行test_se.py文件中的TestClassTwo这个class下的test_one:

 

pytest test_se.py::TestClassTwo::test_one

注意:定义class时,需要以T开头,不然pytest是不会去运行该class的。

3.多进程运行cases

  当cases量很多时,运行时间也会变的很长,如果想缩短脚本运行的时长,就可以用多进程来运行。

安装pytest-xdist:

 

pip install -U pytest-xdist

运行模式:

 

pytest test_se.py -n NUM

其中NUM填写并发的进程数。

4.重试运行cases

  在做接口测试时,有事会遇到503或短时的网络波动,导致case运行失败,而这并非是我们期望的结果,此时可以就可以通过重试运行cases的方式来解决。

安装pytest-rerunfailures:

 

pip install -U pytest-rerunfailures

运行模式:

 

pytest test_se.py --reruns NUM

NUM填写重试的次数。

 

参考

作者:呆呆冬
链接:https://www.jianshu.com/p/932a4d9f78f8
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


作者:呆呆冬
链接:https://www.jianshu.com/p/932a4d9f78f8
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


作者:呆呆冬
链接:https://www.jianshu.com/p/932a4d9f78f8
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

作者:红薯爱帅
链接:https://www.jianshu.com/p/a754e3d47671
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


作者:红薯爱帅
链接:https://www.jianshu.com/p/a754e3d47671
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

作者:红薯爱帅
链接:https://www.jianshu.com/p/a754e3d47671
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


作者:红薯爱帅
链接:https://www.jianshu.com/p/a754e3d47671
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


作者:红薯爱帅
链接:https://www.jianshu.com/p/a754e3d47671
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


作者:红薯爱帅
链接:https://www.jianshu.com/p/a754e3d47671
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

参考文献

https://www.jianshu.com/p/a754e3d47671

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值