在做自动化的过程中,大多数执行者都不在旁边,那么如果用例失败了我们通常看报告上的失败信息,但是这样有时候可能不够清楚的判断到底哪里出了错误,我们还可以通过自动截图的功能,判断用例走到哪里出了错误。

截图方法

在自动化中截图方法有几种,我们一个个来看,那种最适合我们。

方法1:get_screensho t_as_file(self,filename)

通过屏幕进行截图保存在对应路径中

def get_screenshot_as_file(self, filename):
"""
将当前窗口的屏幕快照保存到PNG图像文件中。返回
如果有IOError,则为False,否则返回True。使用完整路径
你的文件名。
"""
if not filename.lower().endswith('.png'):
warnings.warn("name used for saved screenshot does not match file "
"type. It should end with a `.png` extension", UserWarning)
png = self.get_screenshot_as_png()
try:
with open(filename, 'wb') as f:
f.write(png)
except IOError:
return False
finally:
del png
return True

上面的源码中提示了我们如何进行使用,那么我们直接通过unittest进行开始操作吧

异常截图

# coding:utf-8
from appium import webdriver
import unittest
import time
class test(unittest.TestCase):
def setUp(self):
desired_caps = {
'platformName': 'Android', # 测试版本
'deviceName': 'emulator-5554', # 设备名
'platformVersion': '5.1.1', # 系统版本
"appPackage": "com.taobao.taobao", # app包名
"appActivity": "com.taobao.tao.welcome.Welcome", # 启动launch Activity
"noReset": True, # 不清空数据
"unicodeKeyboard": True, # 使用Unicode编码方式发送字符串
"resetKeyboard": True, # 键盘隐藏起来
}
self.driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
def test01(self):
try:
    # 这里写错了定位信息
text = 'text("注册/登录1")'
self.driver.find_element_by_android_uiautomator(text).click()
except Exception as msg:
print('报错信息:%s'%msg)
# 截图
self.driver.get_screenshot_as_file('123.png')
def tearDown(self):
time.sleep(3)
self.driver.quit()
if __name__ == '__main__':
unittest.main()

打开appium进行执行脚本,脚本执行后,查看我们脚本的当前目录,就会发现我们的截图已经成功的保存在当前目录了

方法2:save_screenshot(‘filename')

通过源码我们可以看到调用的还是上门的方法,但是我们一样也可以使用

 def save_screenshot(self, filename):
"""
将当前窗口的屏幕快照保存到PNG图像文件中。返回
如果有IOError,则为False,否则返回True。使用完整路径
你的文件名。
"""
return self.get_screenshot_as_file(filename)

异常截图

# coding:utf-8
from appium import webdriver
import unittest
import time
class test(unittest.TestCase):
def setUp(self):
desired_caps = {
'platformName': 'Android', # 测试版本
'deviceName': 'emulator-5554', # 设备名
'platformVersion': '5.1.1', # 系统版本
"appPackage": "com.taobao.taobao", # app包名
"appActivity": "com.taobao.tao.welcome.Welcome", # 启动launch Activity
"noReset": True, # 不清空数据
"unicodeKeyboard": True, # 使用Unicode编码方式发送字符串
"resetKeyboard": True, # 键盘隐藏起来
}
self.driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
def test01(self):
try:
text = 'text("注册/登录1")'
self.driver.find_element_by_android_uiautomator(text).click()
except Exception as msg:
print('报错信息:%s'%msg)
# 方法2:
self.driver.save_screenshot('222.png') def tearDown(self):
time.sleep(3)
self.driver.quit()
if __name__ == '__main__':
unittest.main()

同样的执行后,会在当前目录中发现设备已经截图了。

其他的截图方法

# 保存的是base64的方法。一般用在html的时候。

def get_screenshot_as_base64(self):
"""
以base64编码的字符串获取当前窗口的屏幕截图
这是有用的嵌入式图像在HTML。
"""
return self.execute(Command.SCREENSHOT)['value'] # 截图屏幕,以二进制的方法进行保存 def get_screenshot_as_png(self):
"""
以二进制数据的形式获取当前窗口的屏幕截图。
"""
return base64.b64decode(self.get_screenshot_as_base64().encode('ascii'))

总结:unittest的截图大致就是通过抛异常的方法捕捉错误,然后加上截图功能。保存在指定目录中。

如果感觉安静写的对您有所帮助,可以右下角点个关注,点关注,不迷路~~

unittest---unittest错误截图的更多相关文章

  1. unittest框架,漂亮的报告BeautifulReport配置与错误截图详细解说

    1.下载BeautifulReport模块 下载地址:https://github.com/TesterlifeRaymond/BeautifulReport 2.解压与存放路径 下载Beautifu ...

  2. 《selenium2 python 自动化测试实战》(19)——webdriver错误截图

    webdriver 提供错误截图函数 get_screenshot_as_file(),可以帮助我们跟踪 bug,在脚本无法继续执行时候, get_screenshot_as_file()函数将截取当 ...

  3. selenium验证码和错误截图

    验证码的识别: 1,破解验证码 OCR识别(一般使用tesseract-ocr) 人工智能(AI机器学习 TensorFlow,成本大) 2,绕过验证码 1, 让开发人员临时关闭验证码 2,提供万能验 ...

  4. 将QTP运行时的错误截图上传到QC

    Class QCImageErrorCapture Sub Class_Terminate() 'Check if the current test has failed. If failed the ...

  5. unittest===unittest 的几种执行方式

    #demo.py import requests import json class RunMain: def __init__(self, url, method, data=None): self ...

  6. selenium的错误截图

    在自动化测试过程中,测试执行期间需要收集获取截图信息,一方面为了错误调试代码,一方面也为了和开发沟通, 获取当前的截图 save_screenshot是获取当前截图的方法,以百度首页为例,打开百度首页 ...

  7. make[1]: *** [storage/perfschema/unittest/CMakeFiles/pfs_connect_attr-t.dir/all] 错误 2 解决方法

    make[2]: *** [storage/perfschema/unittest/pfs_connect_attr-t] 错误 1 make[1]: *** [storage/perfschema/ ...

  8. python+unittest框架整理(一点点学习前辈们的封装思路,一点点成长。。。)

    预期框架整理目标: 1.单个用例维护在单个.py文件中可单个执行,也可批量生成组件批量执行 2.对定位参数,定位方法,业务功能脚本,用例脚本,用例批量执行脚本,常用常量进行分层独立,各自维护在单独的. ...

  9. selenium+Python(截图保存错误页面)

    异常捕捉与错误截图 创建错误截图文件夹,目录结果如下: 用例不可能每一次运行都成功,肯定运行时候有不成功的时候,关键是我们捕捉到错误,并以把并错误截图保存,这将是一个非常棒的功能,也会给我们错误定位带 ...

随机推荐

  1. layui下select禁止点击

    layui下拉选择框select禁止点击_设置禁用_设置不可操作的实现方法 直接上代码: <form class="layui-form"> <!-- 提示:如果 ...

  2. GIT如何根据历史记录回退代码

    ps: 因为使用这种方式回退后,回退的目标版本之后提交的代码都没了,所以建议先把当前代码打个tag 首先找到分支的提交记录 git log 将代码回退到历史版本 git reset --hard 0f ...

  3. RS-232C

    RS-232C标准(协议)的全称是EIA-RS-232C标准,定义是"数据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制数据交换接口技术标准".它是在1970年由美国电子 ...

  4. pycharm连接mysql5.7

    由于加密方式改变 需要在url后增加 ?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC

  5. java_jsp_导入第三方jar包

    问题:把第三方jar包放在tomcat common/lib目录下之后,在jsp页面中引用不到 解决方法:将jar包放在你的项目目录下的WEB-INF/lib/目录下 解决 希望对大家又所帮助 以上

  6. 安装Docker:解决container-selinux >= 2.9问题

    1.安装Docker要求Centos内核版本高于3.10:通过uname  -r查看当前系统的内核版本 uname  -r 2.使用root登陆系统,确保yum包保持更新到最新: sudo yum  ...

  7. 当用命令导入csv文件时提示错误[Err] 1290 - The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

        安装之后没有my.ini配置文件怎么办,因为自己安装的是zip压缩版的mysql,所以再5.7之后就没有my.ini配置文件,所以有时候需要去自己创建一个叫my.ini的配置文件,但是特别 要 ...

  8. windows10桌面突然变灰了

    不靠谱的第三方软件重装系统,装了以后系统有点问题,会隔一段时间变灰 了 windows+ctrl+c 直接就恢复色彩了

  9. 使用@RunWith(SpringJUnit4ClassRunner.class)进行单元测试时 报错 和 java.lang.NoSuchMethodError的解决方法

    1 使用@RunWith(SpringJUnit4ClassRunner.class)进行单元测试时,需要junit高版本和spring-test的高版本才支持,junit需要4.0以上的,sprin ...

  10. 国内某Python大神自创完整版,系统性学习Python

    很多小伙伴纠结于这个一百天的时间,我觉得完全没有必要,也违背了我最初放这个大纲上来的初衷,我是觉得这个学习大纲还不错,自学按照这个来也能相对系统的学习知识,而不是零散细碎的知识最后无法整合,每个人的基 ...