Python:自动化框架pytest的安装与使用

pytest可以用来做系统测试 的自动化, 它的特点如下:

  • 用 Python 编写测试用例,简便易用

  • 可以用 文件系统目录层次 对应 手工测试用例 层次结构

  • 灵活的 初始化清除 机制

  • 可以灵活挑选测试用例执行

  • 利用第三方插件,可以生成不错的报表

安装

直接执行如下命令即可安装 pytest:

python3 -m pip install pytest

一般还需要产生测试报表,所以要安装一个第三方插件 pytest-html ,使用如下命令安装:

python3 -m pip install pytest-html

使用

在pytest 框架中寻找测试项 的具体规则:

  • 如果未指定命令行参数,则从 testpath(如果已配置)或当前目录开始收集,如果命令行参数, 指定了 目录、文件名 或 node id 的任何组合,则按参数来找

  • 寻找过程会递归到目录中,除非它们匹配上 norecursedirs

  • 在这些目录中,搜索由其测试包名称导入的 test_*.py 或 *_test.py 文件

从这些文件中,收集如下测试项:

  • test为前缀 的 函数
  • Test为前缀的里面的test为前缀的方法

常用参数:

如果我们希望 显示测试代码中print的内容,因为这些打印语句在调试代码时很有用,可以加上命令行参数 -s,如下

pytest -s

执行 pytest 时, 如果命令行没有指定目标目录 或者 文件, 它会自动搜索当前目录下所有符合条件的文件、类、函数。如果我们希望得到更详细的执行信息,包括每个测试类、测试函数的名字,可以加上参数 -v,这个参数可以和 -s 合并为 -sv,如下:

pytest -sv

为了防止 pytest 到其他目录中找测试用例项,执行测试时,我们可以在命令行加上目标目录 cases ,就是这样

pytest cases

要产生报告,在命令行加上 参数 --html=report.html --self-contained-html ,如下


pytest cases --html=report.html 

初始化和清除模块:这样就会产生名为 report.html 的测试报告文件,可以在浏览器中打开。

  • 模块级别的初始化、清除 在 整个模块所有用例 执行前后 分别 执行1次,它主要是用来为该 模块 中 所有的测试用例做 公共的 初始化 和 清除
  • 类级别的初始化、清除 在 整个模块所有用例 执行前后 分别 执行1次 ,它主要是用来为该  中的所有测试用例做 公共的 初始化 和 清除
  • 方法别的初始化、清除 在 整个模块所有用例 执行前后 分别 执行1次,它主要是用来为该 方法 中的内容做 公共的 初始化 和 清除
  • 目标级别的 初始化清除,就是针对整个目录执行的初始化、清除

如下定义 setup_module 和 teardown_module 全局函数:


def setup_module():
    print('\n *** 初始化-模块 ***')


def teardown_module():
    print('\n *** 清除-模块 ***')

pytest 可以灵活的挑选测试用例执行挑选测试用例执行:

指定一个模块

可以像这样只挑选一个模块执行:


pytest cases\登录\test_错误登录.py

指定目录

pytest cases


也可以指定多个目录
pytest cases1  cases2

指定模块里面的函数或者类


指定一个类
pytest cases\登录\test_错误登录.py::Test_错误密码

也可以指定类里面的方法
pytest cases\登录\test_错误登录.py::Test_错误密码::test_C001001

根据名字

可以使用 命令行参数 -k 后面加名字来挑选要执行的测试项

比如像这样后面跟测试函数名字的一部分:

pytest cases


也可以指定多个目录
pytest cases1  cases2


pytest -k C001001 -s

注意,-k 后面的名字
可以是测试函数的名字,可以是类的名字,可以是模块文件名,可以是目录的名字

是大小写敏感的

不一定要完整,只要能有部分匹配上就行

可以用 not 表示选择名字中不包含,比如
pytest -k "not C001001" -s

可以用 and 表示选择名字同时包含多个关键字,比如
pytest -k "错 and 密码2" -s

可以用 or 表示选择名字 包含指定关键字之一即可,比如
pytest -k "错 or 密码2" -s

根据标签

参考官方文档

可以这样给 某个方法加上标签 webtest
import pytest

class Test_错误密码2:

 @pytest.mark.webtest
    def test_C001021(self):
        print('\n用例C001021')
        assert 1 == 1

然后,可以这样运行指定标签的用例
pytest cases -m webtest -s

也可以这样给整个类加上标签
@pytest.mark.webtest
class Test_错误密码2:

    def test_C001021(self):
        print('\n用例C001021')
        assert 1 == 1

可以这样定义一个全局变量 pytestmark 为 整个模块文件 设定标签
import pytest
pytestmark = pytest.mark.网页测试

如果你需要定义多个标签,可以定义一个列表
import pytest
pytestmark = [pytest.mark.网页测试, pytest.mark.登录测试]

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值