• 赠送录播笔记


    官网:pytest.org

    测试类中不能包含__init__方法

     运行:

     测试用例常用参数:

     pytest框架结构

    unittest官网:https://docs.python.org/3/library/unittest.html

     

    参数化:

    * 单个参数化:参数名称写在字符串中,参数值用列表传递

    * 多个参数,参数名称写在字符串中,参数值用列表或者元祖的方式传递

    * 测试用例取别名:ids=

    * 笛卡尔积:用两个装饰器分别传入参数

    * 从yaml中读取参数:数据读取成为参数化中需要的参数形式

    参数化:

        @pytest.mark.parametrize(
            "a,b,expect",
            [
                (2,3,5),
                (-2,-3,-5),
                (-0.2,-0.3,-0.5)
            ],ids=['int','float','negative']
        )
        def test_add1(self,a,b,expect):
            result = Calculator.add(0,a,b)
            assert result ==expect
            print("这是test_add1")

    其中

    ids=['int','float','negative']
    输出结果如下,给每一组用例重新命名
    注意:有几组用例,就要命名几个,否则会报错,比如上面是三组用例,那么重新命名就要写三个。

     对于浮点数的运算,需要如下写断言

    assert round(result,2) ==expect
    加入round意为保留两位小数,这样就避免了报上述错误;

    课程代码
    # Author:Han
    # python:3.9
    import pytest
    import yaml
    from python_code.calc import Calculator
    with open('./datas/calc.yaml') as f:
        data = yaml.safe_load(f)['add']
        print(data)
        add_datas = data['datas']
        print(add_datas)
        add_myid = data['myid']
        print(add_myid)
    
    class TestCalc:
        def setup_class(self):
            self.calc = Calculator()
            print("计算开始!!!")
    
        def teardown_class(self):
            print("计算结束啦!!!")
    
        @pytest.mark.parametrize(
            "a,b,expect",
            add_datas,ids = add_myid
        )
        def test_add1(self,a,b,expect):
            result = Calculator.add(0,a,b)
            if isinstance(result,float):
                result = round(result,2)
            assert result ==expect
            print("这是test_add1")
    
    
        @pytest.mark.parametrize('a',[1,2,3])
        @pytest.mark.parametrize('b',[4,5,6])
        def test_demo(self,a,b):
            print(f"a = {a},b = {b}")

    yaml文件写法:

    add:
      datas:
        - - 1
          - 1
          - 2
        - - 100
          - 100
          - 200
        - [0.1,0.2,0.3]
        - [-1,-1,-2]
      myid:
        - 'int'
        - 'float'
        - 'negative'
        - 'banana'

    业务代码
    # Author:Han
    # python:3.9
    class Calculator:
        #加法
        def add(self,a,b):
            return a + b
    
        #减法
        def sub(self,a,b):
            return a-b
    
        #乘法
        def mul(self,a,b):
            return a*b
    
        #除法
        def div(self,a,b):
            return a/b
    

    课后作业,补全计算器测试用例

    测试用例:

    # Author:Han
    # python:3.9
    import pytest
    import yaml
    from python_code.calc import Calculator
    
    with open('./datas/calc.yaml') as f:
        data = yaml.safe_load(f)
        add_datas = data['add']['datas']
        add_myid = data['add']['myid']
        sub_datas = data['sub']['datas']
        sub_myid = data['sub']['myid']
        mul_datas = data['mul']['datas']
        mul_myid = data['mul']['myid']
        div_datas = data['div']['datas']
        div_myid = data['div']['myid']
        print(data)
    
    
    class TestCalc:
        def setup_class(self):
            self.calc = Calculator()
            print("计算开始!!!")
    
        def teardown_class(self):
            print("计算结束啦!!!")
    
        @pytest.mark.parametrize(
            "a,b,expect",
            add_datas,ids = add_myid
        )
        def test_add(self,a,b,expect):
            result = Calculator.add(0,a,b)
            if isinstance(result,float):
                result = round(result,2)
            assert result ==expect
            print("这是test_add")
    
    
        @pytest.mark.parametrize(
            "a,b,expect",
            sub_datas, ids=sub_myid
        )
        def test_sub(self,a,b,expect):
            result = Calculator.sub(0, a, b)
            if isinstance(result, float):
                result = round(result, 2)
            assert result == expect
            print("这是test_sub")
    
        @pytest.mark.parametrize(
            "a,b,expect",
            mul_datas, ids=mul_myid
        )
        def test_mul(self,a,b,expect):
            result = Calculator.mul(0, a, b)
            if isinstance(result, float):
                result = round(result, 2)
            assert result == expect
            print("这是test_mul")
    
        @pytest.mark.parametrize(
            "a,b,expect",
            div_datas, ids=div_myid
        )
        def test_div(self,a,b,expect):
            result = Calculator.div(0, a, b)
            if isinstance(result, float):
                result = round(result, 2)
            assert result == expect
            print("这是test_div")
    

     业务代码:

    # Author:Han
    # python:3.9
    class Calculator:
        #加法
        def add(self,a,b):
            return a + b
    
        #减法
        def sub(self,a,b):
            return a-b
    
        #乘法
        def mul(self,a,b):
            return a*b
    
        #除法
        def div(self,a,b):
            return a/b

     yaml文件

    add:
      datas:
        - - 1
          - 1
          - 2
        - - 100
          - 100
          - 200
        - [0.1,0.2,0.3]
        - [-1,-1,-2]
      myid:
        - 'int'
        - 'bigint'
        - 'float'
        - 'negetive'
    
    
    
    sub:
      datas:
        - - 1
          - 1
          - 0
        - - 200
          - 100
          - 100
        - [0.2,0.1,0.1]
        - [-1,-4,3]
      myid:
        - 'int'
        - 'bigint'
        - 'float'
        - 'negetive'
    
    mul:
      datas:
        - - 1
          - 1
          - 1
        - - 100
          - 100
          - 10000
        - [0.1,0.2,0.02]
        - [-1,-1,1]
      myid:
        - 'int'
        - 'bigint'
        - 'float'
        - 'negetive'
    
    div:
      datas:
        - - 4
          - 2
          - 2
        - - 1000
          - 100
          - 10
        - [0.2,0.1,2]
        - [-4,-1,4]
      myid:
        - 'int'
        - 'bigint'
        - 'float'
        - 'negetive'
  • 相关阅读:
    liunx上升级python2至python3
    python之logging日志
    c# 脚本引擎 脚本编辑器
    设置 BCompare 打开文件时的默认字符编码
    Python调用动态库,获取BSTR字符串
    服务器CPU100%的排查日志
    栈(Stack)
    搭建个人的github.io博客
    django.core.exceptions.ImproperlyConfigured: SQLite 3.9.0 or later is required (found 3.7.17)
    virtualenv中使用python的虚拟环境
  • 原文地址:https://www.cnblogs.com/hantongxue/p/14359439.html
Copyright © 2020-2023  润新知