如何解决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 举报,一经查实,本站将立刻删除。