1.环境准备

/*@param:

作者:流浪的python

Date:2019/01/19

env:python 3.7(由于3.0-3.5以下部分pytest可能有部分兼容问题安装建议2.7-2.9,3.5-最新)

pip install pytest专属 pytest框架包

pip install pytest-html  pytest自己专属报告包

pip install pytest-rerunfailures 失败重跑包也是pytest专属

并发的也可以安下,利用多cpu运行调高用例执行速度

python -m pip install xdist

2.用例配置conftest.py编写,这个文件名必须是这个,官网指定的,pytest运行前会自己寻找这个文件,如果有会按里面配置跑没有就默认按用例设置跑,conftest.py仅对同目录,同目录下文件生效,超出按自己的conftest.py配置,每个包可以有自己的conftest.py

目录结构:https://docs.pytest.org/en/latest/pythonpath.html#test-modules-conftest-py-files-inside-packages

参考以上链接官网解释

这里我给出我的结构供参考:

project/
|- __init__.py
|- conftest.py
|- bar/
|- __init__.py
|- tests/
|- __init__.py
|- test_foo.py

conftest.py

# coding=utf-8
from selenium import webdriver
import pytest
import os
driver = None @pytest.mark.hookwrapper
def pytest_runtest_makereport(item):
"""
Extends the PyTest Plugin to take and embed screenshot in html report, whenever test fails.
:param item:
"""
pytest_html = item.config.pluginmanager.getplugin('html')
outcome = yield
report = outcome.get_result()
extra = getattr(report, 'extra', []) if report.when == 'call' or report.when == "setup":
xfail = hasattr(report, 'wasxfail')
if (report.skipped and xfail) or (report.failed and not xfail):
dirpng=r'./report/png/'
if os.path.exists(dirpng) and os.path.isdir(dirpng):
pass
else:
os.mkdir(dirpng)
file_name = dirpng + report.nodeid.replace("::", "_")+".png"
file_name1=r'./png/'+ report.nodeid.replace("::", "_")+".png"
_capture_screenshot(file_name)
if file_name:
html = '<div><img src="%s" alt="screenshot" style="width:304px;height:228px;" ' \
'onclick="window.open(this.src)" align="right"/></div>' % file_name1
extra.append(pytest_html.extras.html(html))
report.extra = extra def _capture_screenshot(name):
driver.get_screenshot_as_file(name) @pytest.fixture(scope='session', autouse=True)
def browser():
global driver
if driver is None:
driver = webdriver.Chrome()
return driver

3例脚本编写

# coding=utf-8
import pytest class TestFailScreenShoot(object): def test_run001(self):
assert 1==2 def test_run002(self):
assert 1==1 def test_screenshot_on_test_failure(self,browser):
browser.get("https://www.baidu.com")
assert False # if __name__ == "__main__":
# pytest.main('-s','-q')

4.cmd 到用例所在目录,Tests目录retry次数2,失败重跑延迟间隔2秒

输入: py.test  --html=./report/test_report.html -v --reruns 2 --reruns-delay 2 看到cmd提示如下:

generated html file: C:\Users\Administrator\PycharmProjects\pytestframe\foo\bar\Tests\report\test_report.html

根据提示浏览器地址栏输入file:///C:/Users/Administrator/PycharmProjects/pytestframe/foo/bar/Tests/report/test_report.html

pytest 失败重跑截图的更多相关文章

  1. pytest失败重跑

    一.说明 平常在做功能测试的时候,经常会遇到某个模块不稳定,偶然会出现一些bug,对于这种问题我们会针对此用例反复执行多次,最终复现出问题来.自动化运行用例时候,也会出现偶然的bug,可以针对单个用例 ...

  2. pytest文档8-html报告报错截图+失败重跑

    前言 做web自动化的小伙伴应该都希望在html报告中展示失败后的截图,提升报告的档次,pytest-html也可以生成带截图的报告. conftest.py 1.失败截图可以写到conftest.p ...

  3. testng优化:失败重跑,extentReport+appium用例失败截图,测试报告发邮件

    生成的单html方便jenkins集成发邮件,= = 构建失败发邮件 参考:https://blog.csdn.net/galen2016/article/details/77975965 步骤: 1 ...

  4. python3 unittest框架失败重跑加截图支持python2,python3

    github源码地址下载:https://github.com/GoverSky/HTMLTestRunner_cn.git 解压文件后取出/HTMLTestRunner_cn.py文件丢进C:\Py ...

  5. testng增加失败重跑机制

    注: 以下内容引自 http://www.yeetrack.com/?p=1015 testng增加失败重跑机制 Posted on 2014 年 10 月 31 日 使用Testng框架搭建自动测试 ...

  6. 【转载】扩展Robot Framework,实现失败用例自动再执行(失败重跑)

    使用自动化脚本进行测试,经常受环境影响等各方面导致本能成功的脚本失败,下面介绍了RFS框架下,失败重跑的方法: 通过改写RobotFramework源代码增加--retry选项,实现test级别的失败 ...

  7. RF实现多次失败重跑结果合并的基础方法和优化方法

    实现思路:通过分次执行失败案例重跑,然后通过结果文件合并命令实现多次失败重跑结果文件的合并,并输出合并后的log和report文件: 说明:具体失败案例重跑命令和结果文件合并命令请参考本博客其他相关章 ...

  8. testng失败重跑

    重跑失败场景 1.要添加两个文件 背景:因为这里只是想单独展示失败的重跑的案例,所以先暂时把app这块的运行注释掉,只跑一个简单的demo,就一个简单类,类中就3个测试方法,失败重跑的原理是,运行方法 ...

  9. TestNg失败重跑—解决使用 dataProvider 参数化用例次数冲突问题

    问题背景 在使用 testng 执行 UI 自动化用例时,由于 UI自动化的不稳定性,我们在测试的时候,往往会加上失败重跑机制.在不使用 @DataProvider 提供用例参数化时,是不会有什么问题 ...

随机推荐

  1. ajax获取富文本数据无法正常渲染到页面问题

    有时候富文本渲染到页面的时候 会连带标签一起渲染出来. 解决办法: 首先引用    <script src="https://cdn.jsdelivr.net/npm/fuwenben ...

  2. Linux安装配置mysql

    1.假设已经有mysql-5.5.10.tar.gz以及cmake-2.8.4.tar.gz两个源文件 (1)先安装cmake(mysql5.5以后是通过cmake来编译的) [root@ rhel5 ...

  3. ubuntn安装

    环境win7 64 ,在vmn中安装ubuntn,需要开启虚拟化操作步骤: 1.首先进入BIOS,我的是thinkphpE440,在开机联想界面出现的那刻按F1: 2.选择切换到security页面, ...

  4. mysql_real_escape_string与mysqli_real_escape_string

    参考 mysql_real_escape_string  mysqli_real_escape_string mysql_real_escape_string是用来转义字符的,主要是转义POST或GE ...

  5. C/S模式下的打印方法

     C/S模式使用润乾报表时有两种打印方法(都使用设计器授权) 1.         使用加密狗打印 这种方式需要使用加密狗,适用于客户端较少时 2.         使用api调用打印方法实现打印 ...

  6. the detailed annotation of StringBuilder

    public int capacity() 返回当前容量.容量指可用于最新插入字符的存储量,超过这一容量便需要再次分配. 返回: 当前容量. public int length() 返回长度(字符数) ...

  7. Android使用xml文件中的array资源

    Android中有种使用数组的非常简单的用法,在xml文件中获取. 创建数组资源 在value目录下创建arrays.xml文件 然后在arrays.xml文件中使用<string-array& ...

  8. linux 链接命令

    ln link /bin/ln -s 创建软链接ln -s [原文件] [链接文件] 软链接 ln -s /etc/issue /tmp/issue.soft硬链接ln /etc/issue /tmp ...

  9. node(2)

    //app.js var express = require("express"); //以后的时后处理POST DELETE PATCH CHECKOUT 这些请求都可以用for ...

  10. Sun Solairs系统添加裸设备

    Sun Solaris系统添加裸设备对表空间进行扩容的大体操作步骤. 1.查看当前卷组信息 --查看当前卷组信息#vxdg list --查看当前卷组中物理磁盘的使用情况#vxdg free |gre ...