unittest笔记
unittest学习笔记
TestCase(测试用例)——> Test Fixure(测试固件:setup、teardown)
|
TestSuite(测试套件《=》容器)——>TestRunner(测试运行器)---->TestReport(测试报告)
a.setUp&tearDown
setUp()方法用于测试用例执行前的初始化工作。如测试用例中需要访问数据库,可以在setUp中建立数据库连接并进行初始化。如测试用例需要登录web,可以先实例化浏览器。
tearDown()方法用于测试用例执行之后的善后工作。如关闭数据库连接。关闭浏览器。
一个py文件中,每执行一个函数,都会执行一次setUp&tearDown(多个函数会执行多次)
def setUp(self):
self.driver=webdriver.Chrome()
self.driver.maximize_window()
self.driver.implicity_wait(30)
self.driver.get('http://www.baidu.com')
def tearDown(self):
self.driver.quit()
b.setUpClass&tearDownClass
用于不需要多次打开网页的情况,一个py文件中只执行一次
@classmethod
def setUpClass(cls):
cls.driver=webdriver.Chrome()
cls.driver.maximize_window()
cls.driver.implicityly_wait(30)
cls.driver.get("http://www.baidu.com")
@classmethod
def tearDownClass(cls):
cls.driver.quit()
区别:
① setup():每个测试函数运行前运行
② teardown():每个测试函数运行完后执行
③ setUpClass():必须使用@classmethod 装饰器,所有test运行前运行一次
④ tearDownClass():必须使用@classmethod装饰器,所有test运行完后运行一次
分离测试固件(运用继承的思路)
init.py
Class Init(unittest.TestCase):
def setUp(self):
self.driver=webdriver.Chrome()
self.driver.maximize_window()
self.driver.implicity_wait(30)
self.driver.get('http://www.baidu.com')
def tearDown(self):
self.driver.quit()
Student.py
from init import *
Class Student(init):
def test_add():
return
1、测试用例需要以test开头
2、测试用例执行顺序:
根据排序规则,unittest执行测试用例,默认是根据ASCII码的顺序加载测试用例,数字与字母的顺序为:0-9,A-Z,a-z。
可以通过该函数名的方式修改执行顺序:test_001_add()、test_002_update()
3、用例中函数增加注释,执行完成后会显示到测试报告中:
def test_quit_legion(self):
"""退出军团 """
print("吧啦啦啦啦啦啦")
assert 1 == 2
4、测试用例去取消执行:
@unittest.skip("------原因,取消---测试用例执行")
1、测试套件添加测试用例:
suite=unittest.TestSuite()
1) suite.addTest(Student('test_add_user'))
2) suite.addTest(Student)
unittest.TextTestRunner(verbosity=2).run(suite)
2、测试套件添加测试类:
1) suite=unittest.TestSuite(unittest.makeSuite(Student))
unittest.TextTestRunner(verbosity=2).run(suite)
2) suite=unittest.TestLoader().loadTestsFromTestCase(Student)
unittest.TextTestRunner(verbosity=2).run(suite)
3、测试套件添加模块:
1) suite=unittest.TestLoader().LoadTestsFromModule(Student.py)
unittest.TextTestRunner(verbosity=2).run(suite)
4、测试套件优化:
@staticmethod
def suite():
suite=unittest.TestLoader().LoadTestsFromModule(Student.py)
return suite
调用
unittest.TextTestRunner(verbosity=2).run(Student.suite())
unittest中断言主要有三种类型:
1.基本的布尔断言,即:要么正确,要么错误的验证
2.比较断言,如比较两个变量的值(跟上面的布尔断言区别不大,主要是通过比较两个变量的值得出布尔值)
3.复杂断言(一般用的比较少,像断言两个列表、元组等)
1.基本的布尔断言
这个就是断言参数的对错,当然也有部分比较断言。有一个共同点:都有一个msg参数,如果指定msg参数的值,则将该信息作为失败的错误信息返回。主要有以下:
2.比较断言
assertAlmostEqual (first, second, places = 7, msg = None, delta = None)
验证first约等于second。 palces: 指定精确到小数点后多少位,默认为7
assertNotAlmostEqual (first, second, places, msg, delta)
验证first不约等于second。 palces: 指定精确到小数点后多少位,默认为7
注: 在上述的两个函数中,如果delta指定了值,则first和second之间的差值必须≤delta
assertGreater (first, second, msg = None)
验证first > second,否则fail
assertGreaterEqual (first, second, msg = None)
验证first ≥ second,否则fail
assertLess (first, second, msg = None)
验证first < second,否则fail
assertLessEqual (first, second, msg = None)
验证first ≤ second,否则fail
assertRegexpMatches (text, regexp, msg = None)
验证正则表达式regexp搜索匹配的文本text。 regexp:通常使用re.search()
assertNotRegexpMatches (text, regexp, msg = None)
验证正则表达式regexp搜索不匹配的文本text。 regexp:通常使用re.search()
3.复杂断言
原文:https://blog.csdn.net/qq_29699799/article/details/79947882
版权声明:本文为博主原创文章,转载请附上博文链接!
suite=unittest.TestLoader().discover(
start_dir=os.path.dirname(__file__),
pattern="test_*.py"
top_level_dir=None)
unittest.TextTestRunner(verbosity=2).run(suite)
下载HTMLTestRunne.py到Lib目录下(目录的斜杠方向系统会自动处理,无需特殊处理)
fp=os.path.jion(os.path.dirname(__file__),'report','testReport.html')
HTMLTestRunner.HTMLTestRunner(
stream=fp,
title='自动化测试报告',
description='自动化测试报告详情').run(suite)
针对已经存在的测试用例的执行覆盖率情况:
coverage
安装:pip install coverage
执行:coverage run allTestRun.py
报告:coverage html ---> htmlcov/index.py
unittest.TextTestRunner(verbosity=2).run(suite) 打印详细信息