HTMLTestRunner.py python 2版本
例子:
testcase5_dynamic.py
import unittest
from dev.widget import Widget
class WidgetTestCase(unittest.TestCase):
def setUp(self):
self.widget=Widget()
def tearDown(self):
self.widget.dispose()
self.widget=None
def testSize(self):
self.assertEqual(self.widget.getSize(), (40,40), "Wrong")
def testResize(self):
self.widget.resize(100, 100)
self.assertEqual(self.widget.getSize(), (100,100), "Wrong")
html_report.py:
#coding:utf-8
from lib import HTMLTestRunner
import unittest
from testcase5_dynamic import WidgetTestCase
if __name__=='__main__':
suite=unittest.makeSuite(WidgetTestCase)
filename='D:\\myreport.html'
fp=file(filename,'wb')
runner=HTMLTestRunner.HTMLTestRunner(fp,title=u'my unit test',description=u'This is a report test')
runner.run(suite)
HTMLTestRunner.py 的python3 版本
由於 HTMLTestRunner.py 原本就是python2版本,目前還沒找到python3版本,所以需要我們自己修改 HTMLTestRunner.py 文件。1. 修改的地方問題一:No module named StringIO原因:python 3 中 沒有 StringIO 這個模塊。這裡我們需要使用io 這個模塊來代替。第94行引入的名稱要改,從 import StringIO 改成import io。相應的,539行 self.outputBuffer = StringIO.StringIO() 要改成self.outputBuffer = io.BytesIO()在控制臺console 就可以看到每執行一條用例,就會有如下輸出:
E test (testcases.login.testcase1.MyTest)
ok test (testcases.login.testcase2.MyTest)
F test (testcases.login.testcase3.MyTest)
class OutputRedirector(object)
# 將輸出進行重定向
class Template_mixin(object)
# 定義生成HTML結果文件所需要的模板。
# 如果我們想改變HTML的格式等待,可以在這裡進行改動
class _TestResult(TestResult)
# 定義繼承自 unittest.TestResult 的 類。
# 這裡重寫了 unittest.TestResult 的多個方法,比如 startTest(self, test) 等等
class HTMLTestRunner(Template_mixin)
# 這裡可以說是使用 HTMLTestRunner.py 的入口。定義了多個我們可以看到的方法,比如 run(self, test)
class TestProgram(unittest.TestProgram)
# 這裡繼承自 unittest.TestProgram 類,重寫了 runTests 方法。
# 用於命令行執行測試
測試腳本:
#coding=utf-8 #防止中文亂碼
from selenium import webdriver
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
#加載unittest模塊
import unittest
import time
import re
#加載HTMLTestRunner,用於生成HTMLreuslt
import HTMLTestRunner
class BaiduYun(unittest.TestCase):
def setUp(self):
self.browser=webdriver.Chrome()
self.browser.implicitly_wait(30)
self.base_url="http://yun.baidu.com"
self.verficationErrors=[]
self.accept_next_alert=True
def Login(self):
browser=self.browser
browser.get(self.base_url+'/')
u"""百度雲登錄"""
browser.find_element_by_name("userName").clear()
username=browser.find_element_by_name("userName")
username.send_keys("alu***")
username.send_keys(Keys.TAB)
time.sleep(2)
password=browser.find_element_by_name("password")
password.send_keys("***")
password.send_keys(Keys.ENTER)
time.sleep(3)
browser.close()
def Register(self):
browser=self.browser
browser.get(self.base_url+'/')
u"""立即註冊百度帳號"""
browser.find_element_by_class_name("link-create").click()
time.sleep(2)
browser.close()
def Link(self):
browser=self.browser
browser.get(self.base_url+'/')
u"""會員中心"""
browser.find_element_by_link_text("會員中心").click()
time.sleep(2)
browser.close()
def tearDown(self):
self.browser.quit()
self.assertEqual([],self.verficationErrors)
if __name__=="__main__":
#unittest.main()
testunit=unittest.TestSuite()
#將測試用例加入到測試容器中
testunit.addTest(BaiduYun("Login"))
testunit.addTest(BaiduYun("Register"))
testunit.addTest(BaiduYun("Link"))
#獲取當前時間,這樣便於下面的使用。
now = time.strftime("%Y-%m-%M-%H_%M_%S",time.localtime(time.time()))
#打開一個文件,將result寫入此file中
fp=open("result"+now+".html",'wb')
runner=HTMLTestRunner.HTMLTestRunner(stream=fp,title='test result',description=u'result:')
runner.run(testunit)
fp.close()
F5,運行,就這樣得到了test result