为啥python+htmltestrunner生成的测试报告有问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥python+htmltestrunner生成的测试报告有问题相关的知识,希望对你有一定的参考价值。
htmltestrunner 默认要2条以上的用例才不会生成空的测试报告,你再多加一条,每条测试用例以test开头,再后面标注01/02/03........ 比如:test_baidu_login_01 这样就会生存测试报告了 参考技术A 问题:一个百度首页搜索的一个python+unittest测试,代码执行成功,但是用HTMLTestRunner输出的测试报告里面得内容有问题,具体问题是:测试条数,成功数,失败数都为0代码
# -*- coding: utf-8 -*-
from selenium import webdriver
import os
import time
import unittest
import re
import HTMLTestRunner
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException
from selenium.common.exceptions import NoAlertPresentException
class LoginBaiDu(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Chrome()
self.driver.implicitly_wait(30)
self.base_url = "
self.verificationErrors = []
self.accept_next_alert = True
print('Done-01')
def test_baidu(self):
self.driver.get(self.base_url)
self.driver.find_element_by_id("su").click()
print('Done-02')
time.sleep(2)
jsClear="$(\"input[id='kw']\").val(\"\")"
self.driver.execute_script(jsClear)
print('Done-03')
time.sleep(2)
jsVal="$(\"input[id='kw']\").val(\"selenium+python\")"
self.driver.execute_script(jsVal)
time.sleep(1)
self.driver.find_element_by_xpath("//input[@id='su']").click()
print('Done-04')
self.driver.close()
print('Done-05')
def tearDown(self):
self.driver.quit()
self.assertEqual([], self.verificationErrors)
print("test down...")
if __name__=="__main__":
test=unittest.TestSuite()
test.addTest(setUp)
test.addTest(test_baidu)
file_path="D:\\workspace\\PythonLearn\\src\\LoginBaiDu\\result.html"
file_result=open(file_path,'wb')
runner=HTMLTestRunner.HTMLTestRunner(stream=file_result,title=u"百度首页测试",description=u"用例执行情况")
runner.run(test)
file_result.close()
生成的报告截图:
加测试用例的方式错了要
test=unittest.TestSuite()
test.addTest(LoginBaiDu('setUp'))
test.addTest(LoginBaiDu('test_baidu'))
或者直接加入类
test= unittest.TestLoader().loadTestsFromTestCase(LoginBaiDu)
生成HTMLTestRunner测试报告的操作步骤——Python+selenium自动化
HTMLTestRunner是Python标准库的unittest模块的一个扩展,具体操作如下
1.安装
环境:Window8
步骤:1)http://tungwaiyip.info/software/HTMLTestRunner.html下载HTMLTestRunner.py文件
2)因为我使用的是python 3,所以在HTMLTestRunner.py文件中要做一下修改,修改内容如下:
修改一:
在python shell里输入>>>import HTMLTestRunner >>> dir(HTMLTestRunner) 发现不认识StringIO (No module named StringIO),确实3里面没有这个了,第94行引入的名称要改,改成import io,539行要改成self.outputBuffer = io.BytesIO()
修改二:运行程序的时候有报错,AttributeError: ‘dict‘ object has no attribute ‘has_key‘ 发现has_key的又被K掉了,所有到642行去做修改,if not rmap.has_key(cls): 需要换成if not
cls in rmap: (修改的时候换行、空格等不要改掉原有的格式)
修改三:
运行,继续有报错:‘str‘ object has no attribute ‘decode‘ 唉,好像是3里面对字符的操作,decode已经拿掉了。定位一下,报在了772行,ue = e.decode(‘latin-1‘),那么不需要decode
操作了吧,直接改成ue = e ,另外766还有类似的uo = o.decode(‘latin-1‘),可不动先留着;
修改四:
继续运行,发现还是在纠结数据类型的错:output = saxutils.escape(uo+ue), TypeError: can‘t concat bytes to str bytes和str不能直接连起来,那么778行的内容escape(uo+ue) 有一个处理的“笨办法”:都改成str,可修改该处内容为escape(str(uo)+ue)
修改五:(此处是最后一处改动了)
程序已然运行大半,但是最后还是有error:
print >>sys.stderr, ‘\nTime Elapsed: %s‘ % (self.stopTime-self.startTime)
TypeError: unsupported operand type(s) for >>: ‘builtin_function_or_method‘ and ‘RPCProxy‘
相信这条很多刚接触3.x的人都明白,2和3的print是很不同的,那么在3中,print 后面
是不会跟>>这样的,所以到631行,把print的语句修改掉,原来是print >>sys.stderr, ‘\nTime
Elapsed: %s‘ % (self.stopTime-self.startTime),可改成 print (sys.stderr, ‘\nTime Elapsed: %s‘ % (self.stopTime-self.startTime)) 每次修改后都要对HTMLTestRunner.py 保存一下。另外在3当中,打开本地文件需用fp =open(filename,‘wb‘),不要再去用file了;关闭该文件可用fp.close()
2.验证是否添加成功
在python交互模式下导入HTMLTestRunner.py包
>>import HTMLTestRunner
>>
出现以上信息择时添加成功
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
使用的例子如下:
#coding:utf-8
from test_case import search
from test_case import setting
import HTMLTestRunner
import unittest
import sys
testunit = unittest.TestSuite()
testunit.addTest(unittest.makeSuite(search.Baidu_Search))
testunit.addTest(unittest.makeSuite(setting.SetBai))
filename = ‘E:\\study_code\\Testing\\src\\result.html‘
fp = open(filename,‘wb+‘)
runner = HTMLTestRunner.HTMLTestRunner(stream=fp,title=‘百度搜索测试报告‘,description=‘用例执行情况‘)
runner.run(testunit)
以上是关于为啥python+htmltestrunner生成的测试报告有问题的主要内容,如果未能解决你的问题,请参考以下文章
为啥下面这段python+htmltestrunner的自动化代码执行后,生成的测试报告有问题(见图片)
Python用HTMLTestRunner生成html测试报告
Python3和HTMLTestRunner生成html测试报告