pytest框架

发布时间 2023-10-30 18:34:00作者: 琉璃星眸
pytest 安装
a)安装
pip install pytest
b)验证安装
pytest --version
1、pytest的⽤例运⾏规则
1)pytest将在当前⽬录及其⼦⽬录中运⾏所有格式为test.py或者test.py⽂件
2)测试⽅法/测试函数 默认必须是test开头
3) 测试类必须是Test开头
4) 测试类不能有构造⽅法 init,会影响用例的收集
2、pytest常⽤运⾏参数
"-s" 参数 ⽤于关闭捕捉,从⽽输出打印信息到控制台,如果不输入【-s】,测试报告中会捕捉打印信息,输入后不再捕捉打印信息
"-v" 参数 ⽤于显⽰具体的⽤例执⾏信息‘
“-k” 参数+用例名:运⾏名称中包含某字符串的测试⽤例
"-q"参数:简化输出信息
“-x” 参数: 如果出现⼀条测试⽤例失败,则退出测试

 指定⽬录以及特定类或⽅法执⾏
pytest.main(['-s','./doc/test_112233.py::TestDemo::test_case_03'])

3、使用main运行的时候,是按照层级依次往下查找的,不会往上查找(***同一个目录下,最好只有一个main文件和用来执行框架***

if __name__ == '__main__':

    pytest.main(['-s'])

 图中这种层级,运行了4个同级的文件和一个下级test_112233.py文件,自动寻找Test_开头或者_Test结尾的类,和test_开头或_test结尾的方法/函数。

4、生成简单报告

pytest.main(['--junit-xml=./report/junit_report01.xml'])

5、执行失败控制

# 用例失败控制
    # pytest.main(['--maxfail=1'])  # 执行的时候最大失败次数为1,失败1条就停止运行。

6、通过标记表达式取执行,

  通常用来版本控制,比如V1.0和V2.0版本的用例在一个文件中,只想执行V2.0的时候,表达式取V2.0

  先在项目中建立一个简单文件,命名为pytest.ini 的配置文件。写入一些信息。如下:

  (***同一个目录下,最好只有一个main文件和pytest.ini用来执行框架***

[pytest]
markers =
    smoke: marks tests as smoke
    slow
    happy
    serial

然后在脚本文件的用例前加装饰器

 然后执行,用标记表达式执行

# pytest.main(['-m', 'smoke'])

  7、指定.py文件执行

if __name__ == '__main__':
    pytest.main(['test_many.py'])     # 直接填写[".py文件名"]

8、多线程执行

    
# 需要先安装对应插件 pytest-xdist: pip install pytest-xdist(不安装会报错)
# 将测试执行发送给多个CPU
    # pytest.main(['-n', '2', 'test_many.py'])

    # 使用与计算机具有CPU内核一样多的进程
    # pytest.main(['-n', 'auto', 'test_many.py'])

9、失败重新运行用例

pytest-rerunfailures是⼀个可以使pytest重新运⾏测试的插件,以消除间歇性故障。
安装要求:
您需要具备以下先决条件才能使⽤pytest-rerunfailures:
安装:pip install pytest-rerunfailures
Python 3.5,最⾼3.8或PyPy3
pytest 5.0或更⾼版本
if __name__ == '__main__':
    # 重新运行失败的用例,指定失败次数最大为3
    # pytest.main(['--reruns', '3', 'test_rerun.py'])

    # 在每次失败重跑之前,增加一个延迟时间
    pytest.main(['--reruns', '3', '--reruns-delay', '2', 'test_rerun.py'])

10、pytest的setup和teardown函数

  ***自动化中的用途,举例:比如setup用作用例执行前的数据处理,,teandown用来关闭浏览器***

    不同的setup函数不要混用,在最新版本中,是不支持混用的
    setup_module/teardown_module:在当前文件中,所有的用例执行之前执行
    setup_function/teardown_function:在每个测试函数之前和之后执行
    setup_method/teardown_method:在每个测试函数之前和之后执行(在类中每次都执行,在类的外面,只执行一次)
 
  # 在每个测试函数之前和之后执行(在类中每次都执行,在类的外面,只执行一次)
类的外面:setup和teardown只运行一次

 类的里面:setup和teardown每次都执行