Pytest(一)

一、命令行选项
pytest --collect-only 展示在给定的配置下哪些测试用例会被运行。
pytest -k “表达式” :表达式可包含and、or、not (测试名唯一或者多个测试名的前缀或后缀相同时)
-m 标记测试并分组。

  1. @pytest.mark.自定义的标记名
  2. pytest -m 自定义的标记名
  3. 可在标记之间添加and、or、not关键字
    -m “mark1 and mark2” :既有mark1标记,又有mark2标记的测试用例;
    -m “mark1 or mark2” : 有mark1或者mark2标记的测试用例;
    -m “mark1 and not mark2” :有mark1标记 ,但没有mark2 标记的测试用例;

-x :一旦测试失败,就会全局停止;
–maxfail=num: 失败num次后,再停止;
-s :在测试运行时输出某些结果,包括任何符合标准的输出流信息;

–lf(–last-failed):运行最后一个失败的测试用例;
–ff(–failed-first):会运行完剩余的测试用例;
-v :详细输出;
-q :简化输出信息。
-l(–showlocals):失败测试用例由于被堆栈追踪,所以局部变量及其值都会显示出来。
–tb=style:style有short、line、no。

  • short:仅输出assert的一行以及系统判定内容(不显示上下文);
  • line:只使用一行输出显示所有的错误信息;
  • no:屏蔽全部回溯信息。
    –duration=N :统计测试过程中哪几个阶段时最慢的(包括每个测试用例的call、setup、teardown过程)。显示最慢的N个阶段,耗时越长越靠前。若N=0,则将所有阶段按耗时从长到短排序后显示。

二、运行测试
with pytest.raises(expected exception) as e: 得到异常消息的值;
@pytest.mark.skip(reason=“理由”):跳过
@pytest.mark.skipif(条件,reason=“理由”):跳过
-rs 查看跳过的原因
@pytest.mark.xfail():预期失败;
运行单个文件里的全部测试,以路径名加文件名作为pytest参数即可。

pytest tests/func/test_xx.py

运行单个测试函数,添加::符号和函数名。

pytest tests/func/test_xx.py::Function_name

运行单个测试类,添加::符号和类名。

pytest tests/func/test_xx.py::Class_name

运行单个测试类中的测试方法,添加::类名::方法名。

pytest tests/func/test_xx.py::Class_name::Method_name
 @pytest.mark.parametrize(argnames,argvalues) //参数化

argnames:用逗号分隔的字符串列表;
argvalues:值列表list;
参数化一:

import pytest 
from collections import namedtuple
Task = namedtuple('Task', ['summary','owner','done','id'])
# __new__.__defaults__创建默认的Task对象
Task.__new__.__defaults__ = (None, None, False, None)

@pytest.mark.parametrize('task', 
                         [Task('sleep',done=True), 
                          Task('wake','brain'), 
                          Task('breathe','BRAIN', True),
                          Task('exercise','BrIaN',False)])
def test_something(task):
    """do someting"""

参数化二:

@pytest.mark.parametrize('summary, owner, done',
                         [Task('sleep',None, False),
                          Task('wake', 'brain',False),
                          Task('breathe', 'BRAIN', True),
                          Task('exercise', 'BrIaN', False)])
def test_something(summary, owner, done):
    """do someting"""

参数化三(代码美观,但测试输出可读性差)

task_tuple = (Task('sleep',None, False),
              Task('wake', 'brain',False),
              Task('breathe', 'BRAIN', True),
              Task('exercise', 'BrIaN', False))

@pytest.mark.parametrize('task', task_tuple)
def test_something(task):
    """do something"""

参数化四(改善可读性)

task_tuple = (Task('sleep',None, False),
              Task('wake', 'brain',False),
              Task('breathe', 'BRAIN', True),
              Task('exercise', 'BrIaN', False))

task_ids = ['Task({},{},{})'.format(t.summary, t.owner, t.done)for t in task_tuple]
@pytest.mark.parametrize('task', task_tuple, ids=task_ids)
def test_something(task):
    """do something"""

参数化五:
@pytest.mark.parametrize(argnames,argvalues,id=“something”) id做标识

@pytest.mark.parametrize('task', [
    pytest.param(Task('create'),id='just summary'), 
    pytest.param(Task('inspire','michelle'), id='summary/owner'),
    pytest.param(Task('encourage','michelle', True), id='summary/owner/done')])
def test_something(task):
    """do something"""

如果在测试类上添加parametrize()装饰器,那么参数集会被传给该类中所有方法

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值