您的位置:首页 > 编程语言 > Python开发

Macaca+HTMLTestRunner测试报告模式修改,基于python unittest 测试框架扩展

2017-07-17 11:54 1561 查看
将HTMLTestRunner.py文件放入到python环境变量目录中,或者放入到工程文件中。个人选择的是放入工程文件中,在运行时,直接 import HTMLTestRunner.py

源地址:http://tungwaiyip.info/software/HTMLTestRunner.html

文末附更新的文件

使用macaca启动测试,最后使用HTMLTestRunner输出测试报告:

1. 在开始之前先创建测试报告的模版和设定保存测试报告的地址

2. 创建文件保存测试结果,给测试报告设置标题

3. 以报告模版运行测试用例

4. 可以和任何支持python的测试自动化框架结合生成测试报告

5. 当然这个是延续macaca自动化测试框架来做的,创建完成后,以该模版测试运行测试组,(测试组的用法之后再详细叙述)

6. 具体代码如下:

#coding:utf-8
__author__ = 'JiaBi Zhao'

import unittest
import os
import time
import HTMLTestRunner
import androidTest.macaca_test_android
import iosTest.macaca_test_ios

#获取当前文件的路径
path = os.path.abspath('.')
if __name__ == '__main__':
#打开一个文件,将result写入此file中
fp=open(path+"/result.html",'wb')
#创建文件保存测试结果,设置标题,描述
runner=HTMLTestRunner.HTMLTestRunner(stream=fp,title='Demo Test',description='Test Result:')

#运行测试组,其他文件中的测试组
runner.run(androidTest.macaca_test_android.suite())
# runner.run(iosTest.macaca_test_ios.suite())
fp.close()


配置HTMLTestRunner文件,更改测试报告的显示和数据:

7. 查看了基本生成的测试报告页面,能满足基本需求,但是更高阶的需求就满足不了了,这里可以通过修改HTMLTestRunner文件来达到生成不同页面,传输其他需要显示的数据。

8. HTMLTestRunner文件主要内容为,开始创建了一个html文件的模版,然后再把测试过程中获取到的数据塞入这个模版当中

9. 首先要更改html模版,我个人是增加了一列用来显示运行时的截图

10. 其次在后面添加需要传输相关的数据表示,当碰到有特定输出时,自动去获取相关的图片显示在页面中

11. 当然你还可以更改页面显示,配色等,这里就不详细阐述,熟悉下html的结构基本就可以改动出来

12. 部分改动代码如下:

def _generate_report_test(self, rows, cid, tid, n, t, o, e):
# e.g. 'pt1.1', 'ft1.1', etc
has_output = bool(o or e)
tid = (n == 0 and 'p' or 'f') + 't%s.%s' % (cid+1,tid+1)
name = t.id().split('.')[-1]
doc = t.shortDescription() or ""
desc = doc and ('%s: %s' % (name, doc)) or name
tmpl = has_output and self.REPORT_TEST_WITH_OUTPUT_TMPL or self.REPORT_TEST_NO_OUTPUT_TMPL

# o and e should be byte string because they are collected from stdout and stderr?
if isinstance(o,str):
# TODO: some problem with 'string_escape': it escape \n and mess up formating
# uo = unicode(o.encode('string_escape'))
uo = o.decode('latin-1')
else:
uo = o
if isinstance(e,str):
# TODO: some problem with 'string_escape': it escape \n and mess up formating
# ue = unicode(e.encode('string_escape'))
ue = e.decode('latin-1')
else:
ue = e

script = self.REPORT_TEST_OUTPUT_TMPL % dict(
id = tid,
output = saxutils.escape(uo+ue),
)
########################################################
#特别注意,这里添加了image,caseid,htm的变量
image = self.REPORT_TEST_OUTPUT_IMAGE % dict(
screenshot = saxutils.escape(uo+ue)
)

index = -1
index2 = -1
arr = []
i = 0
while True:
index = image.find('screenshot_',index+1)
index2 = image.find('png',index2+1)
if index==-1:
break
stmpl = self.REPORT_TEST_SCREENSHOOT_TMPL
html2 = stmpl % dict(
image = image[index:(index2+3)],
)
arr.append(html2)
i += 1

x = 0
html = ''
while x < i:
html = html + arr[x]
x += 1

caseid = self.REPORT_TEST_OUTPUT_CASEID % dict(
case_id = saxutils.escape(uo+ue)
)
#####################################################
#注意这里row的变量中增加了html和caseid的数据,会把log传进来的数据以这个格式传输到页面当中选择自己需要的

row = tmpl % dict(
tid = tid,
Class = (n == 0 and 'hiddenRow' or 'none'),
style = n == 2 and 'errorCase' or (n == 1 and 'failCase' or 'none'),
desc = d
4000
esc,
script = script,
########################################################
html = html,
caseid = caseid[caseid.find("case")(int(caseid.find("case"))+9)],
status = self.STATUS
,
)

rows.append(row)
if not has_output:
return
#######################################################


#如果需要引用相关的参数使用如下格式
%(screenshot)s
%(case_id)s
%(html)s


附更新后的HTMLTestRunner文件:

链接: https://pan.baidu.com/s/1qY0StUs 密码: sx7e
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息