reduce中:
把一个直接关系做为k
间接关系中不是真间接的被抵消
单元测试框架:unittest
TestCase 测试用例
TestFixture 测试固件 没法改变的东西
TestSuite 测试套件 用例塞到套件里,让TestRunner去执行测试套件
TestRunner 测试运行器
new unittest
没有__name__="main" 也能执行unittest
不会执行下面的方法,因为__name__ = 测试类的类名
1、
固件的方法:
def setUp(self)
def tearDown(self)
上面两个方法是test方法的开始和结尾运行
类似于“前置条件”和“后置条件”
TestCase中每一个test方法执行前,都执行setUp(),完成后,都执行tearDown()
2、
在TestCase类中,光标停在哪里,右键就执行哪一条用例
3、只想执行TestCase中的某一条用例需要测试套件和测试运行器:
sutie = unittest.TestSuite()
suite.addTest(MyTestCase(test_baidu))
runner = unittest.TextTestRunner()
runner.run(suite)
4、批量添加用例到套件里
dir='./case/'
suite = unittest.defaultTesLoader.discover(
start_dir=dir,
pattern='unit*.py')
pattern的命名以test*开头就执行case下所有test*的用例
5、把test方法中重复的代码放到setUp和tearDown里面
6、用例执行过程中是有顺序的
在TestCase类中执行顺序跟方法的ascii码表的排序来执行
套件执行的时候跟这个顺序无关,而是跟添加的用例顺序有关
如果把套件写在TestCase中,顺序跟套件的顺序无关,还是按照TestCase中的顺序执行
所以套件要单独写个py文件,才按套件的顺序执行
7、测试固件补充:
@classmethod
def setUpClass(self)
@classmethod
def tearDownClass(self)
上面两个方法,在TestCase中,在所有的test方法前后执行一次,而不是每个test方法前后都执行
正常情况下,一个TestCase中的方法是关联的
例如:TestBaiDuSearch 测试百度搜索有三个方法 test_chinese() test_english test_pinyin
ui测试的时候,运行太快,浏览器会反应不过来,一般需要sleep多少秒
8、断言
建议:
self.assertEqual(..,..,msg="用例执行失败")
只需要判断源码里包含“老虎”
self.asserIn("老虎",self.driver.page_source)
9、
结果输出:
logging
HTMLtextRunner
生成HTML测试报告
import HTMLTestRunner
runner = HTMLTestRunner.HTMLTestRunner(open('./result.html','wb'),title='测试报告xxx',description='这是xx的测试报告')
runner.run(suite)
10、
测试报告发送邮件
11、装饰器的使用
@unittest.skip('此用例跳过') #在TestCase的某个方法上加,就跳过这个用例
@unittest.skipIf(5>3, '此用例跳过') #满足条件跳过
@unittest.skipUnless(5>3, '此用例跳过') #不满足条件跳过
@unittest.expectedFailure #失败,登录的操作可以这样
上一条用例执行的结果或者生成的文件,下一条用例作为判断依据