yuzhongdelei0 2020-07-04
用例编写规则:(按以下规则编写,否则pytest不会正常执行到用例)
文件名以 test_*.py 开头和 *_test.py 结尾的文件
函数 以test_开头
类 以Test开头,且不能包含 __init__ 方法
类里面的方法 以test_开头
所有的包 pakege 必项要有__init__.py 文件
断言必须使用assert(py的原生断言方法)
执行用例:(命令行)
查看帮助(可用参数): pytest -h (pytest --help)
执行某个目录下所有用例 : pytest (一般情况下都默认这样运行,默认查找所有符合的用例运行)
执行某个.py文件内用例: pytest xx.py
执行指定的文件内某个函数、方法: pytest test_demo.py::test_func 、pytest test_demo.py::TestClass::test_method (::表示某节点,可用来分隔使用,这样可以指定运行))
运行某个mark标记的用例: pytest -m login (运行所有被装饰器@pytest.mark.login修饰的用例,即只要用例前有这个装饰器标记的,都会被运行 )
运行用例遇到错误时立即停止: pytest -x test_demo.py(想不停止的话,就普通的运行就行:pytest)
运行用例达到指定错误数量时停止: pytest --maxfail=5(这表示用例运行达到5个错误时,会停止运行)
关闭信息: --tb=no
只输入assert的错误信息: --tb==short
用一行来展示错误信息: --tb=line (只显示错误的位置行数)
显示测试函数的执行速度: --duration=0
例:
新建test_demo.py
import pytest
class TestClass:
def test_one(self):
x = "helloworld"
assert ‘h‘ in x #断言h包含在x当中
if __name__ == "__main__":
pytest.main([‘-v‘,‘test_demo.py‘]) # -v 打印详细信息 #pytest.main()括号里面要传入list类型参数,否则运行完成后会有warning提醒
那么在编辑器pycharm内鼠标右键进行执行:(三种方式来执行:直接run,unittest,pytest)
随便写一个函数然后右键运行: 会出现:run 函数名
当脚本应用了unittest时,右键运行会出现: run ‘Unittests in xxx‘
那么:当脚本应用了pytest时,就要先设置运行器了:Setting--Tools--Python Integrated Tools--项目名称--Default test runner--选择py.test
然后鼠标选中要运行行,右键可见:run ‘py.test in xxx‘
用例执行的先后顺序:
新建demo.py:
import pytest
class TestLogin():
def test_d():
pass
def test_b():
pass
def test_a():
pass
def test_02():
pass
def test_01():
pass
if __name__ == "__main__":
pytest.main(‘-v‘,‘demo.py‘)
如果脚本如上:
执行后会按照脚本用例顺序执行(从上至下);
而不同于unittest(‘unittest中执行脚本用例时,根据用例的字母ASCII码的排序来执行,数字也按照数字从小到大来执行’)