pytest方法在迭代时报告多个失败 测试输出安装用法测试结果:

如何解决pytest方法在迭代时报告多个失败 测试输出安装用法测试结果:

pytest的新手。我正在使用它通过.ReturnsAsync((TblUser user,string password) => requests模块在​​网站上执行各种检查。

说我在页面上获得了所有的A链接,然后看到它们都返回200,将其放在单个测试中是微不足道的。但是,一次失败意味着迭代被中断,测试结束。

我想要的是对所有链接进行测试,如果至少有一个失败,则要生成一份报告,指出哪个失败。

是否存在用于处理此类情况的pytest习惯用法?显然,它具有比仅检查a-link更为广泛的应用。

请注意,我已经发现BeautifulSoup ...,但目前无法确定是否可以将其用于此类迭代。

解决方法

正如注释 pytest_generate_tests 中提到的那样。 您可以使用metafunc对象参数化灯具 link 。然后,在测试功能中,您可以简单地检查每个链接的返回码。在哪里获取所有链接应返回包含您的链接的字符串列表。

import requests

def get_all_links():
    return ["https://google.com","https://invalidurlblahblah.com"]

def pytest_generate_tests(metafunc):
    metafunc.parametrize("link",get_all_links())

def test_all_links(link):
    try:
        assert requests.get(link).status_code == 200
    except requests.ConnectionError:
        raise AssertionError("Invalid link")

输出

pytest_example.py::test_all_links[http://google.com] PASSED                                                                                                                                                 
pytest_example.py::test_all_links[http://invalidurlblahblah.com] FAILED
,

从可重复测试的多个项目中收集结果

要测试序列中的所有项目并报告哪些项目失败,可以存储失败,然后在最后使用断言。

测试多个URL的示例

import requests


def test_if_links_valid():
    urls = ["http://google.com","http://invalidurlblahblah.com/"]
    invalid_urls = []

    for url in urls:
        try:
            requests.get(url)
        except requests.ConnectionError:
            invalid_urls.append(url)

    assert len(invalid_urls) == 0,"all urls should be valid"

测试输出

>       assert len(invalid_urls) == 0,"all urls should be valid"
E       AssertionError: all urls should be valid
E       assert 1 == 0
E        +  where 1 = len(['http://invalidurlblahblah.com/'])

test_iteration.py:14: AssertionError

积累多个断言的结果

pytest-check插件允许每个测试测试多个失败。它提供了累积多个测试失败并在测试完成后报告错误的基础架构。

README.md

安装

来自PYPI:

$ pip install pytest-check

或者从github。

$ pip install git+https://github.com/okken/pytest-check

用法

使用导入的示例:

import pytest_check as check


def test_example():
    a = 1
    b = 2
    c = [2,4,6]
    check.greater(a,b)
    check.less_equal(b,a)
    check.is_in(a,c,"Is 1 in the list")
    check.is_not_in(b,"make sure 2 isn't in list")

测试结果:

=================================== FAILURES ===================================
_________________________________ test_example _________________________________
FAILURE:
assert 1 > 2
  test_check.py,line 14,in test_example() -> check.greater(a,b)
FAILURE:
assert 2 <= 1
  test_check.py,line 15,in test_example() -> check.less_equal(b,a)
FAILURE: Is 1 in the list
assert 1 in [2,6]
  test_check.py,line 16,in test_example() -> check.is_in(a,"Is 1 in the list")
FAILURE: make sure 2 isn't in list
assert 2 not in [2,line 17,in test_example() -> check.is_not_in(b,"make sure 2 isn't in list")
------------------------------------------------------------
Failed Checks: 4
=========================== 1 failed in 0.11 seconds ===========================

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?