码迷,mamicode.com
首页 > 其他好文 > 详细

参数化(parametrize)allure用例描述的两种方式 第二种重点

时间:2020-06-16 00:59:31      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:parameter   item   util   input   ESS   expected   lse   int   com   

第一种方式:ids

1.参数化(pytest.mark.parametrize)

# test_a.py
import pytest
import allure



def login(username, password):
    ‘‘‘登录‘‘‘
    print("输入账号:%s" % username)
    print("输入密码:%s" % password)
    # 返回
    return {"code": 0, "msg": "success!"}


# 测试数据
test_datas = [
    ({"username": "yoyo1", "password": "123456"}, "success!"),
    ({"username": "yoyo2", "password": "123456"}, "failed!"),
    ({"username": "yoyo3", "password": "123456"}, "success!"),
]


@allure.story("登录用例")
@pytest.mark.parametrize("test_input,expected",
                         test_datas
                         )
def test_login(test_input, expected):
    ‘‘‘测试登录用例‘‘‘
    # 获取函数返回结果
    result = login(test_input["username"], test_input["password"])
    # 断言
    assert result["msg"] == expected

运行用例

> pytest --alluredir ./report test_a.py
> allure serve ./report

技术图片

 

 这样生成的报告在用例列表里面并不能很友好的展示出每个用例的执行场景,只知道哪个用例报错了。
于是需要对每个用例加上描述,加一个 ids 参数

2.ids参数使用

在用例部分代码里面加个 ids 参数,用于描述每个用例的运行场景。

@allure.story("登录用例")
@pytest.mark.parametrize("test_input,expected",
                         test_datas,
                         ids=[
                             "输入正确账号,密码,登录成功",
                             "输入错误账号,密码,登录失败",
                             "输入正确账号,密码,登录成功",
                         ]
                         )
def test_login(test_input, expected):
    ‘‘‘测试登录用例‘‘‘
    # 获取函数返回结果
    result = login(test_input["username"], test_input["password"])
    # 断言
    assert result["msg"] == expected

技术图片

 

 

第二种方式:allure.title

@allure.title("用例描述,测试输入:{test_input}")

 

在 allure_pytest/utils.py 源码里面可以找到对应的代码

# allure_pytest/utils.py

def allure_name(item, parameters):
    name = escape_name(item.name)
    title = allure_title(item)
    return title.format(**parameters) if title else name

当没有加allure.title()时候,用例的描述就是 item.name 值(也就是上面的 ids 用例的名称),
如果加了allure.title(),那么用例的描述就是添加的title值,这两个地方取其中的一个。

重点来了:把用例描述当成参数传给测试用例

import pytest
import allure
# 作者:上海-悠悠 QQ交流群:779429633

def login(username, password):
    ‘‘‘登录‘‘‘
    print("输入账号:%s" % username)
    print("输入密码:%s" % password)
    # 返回
    return {"code": 0, "msg": "success!"}


# 测试数据
test_datas = [
    ({"username": "yoyo1", "password": "123456"}, "success!", "输入正确账号,密码,登录成功"),
    ({"username": "yoyo2", "password": "123456"}, "failed!", "输入错误账号,密码,登录失败"),
    ({"username": "yoyo3", "password": "123456"}, "success!", "输入正确账号,密码,登录成功"),
]


@allure.story("登录用例")
@allure.title("{title}")
@pytest.mark.parametrize("test_input,expected,title",
                         test_datas
                         )
def test_login(test_input, expected, title):
    ‘‘‘测试登录用例‘‘‘
    # 获取函数返回结果
    result = login(test_input["username"], test_input["password"])
    # 断言
    assert result["msg"] == expected

 

技术图片

 

参数化(parametrize)allure用例描述的两种方式 第二种重点

标签:parameter   item   util   input   ESS   expected   lse   int   com   

原文地址:https://www.cnblogs.com/bigbox/p/13138552.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!