pip install ddt

版本不能太高 1.1.2即可

 

 简单案例

import ddt
import unittest

# 准备的测试数据
dates = [
    {"user": "test", "psw": "test", "exp": "结果1"},
    {"user": "test1", "psw": "test1", "exp": "结果"},
    {"user": "test1", "psw": "test1", "exp": "结果1"},
]

@ddt.ddt
class TestLogin(unittest.TestCase):
    @ddt.data(*dates)
    def test_01(self, xx):#xx是接受@ddt.data(*dates)准备的测试数据
        print(xx)
        user= xx['user']
        psw = xx['psw']
        exp = xx['exp']
        act = "结果"  # 获取的 实际结果
        self.assertEqual(exp, act)

if __name__ == '__main__':  #一定要在if中运行
    unittest.main()

 

 

 

登录案例

 

import unittest
import requests
from ke15.login_cls_api import TestXadmin
import ddt

dates = [
    {"user": "test", "psw": "test", "exp": True},
    {"user": "test111", "psw": "11", "exp": False},
    {"user": "test222", "psw": "22", "exp": False},
    {"user": "test", "psw": "test", "exp": True},
]

@ddt.ddt
class TestLogin(unittest.TestCase):
    def setUp(self):
        self.s = requests.session()
        self.x = TestXadmin(self.s)

    def tearDown(self):
        self.s.close()

    @ddt.data(*dates)
    def test_login_01(self, xxx):
        '''登录数据: test test '''
        print("测试数据:%s" % str(xxx))
        user = xxx["user"]
        psw = xxx["psw"]
        exp = xxx["exp"]
        print("期望结果:%s"%exp)
        t = self.x.login(user, psw )      # 登录
        res = self.x.is_login_sucess(t)   # 获取实际结果
        print("实际结果:%s"%res)
        self.assertEqual(res, exp)

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

 

 使用excel读取数据

 exce中数字都要转换-设置单元格格式-格式为文本(先编辑,后设置,不然没有效果)

import unittest
import requests
from ke15.login_cls_api import TestXadmin
import ddt
from ke16.read_excel import ExcelUtil

data = ExcelUtil(excelPath="test.xlsx", sheetName="Sheet1")
dates = data.dict_data()
print(dates)


# dates = [
#     {"user": "test", "psw": "test", "exp": True},
#     {"user": "test111", "psw": "11", "exp": False},
#     {"user": "test222", "psw": "22", "exp": False},
#     {"user": "test", "psw": "test", "exp": True},
# ]

@ddt.ddt
class TestLogin(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        cls.s = requests.session()
        cls.x = TestXadmin(cls.s)

    @classmethod
    def tearDownClass(cls):
        cls.s.close()

    def setUp(self):
        pass
        # self.s = requests.session()
        # self.x = TestXadmin(self.s)

    def tearDown(self):
        self.s.cookies.clear()   # 清空cookies
    #     # self.s.close()

    @ddt.data(*dates)
    def test_login_01(self, xxx):
        '''登录数据: test test '''
        print("测试数据:%s" % str(xxx))
        user = xxx["user"]
        psw = xxx["psw"]
        exp = bool(xxx["exp"])           #加个bool函数自动转换 0转为true 1转为False
        print("期望结果:%s"%exp)
        t = self.x.login(user, psw )      # 登录
        res = self.x.is_login_sucess(t)   # 获取实际结果
        print("实际结果:%s"%res)
        self.assertEqual(res, exp)

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

 

三个断言的区别

 assertEqual(a,b,msg=none)                     a是否和b相等,值不等测试失败,msg,可有可无,用于测试失败提供的重要信息

assertTrue(x,msg=none)                    x是否为0或者none             

assertIn(a,b,msg=none)                      b是否包含a

 assertIs(a,b,msg=none)                   a和b是否为同一对象

11111

posted on 2019-05-31 17:26  仙水阳  阅读(186)  评论(0)    收藏  举报