pytest 配置文件可以改变 pytest 的运行方式,它是一个固定的文件 pytest.ini 文件,读取配置信息,按指定的方式去运行。
ini 配置文件
pytest 里面有些文件是非 test 文件
pytest.ini pytest 的主配置文件,可以改变 pytest 的默认行为
conftest.py 测试用例的一些 fixture 配置
__init__.py 识别该文件夹为 python 的 package 包
tox.ini 不 pytest.ini 类似,用 tox 工具时候才有用
setup.cfg 也是 ini 格式文件,影响 setup.py 的行为
ini 文件基本格式
[pytest]
addopts = -rsxX
xfail_strict = true
用 pytest —help 指令可以查看 pytest.ini 的设置选项

--rsxX 表示 pytest 报告所有测试用例被跳过、预计失败、预计失败但实际被通过的原因
mark 标记
如下案例,使用了 2 个标签:webtest 和 hello,使用 mark 标记功能对于以后分类测试非常有用处

import pytest

@pytest.mark.webtest
def test_send_http():
print('mark web test') def test_something_quick():
pass def test_another():
pass @pytest.mark.hello
class TestClass:
def test_01(self):
print('hello :') def test_02(self):
print('hello world!') if __name__=='__main__':
pytest.main()

有时候标签多了,不容易记住,为了方便后续执行指令的时候能准确使用 mark 的标签,可以写入到 pytest.ini 文件

[pytest] 

markers = 
webtest: Run the webtest case
hello: Run the hello case
标记好之后,可以使用 pytest —markers 查看到
> pytest --markers @pytest.mark.webtest: Run the webtest case
@pytest.mark.hello: Run the hello case
@pytest.mark.skip(reason=None): skip the given test function with an optional reason. Example: skip(reason="no way of currently testing this") skips the test.
@pytest.mark.skipif(condition): skip the given test function if eval(condition) results in a True value. Evaluation happens within the module global context. Example: skipif('sys.platform == "win32"') skips the test if we are on the win32 platform. see http://pytest.org/latest/skipping.html
@pytest.mark.xfail(condition, reason=None, run=True, raises=None, strict=False): mark the test function as an expected failure if eval(condition) has a True value. Optionally specify a reason for better reporting and run=False if you don't even want to execute the test function. If only specific exception(s) are expected, you can list them in raises, and if the test fails in other ways, it will be reported as a true failure. See http://pytest.org/latest/skipping.html
@pytest.mark.parametrize(argnames, argvalues): call a test function multiple times passing in different arguments in turn. argvalues generally needs to be a list of values if argnames specifies only one name or a list of tuples of values if argnames specifies multiple names. Example:
@parametrize('arg1', [1,2]) would lead to two calls of the decorated test function, one with arg1=1 and another with arg1=2.see http://pytest.org/latest/parametrize.html for more info and examples.
@pytest.mark.usefixtures(fixturename1, fixturename2, ...): mark tests as needing all of the specified fixtures. see http://pytest.org/latest/fixture.html#usefixtures
@pytest.mark.tryfirst: mark a hook implementation function such that the plugin machinery will try to call it first/as early as possible.
@pytest.mark.trylast: mark a hook implementation function such that the plugin machinery will try to call it last/as late as possible. 最上面两个就是刚才写入到 pytest.ini 的配置了
禁用 xpass
设置 xfail_strict = true 可以让那些标记为@pytest.mark.xfail 但实际通过的测试用例被报告为失败 什么叫标记为@pytest.mark.xfail 但实际通过,这个比较绕脑,看以下案例
测试结果


import pytest

def test_hello():
print('hello world!')
assert 1 @pytest.mark.xfail()
def test_01():
a = 'hello'
b = 'hello world'
assert a==b @pytest.mark.xfail()
def test_02():
a = 'hello'
b = 'hello world'
assert a != b if __name__=='__main__':
pytest.main()
test_01 和 test_0 这 2 个用例一个是 a == b 一个是 a != b,两个都标记失败了,我们希望两个用例不用执行全部显示 xfail。实际上最后一个却显示 xpass.为了让两个都显示 xfail,那就加个配置xfail_strict = true
这样标记为 xpass 的就被强制性变成 failed 的结果

这样标记为 xpass 的就被强制性变成 failed 的结果

配置文件如何放
一般一个工程下方一个 pytest.ini 文件就可以了,放到顶层文件夹下

addopts
addopts 参数可以更改默认命令行选顷,这个当我们在 cmd 输入指令去执行用例的时候,会用到,比如我想测试完生成报告,指令比较长
> pytest -v --rerun 1 --html=report.html --self-contained-html
每次输入这么多,不太好记住,于是可以加到 pytest.ini 里

这样我下次打开 cmd,直接输入 pytest,它就能默认带上这些参数了(备注:--html=report.html 是生成 html 报告)

最新文章

  1. Xcode7建立自己的自定义工程和类模板
  2. 手机WebAPP设计注意事项和解决方法
  3. 更改ubuntu下mysql的密码
  4. 获取一个字符串Hello world中world首次出现的位置
  5. [APAC]自动发送邮件
  6. window下部署php_redis扩展
  7. PPT美化大师
  8. ubuntu12.04_64bit adb shell
  9. What are Upgrade, Product and Package Codes used for? By pusu
  10. VS 文件自动定位功能
  11. (转载)测试工具monkey
  12. java删除文件夹 Java中实现复制文件或文件夹
  13. 一个基于Behave框架的http接口测试实例
  14. 浏览器登录Dynamics 365 CE没毛病,程序连接却报错。
  15. 生成Csv格式的字符串
  16. Python学习之路——函数的参数分类
  17. PL/SQL Developer 破解方法~
  18. Kettle系列: kettle标准化trans模板
  19. Tomcat性能调优后, 启动出现警告问题 [did not find a matching property.]
  20. PowerDesigner V16.5 安装及汉化

热门文章

  1. Python/spss-多元回归建模-共线性诊断1(推荐A)
  2. ASP.Net WebAPI中添加helppage帮助页面
  3. 缓存方案 通过SqlDependency实现Cache和Database的同步
  4. JS中的call()方法和apply()方法用法总结
  5. mysql创建数据库指定编码格式
  6. Tomcat数据源的原理,配置及使用(JNDI)
  7. JavaScript之函数式编程思想初探
  8. HTML链接/实施CSS的三种方法
  9. mysql 案例~mysql主从复制延迟处理(2)
  10. MySQL内连接、外连接、交叉连接