htmlrunner用法_介绍一个好用的HTMLTestrunner加强版。

学会和熟练使用之间,还隔着100个不会的距离。

—— 俗叔

今天偶然发现一个功能修改得比较牛逼的基于Python unittest框架的测试报告生成库,特此分享一下。

大家都知道,我们一般使用unittest框架时,如果需要生成生成测试报告,需要另外引用第三方库才能生成,否则它自带那个实在是太丑,根本没法看。常见的第三方报告生成库当然要属HTMLTestrunner了,但这玩意是早期一个老外基于Python2开发的,现在都0202年,这老掉牙的玩意早就不适合时代的要求了,所以其他一些优秀的第三方报告生成库就应运而生。我知道的除了今天要介绍的这个加强版的HTMLTestrunner外,还有一个叫BeautifulReport的第三方库,改天再介绍一下。大家随便用哪个都可以,个人感觉都挺不错。

今天要介绍的这个HTMLTestrunner加强版,相当于给以前的老HTMLTestrunner生成的报告做了个漂亮的“整形手术”,生成的报告颜值那是杠杠的,非常符合当前“外貌协会”的需求。当然,除了生成高颜值的报告外,这个库还有以下的一些优点:支持Python2和Python3,自动兼容,无需设置

支持中文和英文手动切换

支持Selenium和Appium截图报告嵌入Html报告中,可根据需求设置开启或关闭截图展示功能

样式美化需要网络支持,如果本地使用请下载离线版本

增加测试人员条目、通过率统计、所有可能情况筛选功能等

增加饼图数据展示、测试详情数据展示

增加返回顶部按钮

其他细节修改

源自 http://tungwaiyip.info 的0.82版本 HTMLTestRunner

使用实例

这个加强版的HTMLTestrunner使用起来也是非常简单的,跟之前的老版本差不多,所以我估计作者其实更多的是样式上的修改。作者的官方github上提供了一个生成中英文报告的实例,大家可以看看基本的使用方法。代码如下:

import unittest

# 中文 Chinese

from HwTestReport import HTMLTestReport

# 英文 English

from HwTestReport import HTMLTestReportEN

class Case_assert_1(unittest.TestCase):

def setUp(self):

pass

def tearDown(self):

pass

def test_ok(self):

self.assertEqual(1,1)

def test_faile(self):

self.assertEqual(1,2)

def test_error(self):

raise Exception

class Case_assert_2(unittest.TestCase):

def setUp(self):

pass

def tearDown(self):

pass

def test_ok(self):

self.assertTrue(True)

class Case_assert_3(unittest.TestCase):

def setUp(self):

pass

def tearDown(self):

pass

def test_error(self):

raise Exception

class Case_assert_4(unittest.TestCase):

def setUp(self):

pass

def tearDown(self):

pass

def test_faile(self):

self.assertEqual(1,3)

if __name__ == "__main__":

suite = unittest.TestSuite()

suite.addTest(Case_assert_1('test_ok'))

suite.addTest(Case_assert_1('test_faile'))

suite.addTest(Case_assert_1('test_error'))

suite.addTest(Case_assert_2('test_ok'))

suite.addTest(Case_assert_3('test_error'))

suite.addTest(Case_assert_4('test_faile'))

# English:HTMLTestReportEN

with open('./HwTestReport.html', 'wb') as report:

runner = HTMLTestReport(stream=report,

verbosity=2,

title='HwTestReport 测试',

description='带饼图,带详情',

tester='Johnny')

runner.run(suite)

带截图的报告实例

作者同样也改进了selenium本身的截图功能,截图功能是针对 Selenium和 Appium开发,支持Python2和Python3,不同的浏览器选择不同驱动。截图功能用起来也比较简单,大家可以看看下面这个例子:

import unittest

from HwTestReport import HTMLTestReport

from HwTestReport import HTMLTestReportEN

from selenium import webdriver

class Case_baidu(unittest.TestCase):

'''

在python3中因为unittest运行机制变动,在使用setUp/tearDown中初始化/退出driver时,可能会出现用例执行失败没有截图的问题,但我没有遇到过,如果出现请使用setUpClass/tearDownClass的用法

'''

def setUp(self):

self.imgs = []

self.driver = webdriver.Firefox()

def tearDown(self):

self.driver.quit()

def get_screenshot(self):

self.imgs.append(self.driver.get_screenshot_as_base64())

return True

def test_baidu_search(self):

'''用例通过,没有报告内容,有多张截图'''

self.driver.get("https://www.baidu.com")

self.get_screenshot()

self.driver.find_element_by_id('kw').send_keys(u'百度一下')

self.get_screenshot()

self.driver.find_element_by_id('su').click()

self.get_screenshot()

def test_baidu_assert_ok(self):

'''用例通过,有报告内容,有截图'''

self.driver.get("https://www.baidu.com")

hao123 = self.driver.find_element_by_xpath('//*[@id="u1"]/a[2]').text

print(hao123)

self.get_screenshot()

self.assertEqual(hao123, 'hao123')

def test_baidu_assert_ok_noimg(self):

'''用例通过,有报告内容,没有截图'''

self.driver.get("https://www.baidu.com")

news = self.driver.find_element_by_xpath('//*[@id="u1"]/a[1]').text

print(news)

self.assertEqual(news, u"新闻")

def test_baidu_assert_faile(self):

'''用例失败,带有失败内容和截图'''

self.driver.get("https://www.baidu.com")

self.get_screenshot()

news = self.driver.find_element_by_xpath('//*[@id="u1"]/a[1]').text

print(news)

self.get_screenshot()

self.driver.find_element_by_xpath('//*[@id="u1"]/a[1]').click()

self.get_screenshot()

self.assertEqual(news, 'hao123')

def test_baidu_assert_error(self):

''''用例错误,带有指定错误内容和截图'''

self.driver.get("https://www.baidu.com")

self.get_screenshot()

raise EnvironmentError('Current environment can not testing!')

class Case_qq(unittest.TestCase):

def setUp(self):

self.imgs = []

self.driver = webdriver.Firefox()

def tearDown(self):

self.driver.quit()

def test_qq_index_faile(self):

'''用例错误,带有错误内容和没有截图'''

self.driver.get("https://www.qq.com")

self.driver.find_element_by_id('sougouTxt').send_keys(u'搜狗搜索')

# self.driver.find_element_by_id('sougouTxt').send_keys(u'搜狗搜索')

self.driver.find_element_by_id('searchBtn').click()

self.assertIn(u"搜狗", u'搜索')

def test_qq_index_ok(self):

'''用例通过,没有内容和没有截图'''

self.driver.get("https://www.qq.com")

self.driver.find_element_by_id('sougouTxt').send_keys(u'搜狗搜索')

self.driver.find_element_by_id('searchBtn').click()

class Case_163(unittest.TestCase):

def setUp(self):

self.imgs = []

self.driver = webdriver.Firefox()

def tearDown(self):

self.driver.quit()

def test_163_ok(self):

'''通过 没有内容和截图'''

self.driver.get("https://www.163.com/")

if __name__ == "__main__":

suite1 = unittest.TestLoader().loadTestsFromTestCase(Case_baidu)

suite2 = unittest.TestLoader().loadTestsFromTestCase(Case_qq)

suite3 = unittest.TestLoader().loadTestsFromTestCase(Case_163)

suites = unittest.TestSuite()

suites.addTests([suite1, suite2, suite3])

# HTMLTestReport or HTMLTestReportEN

with open('./HwTestReportIMG.html', 'wb') as report:

runner = HTMLTestReportEN(stream=report,

verbosity=2,

images=True,

title='HwTestReport 测试',

description='带截图,带饼图,带详情',

tester='Johnny')

最后生成的报告颜值也确实不错,下面是生成的测试报告截图:

怎么样,看着还不错吧?

至少目前这些功能用于商业的测试报告没什么问题,并且使用起来也跟之前差别不大,所以总体来说还是很香的。

当然好用的话,也欢迎大家给作者star一波。好了,今天的介绍就到这里,以后有什么好的工具,会继续给大家介绍。

注:本文为蜗牛学院资深讲师卿淳俊老师原创,首发链接https://mp.weixin.qq.com/s/2nTg7aC-rksSyjy_duMg0Q,切勿擅自盗用,如需转载请私聊我处获得授权并注明出处。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值