TestLoader------工作中常用
自动查找py文件,自动加载里面的方法
加载所有满足要求的测试用例封装成测试套件
可以自定义要求
TestSuite的用法
只挑选几个执行适合用suite的addTest
testsuit只用来打包,不用来执行
实例化
suite.addTest(文件名+类名("方法名"))
添加类的所有用例:----很少用
TextTestRunner:
是用来执行测试用例和测试套件的:
先实例化,在调用run方法,--------------------------- runner,run(suite)
注意左边箭头名字,不然被pytest识别了
Fixture----用例的初始化和销毁
就是setUp和tearDown
自动调用
方法级别---类级别----模块级别
方法级:---------每个方法执行前后都会被调用
类级别:每个类前后都会被调用
注意加@classmethod
模块级:
是一个普通的函数,在类外面
def setUpModule():
不管py文件有多少类,就执行一次
断言Assert:
所有的断言都继承了unitest.TestCase
self别忘了,注意格式assert里面是实际结果和预期结果
assertEqual:
assertin:
参数化:
pip install parameterized
多个测试用例代码相同,只是测试数据不同,预期结果不同,可以把多个测试用例通过参数化变成一个测试用例
from parameterized import parameterized
使用@parameterized.expand来修饰
记得导入parmeterized
也可以把列表提出来:
测试报告:
下载模板放到lib里面修改路径:
#第94行
import StringIO 修改为:import io
#第539行
self.outputBuffer = StringIO.StringIO() 修改为:self.outputBuffer = io.StringIO()
#第631行
print >>sys.stderr, '\nTime Elapsed: %s' % (self.stopTime-self.startTime)修改为:print(sys.stderr, '\nTime Elapsed: %s' % (self.stopTime-self.startTime))
#第642行
if not rmap.has_key(cls):修改为:if not cls in rmap:
#第766行
uo = o.decode('latin-1')修改为:uo = o
#第772行
ue = e.decode('latin-1')修改为:ue = e
import unittest
from HTMLTestRunner import HTMLTestRunner
suite=unittest.TestLoader().discover("./","test*.py")
with open('./result.html', 'wb') as fp:
runner = HTMLTestRunner(stream=fp, title='test result', description=u'result:')
runner.run(suite)
1.继承类
import unittest
class TestApi(unittest.TestCase):
def test_01_login(self):
print("测试登陆")
def test_02_login(self):
print("测试注册")
2.测试套件的用法 unittest.main(defaultTest="suite")
import unittest
from test_apis.test_api import TestApi
if __name__ == '__main__':
suite = unittest.TestSuite()
suite.addTest(TestApi("test_01_login"))
# 增加一组测试用例
testcases=[TestApi("test_01_login"),TestApi("test_02_login")]
suite.addTests(testcases)
unittest.main(defaultTest="suite")
3.通过加载器TestLoader加载
import unittest
from test_apis.test_api import TestApi
if __name__ == '__main__':
suite=unittest.defaultTestLoader.discover("./",pattern="test_*.py")
unittest.main(defaultTest="suite")
断言标题是否相等:
import unittest
from selenium import webdriver
class Test_Bai(unittest.TestCase):
@classmethod
def setUpClass(cls) -> None:
driver=webdriver.Chrome()
driver.get("http://www.baidu.com")
title=driver.title
print(title)
return title
def test_assert_title(self):
self.assertEqual(self.setUpClass(),"百度一下,你就知道")
if __name__ == '__main__':
unittest.main