Appium python 3.5.1,生成 HTMLTestRunner 报告后,无法显示用例中的 print 字符串

wagnxinghao · 2017年02月27日 · 最后由 ch 回复于 2018年12月10日 · 3796 次阅读

python 3.5.1,生成 HTMLTestRunner 文件后,用例中的 print 无法打印在 html 文件中,请教下这如何代码或文件,用例和截图如下:

共收到 32 条回复 时间 点赞

网上下的 python 3+HTMLTestRunner 吧?
python 3+ 的 HTMLTestRunner 源码中找到:

if isinstance(o,str):
         *******
else
         *******

删掉 if else 直接改成 uo=o

@xiaoj 可以,问题已解决,谢谢。我是网上下载的 HTMLTestRunner 没错

@wanggaoxing 你能生成图片吗

可以啊,你看下和你一不一样,还是你那里生成图片有什么问题?

@wanggaoxing 楼主 能给我一个改好格式的 HTMLTestRunner.py 吗

链接地址:http://pan.baidu.com/s/1skXC8m5

用例中也要写一些方法,才能实现截图,下面是一个简答 的用例
import unittest
import HTMLTestRunner
from selenium import webdriver
import time
index = 1 # 这个也和截图有关

class MyTest(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Firefox()
self.driver.maximize_window()
self.driver.implicitly_wait(10)
self.base_url = "http://www.baidu.com"

png_file = 'E:\Test_png\' # 图片存放地址,这个地址要想创建好
def screenshot(self, index): # 需要写这个方法才能实现截图
timestr = time.strftime('%Y%m%d',time.localtime(time.time())) # 精确到秒会无法截图,要和 htmltestrunner.py 文件格式一致
img_name = timestr + '_' + str(index) + '.png' # 图片以时间 + 第几次截图命名
self.driver.get_screenshot_as_file('%s%s' % (self.png_file,img_name)) # 图片保存在定义路径中
return img_name

def test1_baidu(self):
print('用例开始执行...')
driver = self.driver
driver.get(self.base_url + "/")
driver.find_element_by_id("kw").clear()
driver.find_element_by_id("kw").send_keys("tttttttt")
driver.find_element_by_id("su").click()
time.sleep(2)
print('用例执行结束!')

def tearDown(self):
global index
print(index)
self.screenshot(index)
index += 1
print('index2' + str(index))
self.driver.quit()

if name == 'main':
suite = unittest.TestSuite()
suite.addTest(MyTest("test1_baidu"))
timestr = time.strftime('%Y%m%d%H%M%S',time.localtime(time.time()))
filename = 'E:\Test_png\' + timestr + '.html'
runner = unittest.TextTestRunner()
fp = open(filename,'wb')
runner = HTMLTestRunner.HTMLTestRunner(stream=fp,title=u'测试结果:',description=u'运行结果如下:')
runner.run(suite)
fp.close

@wanggaoxing 给楼主点赞

互相帮助,我的问题也解决了。

wagnxinghao 回复

你好,请教一个问题,如下
def tearDown(self):
global index
print(index)
self.screenshot(index)
index += 1
print('index2' + str(index))
self.driver.quit()
我目前执行有些用例后会报错,提示 index 没有定义
Error
Traceback (most recent call last):
File "E:\python_Script\yibao\test_Login.py", line 95, in tearDown
print(index)
NameError: name 'index' is not defined

请问你有遇到过这个问题吗?求大神解惑💪

@lanyou315 你 index 要在 tearDown 外面先定义,可以写在:
teardown 中写:

现在遇到一个问题,用例执行完了之后,生成报告的时间很慢,是不是跟截图有关?

wagnxinghao 回复

现在遇到一个问题,用例执行完了之后,生成报告的时间很慢,是不是跟截图有关?我精确到秒进行截图,然后 HtmlTestRunner 的格式也改成 timestr = time.strftime('%Y-%m-%d_%H-%M_%S'),用例中定义截图也是用这个格式,打印出来的报告没有截图,你知道是什么原因吗

HtmlTestRunner 的内容:
def screenshot(self):
timestr = time.strftime('%Y-%m-%d_%H-%M-%S')
global index

img_name = timestr + '_' + str(index) + '.png'
count = 0
while count < 10:
lsdir = os.listdir(self.img_path)
if img_name in lsdir:
index+=1
return self.img_path+img_name
else:
time.sleep(10)
count +=1

用例中的内容:
png_file = 'E:\python_Script\yibao\screenshot\woyao_touzi\' # 图片存放地址,这个地址要先创建好
def screenshot(self, index): # 需要写这个方法才能实现截图
timestr = time.strftime("%Y-%m-%d_%H-%M-%S") # 精确到秒会无法截图,要和 htmltestrunner.py 文件格式一致
img_name = timestr + '_' + str(index) + '.png' # 图片以时间 + 第几次截图命名
self.driver.get_screenshot_as_file('%s%s' % (self.png_file, img_name)) # 图片保存在定义路径中
return img_name

@lanyou315 不能精确到秒,截图是异步加载的,差不都就是我进入一个页面,然后 就已经截图了,然后那一串代码运行完后,再重新截图覆盖原本那张,然后会比对两次的时间,如果时间不一样就判断截图失败,所以精确到分就可以了;
还有你说的截图比较慢,首先 python 运行代码就是偏慢,也要看下你电脑配置怎么样,我这里执行的话是没出现报告生成比较慢的问题

wagnxinghao 回复

嗯 谢谢大神,
Error
Traceback (most recent call last):
File "E:\python_Script\yibao\test_Login.py", line 95, in tearDown
print(index)
NameError: name 'index' is not defined
这个问题搞定了

wagnxinghao 回复

不过如果精确到分的话,如果时间超过 1 分钟以上,输出报告会出现有些用例无法获取到截图或者截图错乱的情况,目前感觉精确到小时的话,可以规避这个问题😀

wagnxinghao 回复

兄台,你现在搞定用例出现异常才进行截图并输出到测试报告的方法吗?

32楼 已删除
lanyou 回复

不是,成功也会截图

33楼 已删除
wagnxinghao 回复

我也遇到了用例中的 print 无法打印在 html 文件中的问题,你是怎么解决的呢?要修改 HTMLTestRunner 吗

wagnxinghao 回复

感谢,正好需要用到。

回复

要,上面用户 xiaij 给的有用,就是第一条评论

回复

要,像上面评论第一条的那样改,有用

lanyou 回复

你可以试下,我是没试过,如果可以的话说一哈,下次我也这么用

wagnxinghao 回复

就删掉 if else 直接改成 uo=o,就行了,其他地方不用修改吗,你能把改好的发我邮箱一份吗?万分感谢。我是新学 Python。我邮箱 1246603306@qq.com

wagnxinghao 回复

你上面百度云这个http://pan.baidu.com/s/1skXC8m5直接下载就可以用吧。截图方法按照你上面说给出的用例就可以了吧。

wagnxinghao 回复

能给个邮箱或者 qq 联系方式吗,想请教一个其他问题。现在搞这个头都大了。

回复

我那个下载完就可以用了,适用 python3,Python2 不适用

wagnxinghao 回复

你好,我跑了你的文件和评论中给出的 DEMO,修改了一些错误后,跑了一下,成功运行代码后,没有出图。

大海 回复

你 python 什么版本的,报告有出来吗

wagnxinghao 回复

怎么可以生成在一个文本文件中,类似这种执行命令,‘python test_suite.py > output.log’,print 打印的信息能输出在 output.log 文件中

@wanggaoxing 您好,我是 python3.6 的系统,我的也是出现了你那个问题,输出报告不打印函数信息,也下载了你那个 HTMLTestRunner 文件,可是还是打印不出来

我这边使用了你给我的 HTMLTestRunner 后,可以打印出图片,但只能打印出来最后一张,我想截图每一个页面改怎么处理@wanggaoxing

34楼 已删除

@xiaoj 根据你说的方法问题已解决
python 3 的 HTMLTestRunner 没找到官网下载地方,官网没有提供么?
为啥这样删掉 if else,uo = o 改就行了呢?

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册