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

原文地址:https://www.cnblogs.com/caojuansh/p/13304751.html