首页 > 其他分享 >UnitTest

UnitTest

时间:2024-07-31 10:49:58浏览次数:14  
标签:__ UnitTest self suite print import unittest

UnitTest框架
是Python自带的单元测试框架,也可以用来做自动化测试(管理和执行用例)
核心要素(组成):
1、TestCase(测试用例)
2、TestSuite(测试套件):打包TestCase
3、TestRunner(测试执行):执行Testsuite
4、TestLoader(测试加载):对TestSuite的补充,也是打包TestCase的
5、Fixture(测试夹具):一种代码结构,书写前置方法(执行用例之前的方法)和后置方法(执行用例之后的方法)

 

单个用例创建及执行

import unittest

# 定义测试类(只要继承unittest.TestCase类,就是测试类)
class TestDemo(unittest.TestCase):
    # 书写测试方法,方法中的代码就是真正用例代码,方法名必须以test开头
    def test01(self):
        print('测试方法一')

    def test02(self):
        print('测试方法二')

# 执行
if __name__ == '__main__':
    unittest.main()

 

多个用例及执行

test_01.py

import unittest

# 定义测试类(只要继承unittest.TestCase类,就是测试类)
class TestDemo01(unittest.TestCase):
    # 书写测试方法,方法中的代码就是真正用例代码,方法名必须以test开头
    def test01(self):
        print('1-1')

    def test02(self):
        print('1-2')

test_02.py

import unittest

# 定义测试类(只要继承unittest.TestCase类,就是测试类)
class TestDemo02(unittest.TestCase):
    # 书写测试方法,方法中的代码就是真正用例代码,方法名必须以test开头
    def test01(self):
        print('2-1')

    def test02(self):
        print('2-2')

testSuite_Runner.py

import unittest
from test_01 import TestDemo01
from test_02 import TestDemo02

suite = unittest.TestSuite()  # 实例化套件对象
# 方法一:往测试套件里添加测试类中的某一个测试方法
#suite.addTest(TestDemo01('test01'))  # 套件对象.addTest(测试类名('测试方法名'))
#suite.addTest(TestDemo01('test02'))  # 套件对象.addTest(测试类名('测试方法名'))
#suite.addTest(TestDemo02('test01'))  # 套件对象.addTest(测试类名('测试方法名'))
#suite.addTest(TestDemo02('test02'))  # 套件对象.addTest(测试类名('测试方法名'))

# 方法二:往测试套件里添加测试类下所有的测试方法
#suite.addTest(unittest.makeSuite(TestDemo01))
#suite.addTest(unittest.makeSuite(TestDemo02))

# 方法三:用TestLoader发现所有案例,得到的是套件对象
suite = unittest.TestLoader().discover('.', 'test_*.py')

runner = unittest.TextTestRunner()  # 实例化执行对象
runner.run(suite)  # 执行对象.run(套件对象)

 

 

fixture的使用

testCases.py

import unittest

class TestLogin(unittest.TestCase):
    # 前置类方法
    @classmethod    # 类方法,需要添加装饰器
    def setUpClass(cls):
        print('1.open brower')
        
    # 后置类方法
    @classmethod
    def tearDownClass(cls):
        print('9.close brower')
        
    # 前置方法
    def setUp(self):
        print('2.input url')
        print('3.click login')

    # 后置方法
    def tearDown(self):
        print('7.click logout')
        print('8.close url')
        
    def testLogin1(self):
        print('4.input user 1')
        print('5.input password 1')
        print('6.click login button')
        
    def testLogin2(self):
        print('4.input user 2')
        print('5.input password 2')
        print('6.click login button')
        
        
if __name__ == '__main__':
    unittest.main()

 

 testRunner.py

import unittest

suite = unittest.TestLoader().discover('.', 'testCases.py')
unittest.TextTestRunner().run(suite)

# 执行结果如下

1.open brower  # 前置类方法
2.input url  # 前置方法
3.click login
4.input user 1
5.input password 1
6.click login button
7.click logout  # 后置方法
8.close url
.2.input url  # 前置方法
3.click login
4.input user 2
5.input password 2
6.click login button
7.click logout  # 后置方法
8.close url
.9.close brower # 后置类方法

 

断言

tools.py

def add(a, b):
    return a + b

assert_case.py

import unittest
from tools import add

class AssertCase(unittest.TestCase):
    def test01(self):
        ## 测试类.assertEqual(预期结果,实际结果)
        self.assertEqual(2, add(1, 1))
        
    def test_assert_not_equal2(self):
        self.assertEqual(3, add(1, 2))


    def test_assert_in3(self):
        ## 测试类.assertIn(预期结果,实际结果集) 预期结果在实际结果集里面
        self.assertIn(add(2, 3), [5, 6, 7])
        
        

if __name__ == '__main__':
    unittest.main()

assert_runner.py

import unittest
from assert_case import AssertCase

suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(AssertCase))

unittest.TextTestRunner().run(suite)

 

断言+参数化(paramterized需要提前用pip安装)

 

 assert_case.py

import unittest
import json
from tools import add
from parameterized import parameterized

# data = [(2, 1, 1), (3, 1, 2), (4, 2, 2), (5, 3, 2)]   # 方法一 将数据源直接写在Python文件中

# 方法二 将数据源写在json文件中
with open('data.json', encoding='utf-8') as f:
    data = json.load(f)  # [[2, 1, 1], [3, 1, 2], [4, 2, 2], [5, 3, 2]]



class AssertCase(unittest.TestCase):
    @parameterized.expand(data)     # 直接取数据源列表[(),()]
    def test01(self, excpect, a, b):
        ### 测试类.assertEqual(预期结果,实际结果)
        self.assertEqual(excpect, add(a, b))



if __name__ == '__main__':
    unittest.main()

assert_runner.py

#import unittest
#from assert_case import AssertCase

#suite = unittest.TestSuite()
#suite.addTest(unittest.makeSuite(AssertCase))

# unittest.TextTestRunner().run(suite)



# 生成测试报告(替换下runner对象)
import unittest
from htmltestreport import HTMLTestReport
from assert_case import AssertCase

suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(AssertCase))

HTMLTestReport('HTMLTestReport.html', 'TestRepoer', 'This is a test report.').run(suite)

 

 

跳过

import unittest
v = 2

class SkipCase(unittest.TestCase):
    @unittest.skip('暂时不想执行')
    def testCase01(self):
        print('test01')

    @unittest.skipIf(v >= 2, '版本大于等于2就不执行')
    def testCase02(self):
        print('test02')
        
    def testCase03(self):
        print('test03')
        

if __name__ == '__main__':
    unittest.main()

 

标签:__,UnitTest,self,suite,print,import,unittest
From: https://www.cnblogs.com/SakuraYuanYuan/p/17938581

相关文章

  • python3 unittest+BeautifulReport单个进程输出多个测试报告
    最近一个项目中需要由于输出的案例内容非常多(上万条),导致BeautifulReport输出的报告内容非常大(几百兆)。浏览器无法正常处理这么大的测试报告,就算打开了,也不方便阅读和处理,因此需要将报告分成多个输出。经修改代码,发现单个进程内输出多个测试报告出现问题:第一个测试报告能正常数据......
  • 06-UnitTest框架
    DAY-09课堂笔记UnitTest基本使用UnitTest框架介绍框架什么是框架?1.框架英文单词framework2.为解决一类事情的功能集合UnitTest框架是Python自带的一个单元测试框架-⾃带的,可以直接使⽤,不需要单外安装-测试⼈员⽤来做⾃动化测试,作为⾃动化测试的执⾏框......
  • requsts、pytest、unittest区别
    在开始本文之前,我想跟大家澄清两个概念,一个是测试框架一个是测试工具。很多人容易把他们搞混了,测试框架是诸如Unittest、Pytest、TestNG这类,而测试工具指的则是Selenium、Appium、Jmeter这类。测试框架测试框架的作用是,帮助我们管理测试用例、执行测试用例、参数化、断言......
  • 当值来自函数 python unittest 时,如何模拟全局变量
    我必须在python中模拟全局变量,但变量值来自另一个函数。当我导入文件时,这个函数正在运行,但我想要那里的模拟值。secrets.pyimporttracebackimportloggingimportboto3importosimportjsonlogger=logging.getLogger()logger.setLevel(logging.INFO)secret_......
  • python接口自动化(二十五)--unittest断言——下(详解)
    1.简介 本篇还是回归到我们最初始的话题,想必大家都忘记了,没关系看这里:传送门 没错最初的话题就是登录,由于博客园的登录机制改变了,本篇以我找到的开源免费的登录API为案例,结合unittest框架写2个用例。同样我们先来看一下接口文档。2.接口文档2.1登录接口请求方式......
  • 【python生成用例报告】unittest、HTMLTestReport、参数化demo
    使用第三方的报告模版,生成报告HTMLTestReport,本质是TestRunner-安装pipinstallHTMLTestReport-使用1.导包unittest、HTMLTestReport2.组装用例(套件,loader)3.使用HTMLTestReport中的runner执行套件4.查看报告目录结构:app.py:importosBase......
  • selenium10_单元测试框架unittest
    一、Python中单元测试框架:unittest框架和pytest框架。本篇记录unittest1.Unittest是通用的,可以做单元测试,接口测试,selenium自动化,app自动化2.需要导入unittest,类继承自unittest.TestCase。3.类名大驼峰;测试方法必须以test开头;测试用例的方法中,不能有参数。4.Pycharm中用un......
  • Python+selenium+unittest框架实现网易邮箱的自动登录
    文章目录概要整体架构流程技术细节小结概要 本实例只针对简单的账密登录场景做处理,涉及登录方式切换、人机检测部分未作处理,后续会跟进处理。整体架构流程依赖环境    Python3.7    selenium3.141.0    ddt1.6.0        目......
  • 四、浅谈 unittest 框架
    1.分层模型:(1)页面元素处理层:即PageObject(PO模式)表示页面对象管理,将每个页面上所有元素定义在一个模块中,便于维护脚本。(2)业务流操作层:基于页面元素处理层实现业务流的自由组织,对应自动化测试的业务流场景的执行测试用例。(3)测试用例层:根据业务流场景设计相应的测试......
  • 27-unittest之断言(assert)
            在测试方法中需要判断结果是pass还是fail,自动化测试脚本里面一般把这种生成测试结果的方法称为断言(assert)。    使用unittest测试框架时,有很多的断言方法,下面介绍几种常用的断言方法:assertEqual、assertIn、assertTrue。一、测试代码importunittes......