selenium 笔记 unittest
1 python 里面单元测试框架:unittest /pytest
2 查看源码解析:
import unittest
print(help(unittest))
3 测试类中测试方法的名称要以test开头
unittest.main()是运行主函数,运行一会看到测试结果
断言就是拿实际结果和期望结果去对比。
前置条件:setUp: 在写测试用例 的时候,每次操作其实都是基于打开浏览器输入对应网址这些操作,这个就是执行用例的前置条件
后置条件:tearDown:执行完用例后,为了不影响下一次用例的执行,一般有个数据还原的过程,这就是执行用例的后置条件。
前置、后置条件,如果没有也可以写pass
4 unittest执行顺序:
先执行前置setUp,然后执行用例 test*,最后执行后置tearDown
测试用例test* 的执行顺序是根据用例名称顺序执行
只执行test开头的用例
5 批量执行
discover 方法里有三个参数:
-case_dir:这个是待执行用例的目录
-pattern:这个是匹配脚本名称的规则,test*.py意思是匹配test开头的所有脚本
-top_level_dir:这个是顶层目录的名称,一般默认等于 None就行了。
.discover加载到的用例是一个list集合,使用unittest 里面的TextTestRunner的run方法执行
#coding:utf-8
import unittest
def all_case():
#待执行用例的目录
case_dir="D:\\test\\TestProject\\Case"
testcases=unittest.TestSuite()
discover=unittest.defaultTestLoader.discover(case_dir,pattern='test*.py',top_level_dir=None)
#discover方法筛选出来的用例,循环添加到测试套件中
print(discover)
for test_suite in discover:# test_suite 同一个包中所有文件中的测试用例
for test_case in test_suite:# test_case 同一个文件中的所有测试用例
testcases.addTests(test_case)
print(testcases)
return testcases
if __name__=="__main__":
#返回实例
runner=unittest.TextTestRunner()
#run所有用例
runner.run(all_case())
生成html测试报告:
需要导入第三方模块:HTMLTestRunner
下载:http://tungwaiyip.info/software/HTMLTestRunner.html 下载:HTMLTestRunner.py文件
下载后手动放于python安装文件的lib目录下
三个参数:
--stream:测试报告写入文件的存储区域
--title:测试报告的主题
--description:测试报告的描述
可以在case中添加注释 ,u''' XXXXX''' ,在报告中可以显示这些注释
#coding:utf-8
import unittest
import HTMLTestRunner
def all_case():
#待执行用例的目录
case_dir="D:\\test\\TestProject\\Case"
testcases=unittest.TestSuite()
discover=unittest.defaultTestLoader.discover(case_dir,pattern='test*.py',top_level_dir=None)
#discover方法筛选出来的用例,循环添加到测试套件中
print(discover)
for test_suite in discover:# test_suite 同一个包中所有文件中的测试用例
for test_case in test_suite:# test_case 同一个文件中的所有测试用例
testcases.addTests(test_case)
print(testcases)
return testcases
if __name__=="__main__":
#返回实例
#runner=unittest.TextTestRunner()
report_path="D:\\test\\report.html"
fp=open(report_path,"wb")
runner=HTMLTestRunner.HTMLTestRunner(stream=fp,
title=u'这是我的自动化测试报告',
description=u'用例执行情况')
#run所有用例
runner.run(all_case())
fp.close()
装饰器
setUp():每个测试case运行前运行
tearDown():每个测试case运行完后执行
setUpClass():必须 使用@classmethod装饰器,所有case运行前只运行一次
tearDownClass():必须使用@classmethod装饰器,所有case运行完后只运行一次
@是修饰符,classmethod是python里的类方法
#coding:utf-8
import unittest
import time
class Test(unittest.TestCase):
@classmethod
def setUpClass(cls):
print("start")
@classmethod
def tearDownClass(cls):
time.sleep(1)
print("end")
def test01(self):
print(u"执行测试用例01")
def test03(self):
print("执行测试用例03")
def test02(self):
print("执行测试用例02")
def addtest(self):
print("add方法")
if __name__=="__main__":
unittest.main()
断言:
#coding:utf-8
import unittest
class Test(unittest.TestCase):
def test01(self):
'''判断a==b'''
a=1
b=1
self.assertEqual(a,b)
def test02(self):
'''判断 a in b'''
a='hello'
b='hello world!'
self.assertIn(a,b)
def test03(self):
'''check a is true'''
a=True
self.assertTrue(a)
def test04(self):
'''失败'''
a='test'
b="jerry"
self.assertEqual(a,b)
if __name__=="__main__":
unittest.main()
常用断言:
1 .assertEqual(self,first,second,msg=None) --判断两个参数相等:first==second
2 .assertNotEqual(self,first,second,msg=None) --判断两个参数不相等:first!=second
3 .assertIn(self,member,containe,msg=None) --判断字符串是否包含:member in container
4 .assetNotIn(self,member,container,msg=None) --判断字符串是否不包含:member not in container
5 .assertTrue(self,expr,msg=None) --判断是否为真:expr is True
6 .assertFalse(self,expr,msg=None) --判断是否为假:expr is False
7 .assertIsNone(self,obj,msg=None) --判断是否为None:obj is None
8 .assertIsNotNone(self,obj,msg=None) --判断是否不为None:obj is not None