微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 Appium+HTMLTestRunner 输出自动化测试报告时,增加报告中展示截图功能

由于HTMLTestRunner没有展示截图的功能,所以在基于UI的自动化测试报告中不能展示截图,就让整个报告显得不直观,
整个解决方案的思路是就是执行自动化测试脚本时截图并按照一定规则命名保存,形成测试报告时也按照相同的规则取图片,思路很简单,废话少说,上代码

1.先在HTMLTestRunner中增加一列Screenshot,用于展示图片

在这里插入图片描述


View后面追加一行Screenshot

2.在

在这里插入图片描述

%(error)s 后面追加一行

3.在REPORT_TEST_WITH_OUTPUT_TMPL中增加一行

在这里插入图片描述

,用于图片展示

4.在class HTMLTestRunner(Template_mixin)中的def _generate_report_test(self, rows, cid, tid, n, t, o, e): 中的 row中增加screenshot字段,用于往上面步骤中传实际的图片地址,

在这里插入图片描述

5.然后增加一个获取screenshot地址的函数,由于截取图片获取图片地址是异步进行,所以不得不进行轮询去查,10秒查一次,最多查10次:

在这里插入图片描述


至此,HTMLTestRunner.py文件修改完毕,然后就是在测试脚本中的注意事项了。

1.单独写一个screenshot函数,然后在teardown函数调用,这样就可以保证每条用例都会执行到。
2.图片命名规则要跟HTMLTestRunner中的一致,不然取不到,我的命名规则 日期+_+index.png index根据截取的是第几张图片

直接上测试用例脚本吧:
import os
import unittest
from appium import webdriver
from appium.webdriver.common.touch_action import TouchAction
from appium.webdriver.common.multi_action import MultiAction
from time import sleep
import time
import HTMLTestRunner
import sys

PATH = lambda p:os.path.abspath(
os.path.join(os.path.dirname(file),p)
)
reload(sys)
sys.setdefaultencoding(‘utf-8’)
index = 1

class VodTest(unittest.TestCase):

png_file = ‘E:\Testreport\png’

def setUp(self):

desired_caps={}
desired_caps[‘platformName’] = ‘Android’
desired_caps[‘platformVersion’] = ‘4.4.3’
desired_caps[‘deviceName’] = ‘192.168.1.100:5555’

desired_caps[‘appPackage’] = ‘
desired_caps[‘appActivity’] = '.
*
desired_caps[‘appWaitactivity’] =’.*******
desired_caps[‘noSign’] = ‘True’

self.driver = webdriver.Remote(‘http://127.0.0.1:4723/wd/hub’, desired_caps)
def screenshot(self,index):
timestr=time.strftime(’%Y%m%d’,time.localtime(time.time()))
img_name=timestr + ‘_’ + str(index) +’.png’
self.driver.get_screenshot_as_file(’%s%s’ % (self.png_file,img_name))
return img_name

def tearDown(self):
global index
print index
self.screenshot(index)
index+=1
print ‘index2’ + str(index)
self.driver.quit()
def test_head(self):
sleep(10)
self.driver.wait_activity(’.MasterViewActivity’,15,5)
self.driver.find_element_by_android_uiautomator(“text(“搜索”)”)

self.driver.find_element_by_id(‘com.jamdeo.tv.vod:id/ib_search’)
self.driver.find_element_by_android_uiautomator(“text(“历史/收藏”)”)

self.driver.find_element_by_id(‘com.jamdeo.tv.vod:id/iv_play_history_and_my_favorite’)
self.driver.find_element_by_android_uiautomator(“text(“微信电视”)”)
self.driver.find_element_by_android_uiautomator(“text(“设o置”)”)

def test_hidefirstline(self):
sleep(10)
self.driver.wait_activity(’.MasterViewActivity’, 15, 5)

self.driver.find_element_by_android_uiautomator(“text(“按上键展开分类”)”)

self.driver.find_element_by_android_uiautomator(“text(“闻香识女人”)”)

self.driver.find_element_by_id(‘com.jamdeo.tv.vod:id/iv_poster’)
self.driver.find_element_by_id(‘com.jamdeo.tv.vod:id/iv_mark_card’)
self.driver.find_element_by_android_uiautomator(“text(“复仇者联盟2:奥创纪元”)”)

self.driver.keyevent(19)

self.driver.find_element_by_id(‘com.jamdeo.tv.vod:id/iv_poster’)

if name == ‘main’:

suite = unittest.TestSuite()
suite.addTest(VodTest(‘test_head’))
suite.addTest(VodTest(‘test_hidefirstline’))

timestr = time.strftime(’%Y%m%d%H%M%s’,time.localtime(time.time()))
filename = ‘E:\Testreport’+timestr+’.html’
print filename
fp = open(filename, ‘wb’)
runner = HTMLTestRunner.HTMLTestRunner(

stream=fp,
title=‘result’,
description=‘report’
)

runner.run(suite)
fp.close()

不好意思 有点乱 大家将就着看吧

大家有没有什么更好的方法 欢迎交流
最后输出的测试报告大概就是酱紫!:

github:https://github.com/342164796/HTMLTestRunner.py

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

相关推荐