unittest在命令行可以直接输出测试结果。但是可能需要生生一个所有测试的执行结果作为报告或者把测试报告发送给相关人员,给其发送命令行日志不是一个明智的选择。他们需要格式格式更加友好的测试报告,既能够查看测试结果的概况,也能深入查看报告细节,unittest没有内置模块可以生成格式友好的报告,可以使用 Wai Yip Tung 编写的unittest 的扩展 HTMLTestRunner来实现。
利用HTMLTestRunner来生成测试报告。创建一个包含实际吃报告的输出文件,需要配置HTMLTestRunner选项和运行测试。下载HTMLTestRunner.py 后放入到相应的python目录下,如本PC上的目录:“C:\Python27\Lib”,打开python自带的IDLE
在 Framework 工程下添加一个 report 模块,和config.py模块中的目录对应
REPORT_PATH = os.path.join(BASE_PATH, 'report')
修改test_baidu5.py模块
#coding:utf-8
"""test_baidu5.py 生成html报告的功能"""
import os
import time
import unittest
from selenium import webdriver
from selenium.webdriver.common.by import By
from Framework.utils.config import Config, DRIVER_PATH, DATA_PATH,REPORT_PATH
from Framework.utils.log import logger
from Framework.utils.file_reader1 import ExcelReader
import HTMLTestRunner
class TestBaiDu(unittest.TestCase):
driver = None
URL = Config().get('URL')
excel = os.path.join(DATA_PATH,'baidu.xlsx')
locator_kw = (By.ID, 'kw')
locator_su = (By.ID, 'su')
locator_result = (By.XPATH, '//div[contains(@class, "result")]/h3/a')
print locator_result
def sub_setUp(self):
self.driver = webdriver.Chrome(executable_path=DRIVER_PATH + '/chromedriver.exe')
self.driver.get(self.URL)
print "DATA_PATH:",DATA_PATH
def sub_tearDown(self):
self.driver.quit()
def test_search(self):
datas = ExcelReader(self.excel).data
print datas
for d in datas:
print "d['search']",d['search']
self.sub_setUp()
print "self.driver",self.driver
self.driver.find_element(*self.locator_kw).send_keys(d['search'])
self.driver.find_element(*self.locator_su).click()
time.sleep(1)
#开始是find_element,由于定位的是信息是一组信息(selenium和python selenium),因此需要使用find_elements()进行定位
links = self.driver.find_elements(*self.locator_result)
for link in links:
logger.info(link.text)
self.sub_tearDown()
if __name__ == '__main__':
#unittest.main(verbosity=2)
#report = os.path.join(REPORT_PATH,'/report.html')
report = REPORT_PATH + '\\report.html'
print "report:",report
with open(report,'wb') as f:
runner = HTMLTestRunner(f,verbosity = 2,title = '自动化测试框架搭建',descripton = 'rhx Tests')
runner.run(TestBaiDu('test_search'))