pytest

  • Pytest的特点与执行方式

pytest是python的第三方测试框架,是基于unittest的扩展框架,比unittest更简洁,更高效。灵活性比较好。使用python的原生断言,更易于我们理解。可以运行unittest和nose的测试用例,有很好的兼容性。插件丰富,比如flask插件,可以用于出错重跑。还有xdist插件,可以用于设备并行执行。

执行原理:

首先在所在目录下运行执行命令(比如pytest或者pytest –q下文介绍了其他特殊运行命令),
则会执行当前目录及其子目录下以test开头或者以test结尾的py文件中test开头的函数。

也就是说pytest会递归查找当前文件以及子文件夹下面所有的test_开头的py文件或_test结尾的py文件,把其当作测试文件。pytest会收集文件中的函数和方法,当作测试用例。

  • 关于pytest命令简介

在命令行中运行以下命令

pip install -U pytest

 

检查是否安装了正确的版本

$ pytest –version

显示可用的内置函数参数

pytest --fixtures # show available builtin function arguments

帮助

pytest -h | --help # show help on command line and config file options

停止第一次失败后的测试

pytest -x # stop after first failure

停止第二次失败后的测试(参数可以更改)

pytest --maxfail=2 # stop after two failures

运行

运行在模块

pytest test_mod.py

在目录下运行

pytest testing/

用关键字表达式运行测试

pytest -k "MyClass and not method"

在模块中运行特殊用例(指定模块)

pytest test_mod.py::test_func

指定方法

pytest test_mod.py::TestClass::test_method

三.pytest的几个常用的函数

1.pytest.approx:断言两个数字(或两组数字)在某个容差范围内彼此相等。

approx(expectedrel=Noneabs=Nonenan_ok=False)

2.pytest.fail:用明确的给定消息显示执行失败的测试。

fail(msg=''pytrace=True)

3.pytest.skip:使用给定消息跳过执行测试。

skip(msg[, allow_module_level=False])

4. pytest.xfail:测试用例预计是会失败的,在测试的时候会跳过该用例,显示原因。

xfail(reason='')

5. pytest.main:执行进程内测试运行后返回退出代码。

main(args=Noneplugins=None)

 

四.Marks常见用法

Marks:用于测试功能,可以通过fixture或插件来访问。

举个例子:

@pytest.mark.red
def some_test_method(self):

我们通过fixture对一个函数做了标记,但是如果我们想对这个函数做多个标记如下:

@pytest.mark.red
@pytest.mark.green
@pytest.mark.blue
@pytest.mark.black
@pytest.mark.orange
@pytest.mark.pink
def some_test_method(self):

 

这里我们可以安装pytest-marks实现简化

安装方法:

* pip install pytest-marks
* python setup.py install

 

我们就可以在一个装饰器中应用它们

@pytest.marks('red', 'green', 'blue', 'black', 'orange', 'pink')
def some_test_method(self):

 

下面我们再了解一下常见的mark用法:

1.pytest.mark.skip

无条件跳过

pytest.mark.skip(*reason=None)

参数:

reason (str) –跳过测试功能的原因。

2.pytest.mark.skipif

条件为真,则跳过。

pytest.mark.skipif(condition*reason=None)

参数:

  • 条件 (bool or str) – True/False 如果为真或者为str则跳过.
  • reason (str) –跳过测试功能的原因

举个例子:

显示我的python版本为3.6.6 大于3.3,所以跳过了。

3.pytest.mark.usefixtures:将测试函数标记为使用给定的fixture名称。

pytest.mark.usefixtures(*names)

参数:

args –要使用的fixture的名称,字符串

4.pytest.mark.xfail标记预计失败的测试函数。

pytest.mark.xfail(condition=None*reason=Noneraises=Nonerun=Truestrict=False)

 

Xfail的含义是我们预计这个测试用例是失败的,在执行测试用例的时候就跳过它,在最后失败的用例中不包括这个用例。

xfail 用法只需要在测试用例前加上@pytest.mark.xfail

使用命令py.test –runxfail强制运行标记xfail的测试用例。

也可以对预计失败进行条件限制,比如python版本3.3以上的话标记为xfail如下

@pytest.mark.xfail(sys.version_info>=(3,3),reason="python3.3 api changes")

 

五. fixture的常见用法
测试函数或其他fixture通过将它们声明为参数名称来请求fixture。可以把fixture当做一种资源,被定义为fixture的函数是测试用例的资源,将资源传到测试用例后运行;比如测试的环境需要打开浏览器去测试页面然后再关闭浏览器。那么每一条用例执行前都需要打开浏览器,执行完又都需要关闭浏览器,可以使用fixture设置为只在运行用例前打开一次浏览器,在用例结束后关闭一次浏览器。
 
1.作用:将函数定义成为参数形式,可以将其传入到其他函数中当参数去使用;
 
2.调用方式:
        1)在测试用例中直接调用。
 
        2)用fixture decorator调用,就是利用我们上文提到的pytest.mark.usefixtures.
 
结果也是一样的.
        3)用autos调用fixture
 
结果也是一样的,这里运用到了参数scope.
 

fixture作用域scope有4个参数

function:每个函数都会调用一次;

class:每一个类调用一次;

module:一个module是指一个文件,是一个文件调用一次;

session:范围最大,是多个文件调用一次;

3.Fixture返回值

fixture返回值默认为None,上面例子返回值也都为None,我们可以选择让fixture返回我们需要的东西。如果你的测试需要配置一些返回数据,比如读文件,连接数据库,那么你可以让fixture返回这些数据或资源。

 

   

params默认为None,我们可以把参数值赋值给params。Param中的每个数据,fixture都会遍历一遍,类似for循环。

通过参数request,得到被fixture标记的函数信息。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值