IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    使用pytest进行批量测试

    bear发表于 2017-02-28 06:41:32
    love 0

    Pytest是python的一个测试模块,可以编写一些简单的测试用例,也可以用来进行一些批量测试,下面简单介绍一下。

    1,安装

    $ pip install -U pytest
    or
    $ easy_install -U pytest
    
    $ py.test --version
    

    2,基础语法

    #!/usr/bin/python
    import pytest
    
    def func(x):
        return x + 1
    
    def test_answer():    #测试用例,方法需要以test_开头
        assert func(3) == 5
    

    运行之

    $ py.test 2.py    #注意需要用py.test命令来运行之
    

    稍微复杂一点儿的写法:

    #!/usr/bin/python
    import pytest
    
    class TestClass:
    
        def test_one(self):
            x = "this"
            assert "h" in x
    
        def test_two(self):
            x = 3
            assert x > 2
    

    这里总结一下用法,
    1,以test_开头的方法,会被py.test自动处理,无需额外调用该方法;
    2,使用assert进行判断,assert后面应该是一个boolean类型的,可以是一个判断语句
    ,比如3 > 2,又或者是a in b等等。

    3,实际应用
    这里有一个实际应用,我想批量检查一批机器上的CPU,内存,和机器上的2个分区,并将CPU大于80%,内存大于95,和分区大于80%的机器找出来,如何实现呢?
    假设这里已经提供好了API,可以读取到所有机器上的CPU、内存、分区信息,API地址为http://api/latestMeteris?userCode=xxx&token=xxx&host=’172.20.116.70,172.20.116.72’&service=CPU,Memory,Disk

    访问API时返回一串JSON,信息如下:

    {
        "message":"success",
        "result":"success",
        "start":"2017-02-28 13:54:53",
        "data":{
            "Memory":{
                "172.20.116.72":{
                    "swap_used":["9.60%"],
                    "datetime":["2017-02-28 13:54:41"],
                    "merge_time":["2017-02-28 13:54:41"],
                    "ram_used":["25.52%"]
                },
                "172.20.116.70":{
                    "swap_used":["6.17%"],
                    "datetime":["2017-02-28 13:54:41"],
                    "merge_time":["2017-02-28 13:54:41"],
                    "ram_used":["25.97%"]
                }
            },
            "CPU":{
                "172.20.116.72":{
                    "datetime":["2017-02-28 13:54:41"],
                    "merge_time":["2017-02-28 13:54:41"],
                    "cpu_prct_used":["3.00%"]
                },
                "172.20.116.70":{
                    "datetime":["2017-02-28 13:54:41"],
                    "merge_time":["2017-02-28 13:54:41"],
                    "cpu_prct_used":["1.00%"]
                }
            },
            "Disk":{
                "172.20.116.72":{
                    "datetime":["2017-02-28 13:54:41"],
                    "merge_time":["2017-02-28 13:54:41"],
                    "/export":["25.06%"],
                    "/":["21.6%"]
                },
                "172.20.116.70":{
                    "datetime":["2017-02-28 13:54:41"],
                    "merge_time":["2017-02-28 13:54:41"],
                    "/export":["44.68%"],
                    "/":["36.15%"]
                }
            }
        },
        "host_size":2,
        "end":"2017-02-28 13:54:53"
    }
    

    pytest脚本写法如下:

    #!/usr/bin/python
    
    import os
    import sys
    import json
    import urllib
    import urllib2
    import pytest
    
    iplist = ["172.20.116.70", "172.20.116.72"]    #定义IP列表
    ips = ','.join(iplist)
    
    url = 'http://api/latestMeteris?userCode=xxx&token=xxx&host=' + ips + '&service=CPU,Memory,Disk'
    req = urllib.urlopen(url)
    result = req.read()   #get a string type
    
    a = json.loads(result)  #transfer string type to dict type
    
    @pytest.mark.parametrize('ip', iplist)
    def test_cpu(ip):
        value = a["data"]["CPU"][ip]["cpu_prct_used"][0]
        assert float(value.strip("%")) < 80
    
    @pytest.mark.parametrize('ip', iplist)
    def test_memory(ip):
        value = a["data"]["Memory"][ip]["ram_used"][0]
        assert float(value.strip("%")) < 95
    
    @pytest.mark.parametrize('ip', iplist)
    def test_disk(ip):
        value_root = a["data"]["Disk"][ip]['/'][0]
        value_export = a["data"]["Disk"][ip]['/export'][0]
        assert float(value_root.strip("%")) < 80 and float(value_export.strip("%")) < 80
    

    运行脚本试一下

    $ py.test 2.py 
    ========================= test session starts =========================
    platform linux2 -- Python 2.7.4, pytest-3.0.6, py-1.4.31, pluggy-0.4.0
    rootdir: /home/zhukun/0224, inifile: 
    collected 6 items 
    
    2.py ......
    
    ====================== 6 passed in 0.05 seconds ======================
    

    意为6个测试全部通过。



沪ICP备19023445号-2号
友情链接