一、断言
概念:让程序代替人工自动的判断预期结果和实际结果是否相符。
断言的结果有两种:
1、True,用例通过
2、 False,代码抛出异常,用例不通过
注意:在unittest中使用断言,都需要通过self.断言方法来试验
assertEqual:
self.assertEqua1(预期结果,实际结果),判断预期结果和实际结果是否相等
1,如果相等,用例通过
2.如果不相等,用例不通过,抛出异常
assertln
self.assertIn(预期结果,实际结果),判断预期结果是否包含在实际结果中
1.包含,用例通过
2.不包含,用例不通过,抛出异常
例:
assertIn( " admin ' , 'admin') >>包含
assertIn( " admin" , 'adminnnnnnnn') >>包含
assertIn( " admin " , 'aaaaaadmin ') >>包含
assertIn( " admin " , 'aaaaaadminnnnnnn') >>包含
assertIn( " admin" , 'addddddmin ') >>不是包含
from test_login_func import login
import unittest
class TestLogin(unittest.TestCase):
def test_ok(self):
self.assertEqual('登录成功', login('admin', '123456'))
def test_username_error(self):
self.assertEqual('登录失败', login('root', '123456'))
def test_password_error(self):
self.assertEqual('登录失败', login('admin', '123123'))
def test_all_error(self):
self.assertEqual('登录失败', login('root', '123123'))
二、参数化
概念:参数化在测试方法中,使用变量来代替具体的测试数据,然后使用传参的方法将测试数据传递给方法的变量。
作用:相似的代码不需要多次书写。
工作中场景:
1.测试数据一般放在json文件中
2.使用代码读取json 文件,提取我们想要的数据--->[0),()]or [[],[]]
安装插件
unittest框架本身是不支持参数化,想要使用参数化,需要安装插件来完成
-联网安装(在cmd窗口安装或者)
pip install parameterized
pip是Python中包(插件)的管理工具,使用这个工具下载安装插件
验证:pip list >>可以看到有parameterized包,
也可以导包验证,from parameterized import parameterized
参数化代码
步骤:
1.导包unittest/ pa
2.定义测试类
3.书写测试方法(用到的测试数据使用变量代替),如果是列表,列表里面有几组数据就是几条用例,数据和参数要保持一致
4.组织测试数据并传参(装饰器 @)
import unittest
from parameterized import parameterized
from test_login_func import login
data = [('admin', '123456', '登录成功'),
('root', '123456', '登录失败'),
('admin', '1111156', '登录失败')
]
class TestLogin(unittest.TestCase):
@parameterized.expand(data)
def test_login(self, username, password, expect):
self.assertEqual(expect, login(username, password))
三、跳过
概念: 对于一些未完成的或者不满足测试条件的测试函数和测试类,可以跳过执行。
使用方式:
1、直接将测试函数标记成跳过 :@unittest.skip('代码未完成')
2、根据条件判断测试函数是否跳过 ,条件成立就跳过:@unittest.skipIf(condition,reason)
例子:
i = 1
class TestLogin(unittest.TestCase):
@unittest.skip('未完成')
def test_ok(self):
self.assertEqual('登录成功', login('admin', '123456'))
print('2')
@unittest.skipIf(i < 2, '无需要执行')
def test_username_error(self):
self.assertEqual('登录失败', login('root', '123456'))
print('1')