测试执行过程中,当测试脚本运行完毕后,直接将运行完毕后的测试结果发给项目组成员,并不是最优的选择。如何让测试结果变的易读美观,让测试结果变的人人能够看的懂,也是值得考虑的问题。
HTMLTestRunner 是 Python 标准库的 unittest 模块的一个扩展, 它可以生成HTML的测试报告。
欢迎可关注:【公众号】:柒哥测试;添加【WX】:Lee-890交流;
HTMLTestRunner 是 Python 标准库的 unittest 模块的一个扩展, 它可以生成HTML的测试报告。下载地址:http://tungwaiyip.info/software/HTMLTestRunner.html,将下载后的HTMLTestRunner.py放到Python安装路径下的Lib文件中。
现在使用的Python版本大部分是Python3,而前面下载的HTMLTestRunner.py是基于Python2版本的,所以有些地方需要修改成符合Python3版本的规范要求,修改的地方如下(书籍提供的资料里是修改过符合Python3版本的HTMLTestRunner.py文件,无需自己下载了及修改了哦….)。
第94行:
import StringIO 改为import io
第539行:
self.outBuffer=StringIO.String()改为self.outBuffer=io.StingIO()
第631行:
print>>sys.stderr.”\nTime Elapsed:%s’%(self.stopTime-self.startTime)改为print(sys.stderr.”\nTime Elapsed:%s’%(self.stopTime-self.startTime))
第642行:
if not map.has_key(cls)改为if not cls in map
第766行:
uo=o.decode(“latin-1”)改为uo=e
第772行:
ue=e.decode(“latin-1”)改为ue=e
结合前面UnitTest单元测试框架章节中test_mathfunc.py为例,test_mathfunc.py内容如下:
import unittest
from UnitTestDemo.mathfunc import *
class TestMathFunc(unittest.TestCase):
"""测试mathfunc.py"""
# @unittest.skip("don't run this case!")
# @unittest.skipIf(3<2,"don't run this case!")
#@unittest.skipUnless(1>2,"don't run this case!")
def test_add(self):
"""测试加法add()"""
self.assertEqual(3,add(1,2))
self.assertNotEqual(3,add(2,2))
def test_minus(self):
"""测试减法minus"""
self.assertEqual(1,minus(3,2))
def test_multi(self):
"""测试乘法multi"""
self.assertEqual(6,multi(2,3))
def test_divide(self):
"""测试除法divide"""
self.assertEqual(2,divide(6,3))
self.assertEqual(2.5,divide(5,2))
在工程的根目录下新建HtmlReport.py,代码如下:
import unittest
from HTMLTestRunner import HTMLTestRunner
from UnitTestDemo.test_mathfunc import TestMathFunc
if __name__ == "__main__":
suite = unittest.TestSuite()
# 执行加法、减法、除法
tests = [TestMathFunc("test_add"),TestMathFunc("test_divide"),TestMathFunc("test_minus")]
suite.addTests(tests)
# addTest,添加单个TestCase
# suite.addTest(TestMathFunc("test_multi"))
f = open("d:\\reporter.html","wb")
runner = HTMLTestRunner(stream=f,
title="测试报告",
description="测试用例执行情况")
runner.run(suite)
运行HtmlReport.py文件,可观察到D盘下增加了reporter.html一个html文件。打开该html文件,展现结果如图8-1所示,可以通过页面直观的看到test_mathfunc.py中测试用例的执行情况。通过html测试报告,让测试结果变的直观易读。

::: hljs-center
图 html测试报告
:::






图书京东、当当有售
京东:https://item.jd.com/12784287.html
当当:http://product.dangdang.com/29177828.html)!

很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h
我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当
我有一个围绕一些对象的包装类,我想将这些对象用作散列中的键。包装对象和解包装对象应映射到相同的键。一个简单的例子是这样的:classAattr_reader:xdefinitialize(inner)@inner=innerenddefx;@inner.x;enddef==(other)@inner.x==other.xendenda=A.new(o)#oisjustanyobjectthatallowso.xb=A.new(o)h={a=>5}ph[a]#5ph[b]#nil,shouldbe5ph[o]#nil,shouldbe5我试过==、===、eq?并散列所有无济于事。
我有一些Ruby代码,如下所示:Something.createdo|x|x.foo=barend我想编写一个测试,它使用double代替block参数x,这样我就可以调用:x_double.should_receive(:foo).with("whatever").这可能吗? 最佳答案 specify'something'dox=doublex.should_receive(:foo=).with("whatever")Something.should_receive(:create).and_yield(x)#callthere
在我的Controller中,我通过以下方式在我的index方法中支持HTML和JSON:respond_todo|format|format.htmlformat.json{renderjson:@user}end在浏览器中拉起它时,它会自然地以HTML呈现。但是,当我对/user资源进行内容类型为application/json的curl调用时(因为它是索引方法),我仍然将HTML作为响应。如何获取JSON作为响应?我还需要说明什么? 最佳答案 您应该将.json附加到请求的url,提供的格式在routes.rb的路径中定义。这
所以我在关注Railscast,我注意到在html.erb文件中,ruby代码有一个微弱的背景高亮效果,以区别于其他代码HTML文档。我知道Ryan使用TextMate。我正在使用SublimeText3。我怎样才能达到同样的效果?谢谢! 最佳答案 为SublimeText安装ERB包。假设您安装了SublimeText包管理器*,只需点击cmd+shift+P即可获得命令菜单,然后键入installpackage并选择PackageControl:InstallPackage获取包管理器菜单。在该菜单中,键入ERB并在看到包时选择
Sinatra新手;我正在运行一些rspec测试,但在日志中收到了一堆不需要的噪音。如何消除日志中过多的噪音?我仔细检查了环境是否设置为:test,这意味着记录器级别应设置为WARN而不是DEBUG。spec_helper:require"./app"require"sinatra"require"rspec"require"rack/test"require"database_cleaner"require"factory_girl"set:environment,:testFactoryGirl.definition_file_paths=%w{./factories./test/
我遵循MichaelHartl的“RubyonRails教程:学习Web开发”,并创建了检查用户名和电子邮件长度有效性的测试(名称最多50个字符,电子邮件最多255个字符)。test/helpers/application_helper_test.rb的内容是:require'test_helper'classApplicationHelperTest在运行bundleexecraketest时,所有测试都通过了,但我看到以下消息在最后被标记为错误:ERROR["test_full_title_helper",ApplicationHelperTest,1.820016791]test
我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("