selenium+python自動化81-html報告優化(餅圖+失敗重跑+兼容python2&3)

優化html報告

爲了滿足小夥伴的各種變態需求,爲了裝逼提升逼格,爲了讓報告更加高大上,測試報告做了以下優化:

  • 測試報告中文顯示,優化一些斷言失敗正文亂碼問題
  • 新增錯誤和失敗截圖,展示到html報告裏
  • 優化點擊截圖放大不清晰問題
  • 增加餅圖統計
  • 失敗後重試功能
  • 兼容python2.x 和3.x

報告效果

1.生成的測試報告效果如下圖,默認展示報錯和異常的用例,失敗重試的用例結果也會統計進去。

report

2.點擊顯示截圖,可以直接顯示截取的圖片,無需保存到本地

shoot

table表格

1.修改表格的td後面內容,可以自定義表格名稱

2.drawCircle這個後面是生成餅圖功能

<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()

    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')

2.測試用例一定要定義driver參數,如:

driver = webdriver.Firefox()

失敗重試

1.生成報告的參數裏面加了一個參數retry=1,這個表示用例失敗後,會重新跑一次。

# 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.這是參考的測試用例,我沒在用例裏面生成測試報告,生成測試報告採用的是上面的批量執行,單獨建個腳本執行

# 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點這裏

優化後源碼

1.這個是在大神的基礎上稍微做了一點點圖片顯示的優化,之前的圖片太小,顯示模糊,放大了下

2.然後重新整理了下,採用批量執行用例的方式
seleniumQQ羣:646645429

3.參考代碼從github下載吧
https://github.com/yoyoketang/selenium_report/

學習過程中有遇到疑問的,可以加selenium(python+java) QQ羣交流:646645429

《selenium webdriver基於python源碼案例》已出書:selenium webdriver基於Python源碼案例(購買此書送對應PDF版本)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章