IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> unittest入门学习笔记 -> 正文阅读

[开发测试]unittest入门学习笔记

一、unittest简介

? ? ? ? unittest是一个python单元测试框架,主要由4部分构成:testcase测试用例,testsunites测试套件,testfixture测试夹具,testloader测试加载器,testrunner测试运行器。


二、运行unittest的两种方式

? ? ? ? 1. 命令行:python -m unittest 包名.文件名.类名? ?该方法常用在集成Jenkins时使用

? ? ? ? ? ? ? ? 如果想执行部分用例的话

? ? ? ? ? ? ? ? ? ? ? ? python -m unittest 包名.文件名.类名.方法名

? ? ? ? ? ? ? ? ? ? ? ? python -m unittest 包名.文件名.类名 -k 方法名

? ? ? ? 2. 使用main()方法运行? ?该方法常在调试时使用

? ? ? ? 想要用main()执行,必须有以下操作,否则即使点main()方法,依然是命令行执行

????????(1)使用main()当法执行部分测试用例

import unittest

class MyCase(unittest.TestCase):
    def test01_A(self):
        print("this is a test A")

    def test02_B(self):
        print("this is a test B")

    def test03_C(self):
        print("this is a test C")


if __name__ == '__main__':
    print("================")
# defaultTest 是main方法的一个参数,它代表测试用例的名称,默认是全部测试用例
    unittest.main(defaultTest=["MyCase.test01_A","MyCase.test02_B"])

????????(2)使用main()方法执行部分测试用例要用到TestSunite

if __name__ == '__main__':
    print("=====================")
    sunite = unittest.TestSunite()
    sunite.addTest(MyCase("test01_A"))  # 只执行这一个用例
    
    testcases = [MyCase("test01_A"),MyCase("test02_B")]  # 执行多个测试用例
    sunite = addTests(testcases)

    unittest.TextTestRunner().run(sunite)
    # unittest.main()  跟上面的那个结果是一样的,只是方法不同而已

三、unittest和pytest的区别

1. 用例编写规则

????????unittest需遵循以下规则:

????????(1)测试文件必须先导入unittest包(import unittest)

????????(2)测试类必须继承unittest.TestCase

????????(3)测试方法必须以test开头

import unittest

class MyTestCase(unittest.TestCase):
    def test01_login(self):
        print("this is a testcase!")

?????????pytest需遵循以下规则:

? ? ? ? (1)测试文件必须以test_开头或_test结尾

? ? ? ? (2)测试类必须以Test开头

? ? ? ? (3)测试方法必须以test开头

class TestCase01:
    def test_01_login(self):
        print("this is a testcase!!")

2. 用例前后置

unittestpytest
每个用例前后执行一次setUp/tearDown

方法级(在类里面的是方法):

setup_method/teardown_method

?setup/teardown

函数级(在类外面的是函数):

setup_function/teardown_function

每个类前后执行一次setUpClass/tearDownClasssetup_class/teardown_class
每个模块前后执行一次setUpModule/tearDownModulesetup_module/teardown_module

3. 断言

? ? ? ? unittest提供了很多种断言的方式,pytest使用assert就可以实现

? ? ? ? unittest常用断言:

? assertEqual(a,b)a == b
? assertNotEqual(a,b)a != b
? assertTrue(a)a为真
assertFalsea为假
assertIn(a,b)a在b里
assertNotIn(a,b)a不在b里

4. 失败重跑

? ? ? ? unittest没有失败重跑

? ? ? ? pytest具有pytest-rerunfailures插件,能够实现失败重跑

5. 数据驱动

????????unittest:ddt

? ? ? ? (1)导入ddt包,在terminal中输入pip install ddt

? ? ? ? (2)在需要数据的用例所在类import ddt

? ? ? ? (3)具体实现步骤如下:

import unittest
import ddt

# 测试数据
testdata = [{"username":"A","password":"B"},
            {"username":"C","password":"D"},
            {"username":"E","password":"F"}]

@ddt.ddt()
class MyTestCase(unittest.TestCase):
# 测试夹具
    def setUp(self) -> None:
        print("start!")

    @ddt.data(*testdata)
    def test01_login(self,data):
        print(data)

    def tearDown(self) -> None:
        print("end!")

? ? ? ? pytest:@pytest.mark.paramtrize装饰器

? ? ? ? (1)编写一个存放数据的yaml文件

? ? ? ? (2)编写一个读取该yaml文件的工具类

? ? ? ? (3)使用@pytest.mark.paramtrize装饰器传递数据

-
  name: 获得token鉴权码的接口
  request:
    url: https://www.bilibili.com/video/BV1Wf4y147en
    method: get
    headers:
      Content-Type: application/json
    params:
      p: 11
      spm_id_from: pageDriver
import yaml

class YamlUtil:
    def __init__(self,yaml_file):
        self.yaml_file = yaml_file

    def read_yaml(self):
        with open(self.yaml_file,encoding='utf-8') as f:
            # 反序列化
            value = yaml.load(f,Loader=yaml.FullLoader)
            print(value)
            return value
import pytest
import requests

from testcase.yaml_util import YamlUtil


class TestCase01:

    @pytest.mark.parametrize('args', YamlUtil('testcase/test_api.yaml').read_yaml())
    def test_01_baili(self, args):
        print(args)
        url = args['request']['url']
        params = args['request']['params']
        res = requests.get(url, params=params)
        print(res.text)

6. 用例分类执行

? ? ? ? unittest:默认执行所有,也可以通过TestSunite来执行部分用例,或者使用-k参数

? ? ? ? pytest:@pytest.mark.xxx 装饰器,后面这个xxx可以在pytest的pytest.ini配置文件中设置

markers=
    smoke:冒烟用例
    usermessage:用户信息用例

7. 用例执行顺序

? ? ? ? unittest按照ACSII码的大小执行

? ? ? ? pytest按照从上到下的顺序依次执行

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2021-07-07 00:07:16  更:2021-07-07 00:07:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/17 18:23:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码