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