生成测试报告工具-Unittest

unittest中最核心的四个概念是:test case, test suite, test runner, test fixture。

一个TestCase的实例就是一个测试用例。什么是测试用例呢?就是一个完整的测试流程,包括测试前准备环境的搭建(setUp),执行测试代码(run),以及测试后环境的还原(tearDown)。元测试(unit test)的本质也就在这里,一个测试用例是一个完整的测试单元,通过运行这个测试单元,可以对某一个问题进行验证。

而多个测试用例集合在一起,就是TestSuite,而且TestSuite也可以嵌套TestSuite。

TestLoader是用来加载TestCase到TestSuite中的,其中有几个loadTestsFrom__()方法,就是从各个地方寻找TestCase,创建它们的实例,然后add到TestSuite中,再返回一个TestSuite实例。

TextTestRunner是来执行测试用例的,其中的run(test)会执行TestSuite/TestCase中的run(result)方法。
测试的结果会保存到TextTestResult实例中,包括运行了多少测试用例,成功了多少,失败了多少等信息。

而对一个测试用例环境的搭建和销毁,是一个fixture。

一个class继承了unittest.TestCase,便是一个测试用例,但如果其中有多个以 test 开头的方法,那么每有一个这样的方法,在load的时候便会生成一个TestCase实例,如:一个class中有四个test_xxx方法,最后在load到suite中时也有四个测试用例。

安装HTMLTestRunner

pip install html-testRunner

from selenium import webdriver
import time
import unittest
import HTMLTestRunner

class TestBaidu(unittest.TestCase):   #继承testCase测试用例

# 单元测试  类名函数名文件名都必须以test开头,会自动识别

#override metherd 重写父类方法  setUp 初始化  teardown 结束时

# 没有值就是业务场景 带了输入的值就是单元测试


    # 打开百度  #初始化  环境搭建(setUp)
    def setUp(self):
        self.db = webdriver.Chrome()   #指定浏览器
        self.db.get("https://www.baidu.com")   #地址
        self.db.maximize_window()       #最大化窗口

    # 百度搜索的操作
    def test_search(self):
        db = self.db
        self.db.find_element_by_id("kw").send_keys("陈奕迅")    #输入框
        db.find_element_by_id("su").click()    # 点击百度搜索

    # 百度设置每页展示条数
    def test_baidu_set(self):
        db = self.db
        db.get("http://baidu.com/gaoji/preferences.html")
        RequType = db.find_element_by_xpath("//select[@id='nr']")
        RequTypeOptionAll = RequType.find_elements_by_tag_name("option")
        for values in RequTypeOptionAll:
            print(values.get_attribute("value"))
            print(values.text)
            if "50" in values.text:
                values.click()
                break
        time.sleep(3)
        # 保存设置
        db.find_element_by_xpath("/html/body/form/div/input").click()
        time.sleep(2)
        db.switch_to_alert().accept()
        # db.switch_to.alert

    #结束的时候用  #结束的时候
    def tearDown(self):
        self.db.close()


#程序入口
if __name__ == '__main__':
    
    # 创建测试用例容器
    testlist = unittest.TestSuite()
    
    # 将用例添加到容器中
    # testlist.addTest(类名("函数名"))
    testlist.addTest(TestBaidu("test_search"))
    testlist.addTest(TestBaidu("test_baidu_set"))

    #创建测试报告
    #创建文件目录
    file = "E:/baidu.html"     #生成测试报告的时候用的是二进制文件wb  rb wb 以二进制的方式进行读写文件
    fle = open(file,"wb")
    
    #定义测试报告
    runner = HTMLTestRunner.HTMLTestRunner(
        stream=fle,                 #stream定义报告所写入得内容
        title='百度搜索测试报告',    #itle为报告标题
        description='用例执行情况'       #description为报告得说明与描述
    )

    #将测试报告和测试容器关联在一起
    runner.run(testlist)

# test = TestBaidu()
# test.setUp()
# test.search()
#
# test.setUp()
# test.test_baidu_set()
# test.teardown()
原文地址:https://www.cnblogs.com/gaodenghan/p/14180784.html