selenium+python自动化81-报告优化

一、 优化html报告 为了满足小伙伴的各种变态需求,为了装逼提示逼格,为了让报告更加高大上,测试报告做了以下优化: - 测试报告中文显示,优化一些断言失败正文乱码问题 - 新增错误和失败截图,展示到html报告里 - 优化点击截图放大不清晰问题 - 增加饼图统计 - 失败后重试功能 - 兼容python2.x 和3.x 二、 报告效果 1.生成的测试报告效果如下图,默认展示报错和异常的用例,失败重试的用例结果也会统计进去。

2.点击显示截图,可以直接显示截取的图片,无需保存到本地

三、 table表格 1.修改表格的td后面内容,可以自定义表格名称 2.drawCircle这个后面是生成饼图功能

```html
<tr id='header_row'>
    <td>测试组/测试用例</td>
    <td>总数</td>
    <td>通过</td>
    <td>失败</td>
    <td>错误</td>
    <td>视图</td>
    <td>错误截图</td>
</tr>
%(test_list)s
<tr id='total_row'>
    <td>统计</td>
    <td>%(count)s</td>
    <td>%(Pass)s</td>
    <td>%(fail)s</td>
    <td>%(error)s</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
</tr>
</table>
<script>
    drawCircle(%(Pass)s, %(fail)s, %(error)s)
</script>
```
四、 异常截图

1.这个是用例跑失败后,会自动截图的,图片以base64方式存储到html报告里面,无需保存到本地

> driver.get_screenshot_as_base64()

```python
    def addError(self, test, err):
        self.error_count += 1
        self.status = 1
        TestResult.addError(self, test, err)
        _, _exc_str = self.errors[-1]
        output = self.complete_output()
        self.result.append((2, test, output, _exc_str))
        try:
            driver = getattr(test, "driver")
            test.img = driver.get_screenshot_as_base64()
        except AttributeError:
            test.img = ""
        if self.verbosity > 1:
            sys.stderr.write('E  ')
            sys.stderr.write(str(test))
            sys.stderr.write('\n')
        else:
            sys.stderr.write('E')
```

五、 失败重试 1.生成报告的参数里面加了一个参数retry=1,这个表示用例失败后,会重新跑一次。

```python
# coding:utf-8

import HTMLTestRunner_jpg
import unittest

if __name__ == "__main__":
    discover = unittest.defaultTestLoader.discover("case","test*.py")
    print(discover)
 
    run = HTMLTestRunner_jpg.HTMLTestRunner(title="可以装逼的测试报告",
                                            description="测试结果",
                                            stream=open("result.html","wb"),
                                            verbosity=2,
                                            retry=1)
 
    run.run(discover)
```

2.verbosity=2这个参数是控制台显示测试结果风格,如下这种:

```
E  test_01 (pject.test_jpg.Test1)
retesting... 1
E  test_01 (pject.test_jpg.Test1)
F  test_02 (pject.test_jpg.Test1)
retesting... 1
F  test_02 (pject.test_jpg.Test1)
ok test_03 (pject.test_jpg.Test1)
ok test_01 (pject.test_xxx.Test1)
ok test_02 (pject.test_xxx.Test1)

Time Elapsed: 0:00:17.892222
```
六、 执行用例

1.这是参考的测试用例,我没在用例里面生成测试报告,生成测试报告采用的是上面的批量执行,单独建个脚本执行

```python
# coding:utf-8
from selenium import webdriver
import unittest

class Test1(unittest.TestCase):
    u'''博客园测试'''

    @classmethod
    def setUpClass(cls):
        cls.driver = webdriver.Firefox()

    @classmethod
    def tearDownClass(cls):
        cls.driver.quit()

    def test_01(self):
        u"""定位失败截图案例"""
        self.driver.get("https://www.baidu.com")
        self.driver.find_element_by_id('xxxxx').send_keys(u'百度一下')
        self.driver.find_element_by_id('su').click()
        self.assertTrue(True)

    def test_02(self):
        u'''失败用例'''
        self.driver.get("http://www.cnblogs.com/yoyoketang/")
        t = self.driver.title
        self.assertIn(u"失败用例",t)

    def test_03(self):
        u'''通过用例'''
        self.driver.get("http://www.cnblogs.com/yoyoketang/")
        self.assertIn(u"上海",self.driver.title)


if __name__ == "__main__":
    unittest.main()
```

七、 参考大神github

[大神github点这里](https://github.com/GoverSky/HTMLTestRunner)


八、 优化后源码

1.这个是在大神的基础上稍微做了一点点图片显示的优化,之前的图片太小,显示模糊,放大了下

2.然后重新整理了下,采用批量执行用例的方式

3.参考代码从github下载吧
[https://github.com/yoyoketang/selenium_report/](https://github.com/yoyoketang/selenium_report/)

原文发布于微信公众号 - 从零开始学自动化测试(yoyoketang)

原文发表时间:2017-10-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Grace development

Laravel5.4 队列简单配置与使用

举几个生活中例子: * iphone手机新款发布,三里屯iphone进的新货。大家要排队买,不能说一大堆人一起冲进去,那么这店就完了。 * 你有一大堆女朋友...

32010
来自专栏武军超python专栏

2018年8月11日自习复习miniconda,学习python第三方模块库 pypi网站,SDL,pip命令

今天遇到的新单词: editor n编辑,作者 general  adj大致的一般的 repository n仓库 distribute v分配,发布 ...

15220
来自专栏java达人

防止表单重复提交的思路和方法

作为一个软件开发者,绝不能奢望你的用户会规规矩矩地使用你的软件,他们一般都是缺乏耐心,“胡作非为”的。比如当他点击提交表单时,服务器处理比较慢, 页面上没有任何...

37780
来自专栏北京马哥教育

你还在手写命令行功能?看这四个Python库如何自动实现

使用命令行程序有很多充满乐趣的功能,例如“提示工具包”,“命令行界面创建工具包“,“Pygments”和“模糊搜索”,我将介绍如何在几个 Python 库的帮助...

43040
来自专栏知无涯

PHP程序员应该知道的15个库

49990
来自专栏企鹅号快讯

技术贴-JNI编程搭建Java与C+的桥梁(一)

今晚北京的风很大,大到路边的ofo都一路向我贴服膜拜。好的吧,这是我今晚的心情,hhh,当我的Java程序抛出了C++算法的运算结果,一下子,我就跳了起来。如同...

41180
来自专栏游戏杂谈

iTunes Connect开发者指南中的一个疑问

避免app版本出现在iClound中,我的疑问是对已经上架的版本不能设置,那么这个功能的真正意义在哪里?

14810
来自专栏phodal

微信小程序剖析【下】:运行机制

在上一篇《微信小程序「官方示例代码」浅析【上】》中,我们只是简单的罗列了一下代码,这一篇,让我们来玩点刺激的——就是看看IDE的代码,了解它是怎么运行的。 还好...

35680
来自专栏Albert陈凯

终极 Shell-MacTalk-池建强的随想录Customize to your needs…

终极 Shell Posted on 2013 年 7 月 23 日 http://macshuo.com/?p=676 ? zsh 在开始今天的 Mac...

34880
来自专栏Python攻城狮

Python可以做哪些好玩的事之自动刷票1.分析2.小试牛刀(代码基于Python 2.7)

目标网站:http://best.zhaopin.com/?sid=121128100&site=sou

14520

扫码关注云+社区

领取腾讯云代金券