• 生成测试报告工具-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()
  • 相关阅读:
    .net core3.1 abp动态菜单和动态权限(思路) (二)
    .net core3.1 abp学习开始(一)
    api.versioning 版本控制 自动识别最高版本
    .netcore 定制化项目开发的思考和实现
    netcore 非注入全局获取配置文件
    linux nginx搭建与使用
    linux docker .net core 从建立网站到预览
    linux 学习 mysql安装到连接
    linux 安装redis及问题收集
    为何说要多用组合少用继承?如何决定该用组合还是继承?
  • 原文地址:https://www.cnblogs.com/gaodenghan/p/14180784.html
Copyright © 2020-2023  润新知