unittest模块

unittest介绍

unittest 单元测试 测试框架;单元测试:最小的测试单元,unittest是python自带的一套测试框架

unittest 测试框架的介绍:(框架设计灵感来源于java语言的测试框架)

unittest框架的作用:管理和组织测试用例,生成测试报告,便于后去的维护

常用的一些单元测试框架: unittest pytest android测试框架、Java Junit测试框架
unittest 框架

注意事项

(1)unittest 框架 只有一个类开始和类结束
(2)unittest框架 只运行以test开头的用例
(3)test用例运行的顺序,以ascii码为准:0-9 A-Z a-z
(4)每条用例都要用到方法开始,方法结束
(5)在我们使用中,有时不写类的开始和结束

自动化用例编写注意点

1、一个自动化脚本就是一个完整的场景:从开始—执行过程—结束(退出)
2、一个自动化脚本只验证一个功能点,不要试图把所有功能都写在一个用例中
3、编写自动化用例尽量是正常场景,避免异常场景(尽量不填验证登录)
4、自动化用例尽量保证独立性,不要造成一个用例与多个用例产出数据上或
业务上的关联,这会给后期带来用例维护上的不便
5、自动化用例的断言,只针对需要断言的地方进行断言(重要环节),没必要在每个
个环境进行断言验证

unitest使用例子

基本格式
import unittest  # 导入unittest框架


class Test(unittest.TestCase):  # 定义一个类,继承unittest中的TestCase
    @classmethod
    def setUpClass(cls) -> None:  # 类的开始
        print('类开始')

    @classmethod
    def tearDownClass(cls) -> None:  # 类的结束
        print('类结束')

    def setUp(self) -> None:  # 方法的开始:写的内容:比如driver对象,打开浏览器 测试用例前的操作
        print('方法开始')

    def tearDown(self) -> None:  # 方法的结束:负责释放资源,比如关闭浏览器,测试用例后的执行
        print('方法结束')

    def test001(self):  # 执行test开头的测试用例,以及根据排序来执行
        print(111)

    def test002(self):
        print(222)

    def hz(self):  # 非test开头的用例,在unittest框架里不执行
        print('杭州')


if __name__ == '__main__':
    unittest.main()
用例详情

在下边的第二种第四种执行用例的方法中,需要pycharm的run/debug configurations 中点击左上角加号python对象在script path填上文件的绝对路径,点击ok 运行即可

image-20210311190726952

import unittest
from selenium import webdriver
from time import sleep, strftime
from ui_zidonghua.HTMLTestRunner3_New import HTMLTestRunner  # 导入报告模板


class TestBaiDu(unittest.TestCase):
    def setUp(self) -> None:
        self.driver = webdriver.Chrome()
        self.driver.get('http://www.baidu.com')
        self.driver.implicitly_wait(6)

    def tearDown(self) -> None:
        sleep(3)
        self.driver.close()

    def test001(self):
        self.driver.find_element_by_id('kw').send_keys('selenium')
        self.driver.find_element_by_id('su').click()

    def test002(self):
        self.driver.find_element_by_id('kw').send_keys('python')
        self.driver.find_element_by_id('su').click()

    def test003(self):
        self.driver.find_element_by_id('kw').send_keys('html')
        self.driver.find_element_by_id('su').click()

    def hz(self):
        self.driver.find_element_by_id('kw').send_keys('dcs')
        self.driver.find_element_by_id('su').click()


def all_case():  # 定义一个函数
    suit = unittest.TestSuite()  # 创建一个套件或者容器,用来装所有的用例对象
    suit.addTest(TestBaiDu('test001'))  # adTest添加用例
    # suit.addTests([TestBaiDu('test001'), TestBaiDu('test002')])  # adTests添加多个用例
    return suit


if __name__ == '__main__':
    # unittest.main()  # 第一种执行框架中的全部用例

    # runner = unittest.TextTestRunner()
    # runner.run(all_case())  # 第二种执行部分用例

    # 第三种方法
    # path = r'F:\flask_projects\dcs\ui_zidonghua'
    # ss = unittest.defaultTestLoader.discover(start_dir=path,pattern="test*.py")
    # runner = unittest.TextTestRunner()
    # runner.run(ss)

    # 第四种可以直接生成报告
    path = r'F:\flask_projects\dcs\ui_zidonghua'
    bgpath = r'F:\flask_projects\dcs\ui_zidonghua'
    ss = unittest.defaultTestLoader.discover(start_dir=path, pattern="test*.py")
    now = strftime('%Y-%m-%d-%H-%M-%S')
    filename = bgpath + '\\' + str(now) + '_ui.html'
    f = open(filename, 'wb')
    runner = HTMLTestRunner(stream=f,title='ui自动化测试报告', description='用例执行情况', tester='hz')
    runner.run(ss)
posted @ 2021-03-11 21:11  世界快乐  阅读(59)  评论(0)    收藏  举报