08 自动化测试框架-03pytest框架

08 自动化测试框架-03pytest测试框架

为什么选择pytest

python的测试框架有:unnittest、pytest、nose。

unittest是Python所提供的标准的单元测试框架,一句话可以选择,Pytest则是基于unittest所研发出来的更好用的、更易用的测试框架,插件也更丰富。并且Pytest几乎兼容了unittest的所有特性,所以我们可以在pytest使用unnitest的特性,反之则不行。

使用pytest

  1. 安装

pip install pytest
2. 结构
测试文件名字不能一样,否则会报错,我这里写错了。
image.png
测试类必须以Test开头,并且不能带有init方法

从上面我们可以看到,我们需要了解的有

  • conftest
  • pytest的运行参数
  • pytest的用例文件名称

断言

assert 条件,条件不符合时的错误输出

# -*- coding: utf-8 -*-
import pytest

a=1
b=1
c=3

class TestDemo():

   def test_01(self):
       assert a==b, 'a不等于b'

   @pytest.mark.test
   def test_02(self):
       assert a==c, 'a不等于c'


if __name__ == '__main__':
   pytest.main(['-q', 'test_case_login.py'])
复制代码

查找用例

  1. pytest 目录

命令行:pytest test_case
会运行test_case下的所有test_开头或者_test结尾的测试文件
pytest.ini:

[pytest]
testpaths=./test_cases
复制代码
  1. 显式指定函数名,通过 :: 标记

命令行: pytest test_case::test_01
py文件: pytest.mian([‘test_case::文件名字’])

  1. –maxfail=1:出现1个失败就终止测试

  2. mark

我们可以给每个函数打上不同的标记,测试时指定就可以允许所有被标记的函数
一个函数可以打多个标记;多个函数也可以打相同的标记。

控制运行参数

  1. -s

默认情况,默认情况下你在用例中写的print或者log输出,都不会在测试结果中展示。

如果你想看到用例中的标准输出,那么需要加上-s参数

pytest test_login.py -s

pytest.main([’-s’, ‘test_login.py’])
复制代码
  1. -v

使用-v会让输出结果更详细,不用的时候一个文件占一行,而用例之后一个用例占结果的一行。并且结果中的用例名称和结果都会展示,而不仅仅是一个.或字符。

  1. -q

-v相反,-q会输出更简化的信息。

  1. -l

使用-l会展示运行过程中的全局变量和局部变量。

参数化 pytest.mark.parametrize(argnames, argvalues)

当对一个测试函数进行测试时,通常会给函数传递多组参数。pytest.mark.parametrize(argnames, argvalues)

  1. 单元素

image.png
2. 多元素参数

image.png
一般来说,数据是和逻辑层分开的,数据一般是从excel等文件解析而来

固件fixtures

pytest 会在执行测试函数之前(或之后)加载运行它们。比如说很多操作需要我们登录,或者准备数据库的连接等

在复杂的项目中,可以在不同的目录层级定义 conftest.py其作用域为其所在的目录和子目录

  1. 预处理

很多时候需要在测试前进行预处理(如新建数据库连接),并在测试完成进行清理(关闭数据库连接)。

当有大量重复的这类操作,最佳实践是使用固件来自动化所有预处理和后处理。

image.png

Pytest 使用 yield 关键词将固件分为两部分,yield 之前的代码属于预处理,会在测试前执行;yield 之后的代码属于后处理,将在测试完成后执行。可以把yield可以返回后面的参数

  1. 作用域 scope
  • function: 函数级,每个测试函数都会执行一次固件;
  • class: 类级别,每个测试类执行一次,所有方法都可以使用;
  • module: 模块级,每个模块执行一次,模块内函数和方法都可使用;
  • session: 会话级,一次测试只执行一次,所有被找到的函数和方法都可用。
  1. 自动执行
autouse=True
复制代码

pytest.ini

  1. 运行test_login的test_01

image.png
有配置文件,还有命令行方式。

  1. pytest.ini

总的来说,相当于全局配置
常用设置选项如下:

[pytest]

addopts = -s …#可添加多个命令行参数,用空格分隔

testpaths = ./test_case #测试用例文件夹,可自己配置,…/pytestproject为上一层的pytestproject文件夹。

python_files = test*.py#配置测试搜索的模块文件名称

python_classes = Test*#配置测试搜索的测试类名

python_funtions = test#配置测试搜索的测试函数名

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享