我们知道在unittest中,跳过用例可以用skip ,那么这同样是适用于pytest 。
来看怎么使用:
跳过用例,我们使用@pytest.mark.skipif(condition, reason) :
然后将它装饰在需要被跳过用例的的函数上面 。
效果如下:
上例执行结果相对详细 , 因为我们在配置文件中为addopts 增加了 -v ,之前的示例结果中,没有加!
另外,此时,在输出的控制台中,还无法打印出 reason 信息,如果需要打印,则可以在配置文件中的 addopts 参数的 -s 变为 -rs :
如果我们事先知道测试函数会执行失败,但又不想直接跳过,而是希望显示的提示 。
Pytest 使用pytest.mark.xfail 实现预见错误功能::
需要掌握的必传参数的是:
那么关于预期失败的几种情况需要了解一下:
结果如下:
pytest 使用x表示预见的失败(XFAIL) 。
如果预见的是失败,但实际运行测试却成功通过 , pytest 使用X进行标记(XPASS) 。
而在预期失败的两种情况中,我们不希望出现预期失败,结果却执行成功了的情况出现 , 因为跟我们想的不一样嘛,我预期这条用例失败,那这条用例就应该执行失败才对,你虽然执行成功了,但跟我想的不一样,你照样是失败的!
所以 , 我们需要将预期失败,结果却执行成功了的用例标记为执行失败,可以在pytest.ini 文件中,加入:
这样就就把上述的情况标记为执行失败了 。
pytest身为强大的单元测试框架,那么同样支持DDT数据驱动测试的概念 。也就是当对一个测试函数进行测试时,通常会给函数传递多组参数 。比如测试账号登陆,我们需要模拟各种千奇百怪的账号密码 。
当然,我们可以把这些参数写在测试函数内部进行遍历 。不过虽然参数众多,但仍然是一个测试,当某组参数导致断言失败,测试也就终止了 。
通过异常捕获,我们可以保证程所有参数完整执行,但要分析测试结果就需要做不少额外的工作 。
在 pytest 中,我们有更好的解决方法,就是参数化测试,即每组参数都独立执行一次测试 。使用的工具就是pytest.mark.parametrize(argnames, argvalues)。
使用就是以装饰器的形式使用 。
只有一个参数的测试用例
来看(重要部分)结果::
可以看到,列表内的每个手机号,都是一条测试用例 。
多个参数的测试用例
(重要部分)结果:
可以看到,每一个手机号与每一个验证码都组合一起执行了,这样就执行了4次 。那么如果有很多个组合的话 , 用例数将会更多 。我们希望手机号与验证码一一对应组合,也就是只执行两次,怎么搞呢?
在多参数情况下,多个参数名是以, 分割的字符串 。参数值是列表嵌套的形式组成的 。
固件(Fixture)是一些函数,pytest 会在执行测试函数之前(或之后)加载运行它们,也称测试夹具 。
我们可以利用固件做任何事情,其中最常见的可能就是数据库的初始连接和最后关闭操作 。
Pytest 使用pytest.fixture()定义固件,下面是最简单的固件,访问主页前必须先登录:
结果:
在之前的示例中,你可能会觉得,这跟之前的setup和teardown的功能也类似呀,但是,fixture相对于setup和teardown来说更灵活 。pytest通过scope 参数来控制固件的使用范围 , 也就是作用域 。
比如之前的login固件,可以指定它的作用域:
很多时候需要在测试前进行预处理(如新建数据库连接) , 并在测试完成进行清理(关闭数据库连接) 。
当有大量重复的这类操作,最佳实践是使用固件来自动化所有预处理和后处理 。
推荐阅读
- 河北网站开发,河北网址大全
- sqlserver2008编辑内容,sqlserver2008编辑所有行
- 直播用什么耳机转换器好,直播专用耳机什么牌子好
- 桃源记游戏经营,桃源记 游戏
- c语言函数来写最大公约数 c语言函数最大公约数和最小公倍数
- 云GIS对GIS的发展影响,gis与云计算
- mysql读取数据乱码问题,mysql数据库读取
- 怎么看mysql是否装好 怎么查看mysql是否安装
- 为什么手机下载的软件不在桌面上,为什么手机下载的软件不在桌面上显示