*Python 的unittest框架 TestCase
import unittest
class TestDemo(unittest.TestCase):
def test_method1(self):
print('测试方法1')
def test_method2(self):
print('测试方法2')
TestSuite
TestRunner
import unittest
#实例化套件对象
suite = unittest.TestSuite()
#添加用例方法(两种写法)
suite.addTest(测试类名('方法名'))
或
suite.addTest(unittest.makeSuite(测试类名))
#实例化运行对象
runner = unittest.TextTestRunner()
#执行
runner.run(suite)
TestLoader
#使用TestLoader不使用TestSuite的情况:用例TestCase很多
import unittest
#实例化测试加载对象&添加用例(得到的是suite对象) 路径,文件名
suite = unittest.TestLoader().discover('./case','hm*.py')
#实例化运行对象
runner = unittest.TextTestRunner()
#执行
runner.run(suite)
Fixture 测试夹具
#方法级别 每个方法执行前后都调用
def setup(self):
print('111')
pass
def teardown(self):
print('222')
pass
#类级别 在每个测试类中所有方法执行前后自动调用 (最多各一次)
@classmethod
def setupClass(cls):
pass
@classmethod
def teardownClass(cls):
pass
Fixture使用 例子:测试登录
*UnitTest断言 结果只有 TRUE FALSE 两种 最重要: self.assertEquals() self.assertIn() 断言 例子:测试登录class Testlogin(unittest.TestCase): #方法级别 每个方法执行前后都调用 def setup(self): print('输入网址') def teardown(self) -> None: print('关闭当前页面') @classmethod def setupClass(cls) -> None: print(' 打开浏览器') @classmethod def teardownClass(cls) -> None: print(' 关闭浏览器') def test_1(self): print('输入正确的用户名密码') def test_2(self): print('输入错误的用户名密码') 理想的输出:(最重要的是顺序) 打开浏览器 输入网址 输入正确的用户名密码 关闭当前页面 输入网址 输入错误的用户名密码 关闭当前页面 关闭浏览器
class Testlogin(unittest.TestCase):
#方法级别 每个方法执行前后都调用
def setup(self):
print('输入网址')
def teardown(self) -> None:
print('关闭当前页面')
@classmethod
def setupClass(cls) -> None:
print(' 打开浏览器')
@classmethod
def teardownClass(cls) -> None:
print(' 关闭浏览器')
def test_1(self):
print('输入正确的用户名密码')
def test_2(self):
print('输入错误的用户名密码')
def test_user_ok(self):
if login('admin','123456') == '登录成功':
print('pass')
else:
print('fail')
def test_user_ok_new(self):
self.assertEqual('登录成功',login('admin','123456'))
def test_user_error(self):
self.assertEqual('登录失败',login('root','123456'))
*参数化
即用变量代替测试数据,再通过传参来测试
测试数据一般是json,代码读取json即可
unittest需要安装插件 pip install parameterized
import unittest
from parameterized import parameterized
from tools import login
#组织测试数据 必须是 [(),(),()] 或 [[],[],[]] 顺序要和参数一致
data = [
('admin','123456','登录成功'),
('root','123456','登录失败'),
('admin','123123','登录失败')
]
#方法2
def build_data():
with open('data.json', encoding = 'utf-8') as f:
result = json.load(f)
for i in result:
data.append((i.get('username'),i.get('password'),i.get('expect')))
return data
#用装饰器传参
class Testlogin(unittest.TestCase):
@parameterized.expand(build_data())
def test_login(self,username,password,expect):
self.assertEqual(expect,login(username,password))
*跳过
未完成/不满足条件,暂时跳过执行
装饰器方式,写在TestCase里
@unittest.skip('跳过的原因')
或
@unittest.skipIf(条件,'跳过的原因')
例如
import unittest
version = 30
class TestDemo(unittest.TestCase):
@unittest.skip('跳过的原因')
def test_method1(self):
print('测试方法1')
@unittest.skipIf(version < 30,'跳过的原因')
def test_method2(self):
print('测试方法2')
*导出测试报告
--> "Export Test Result" 在pycharm导出为html、再去浏览器打开 导出测似报告
--> 使用第三方测试报告 HTMLTestRunner
由于HTMLTestRunner是一个第三方的unittest HTML报告库,用pip是死活安装不了的,得去网上下载HTMLTestRunner.py放到存放python源代码的Lib目录下
import unittest
from HTMLTestRunner import HTMLTestReport
from HTMLTestRunnerCN import HTMLTestReportCN #中文
#使用套件对象 加载对象 来添加用例方法
suite = unittest.defaultTestLoader.discover('.','hm_05_pal.py')
#实例化 运行对象是f
file = 'report.html'
with open(file,'wb') as f:
runner = HTMLTestReport(f)
#执行
runner.run(suite)
标签:记录,self,黑马,test,测试,print,import,unittest,def From: https://www.cnblogs.com/bbnltxdy/p/17603427.html