unittes框架
unittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行。web自动化测试存在哪些问题呢?
一、之前脚本存在的问题
1、在测试用例执行的时候,发现挺麻烦(如果测试用例熟练过大,要么换个执行,要么导包执行)
2、断言方式太low,只能是在控制台打印测试用例是否通过,我们希望这个断言状态是显示在报告中的,而且不应该通过if-else去判断
3、基本上看不到测试报告的效果,显示总共执行了多少条用例,通过了多少条,失败了多少条,失败原因是什么
web自动化:python+selenium+unittest
unittest:单元测试框架,有很多好的特性,在自动化测试中是可以借鉴的
单元测试:包括两部分,代码级别的功能验证、逻辑覆盖
单元测试框架的好处:
-
提供用例组织与执行
-
提供丰富的断言方法
-
提供丰富的日志和报告(html格式的更好一些)
unittest单元测试框架的工作原理:
步骤:
1、导包,unittest是自带的框架,不需要安装
2、创建一个单元测试类(其实就是类,只不过它继承了单元测试框架单元测试用例的类)
3、先来讲单元测试类中的五个特殊的方法使用,包括使用场景及执行顺序
setUp()、test_xxx()、tearDown(),不管你怎么调整,执行顺序不变
setUp():主要是进行测试用例的资源初始化,测试用例的前提条件写在这
test_xxx():测试用例,要把测试用例的步骤写在这个方法中
tearDown():主要是进行测试用例的资源释放的
@classmethod:注解的方法是类方法,不用创建对象也能用的方法,在对象进内存之前就已经存在的方法, 随着类一起进的内存
setUpClass:给当前单元测试类的所有用例进行初始化
tearDownClass:给当前单元测试类的所有用例进行资源释放
setUpClass和setUp()的区别:
setup()实例方法,就需要创建对象在调用,setUpClass类方法,不需要对象也可以调用
setUp()在每一个测试用例执行之前运行一次,setupclass方法在测试执行之前只执行一次
setUp() 是对每一条测试用例的初始化,setupclass()给当前单元测试类的所有用例进行初始化的
4、创建测试用例:test开头的方法
5、测试用例执行:
main():
是把所有的测试用例执行了一遍
执行测试用例的顺序控制不了(按照测试用例名(方法名)的字母顺序执行的)
如何解决上面的这个不太好的特点,使用测试集合的概念,testsuite
分类,我要把加法的测试用例加到一个测试集合testsuite中,只运行该测试集合即可
testsuite:
1、创建testsuite的对象
2、调用testsuite中的方法addtest、addtests()将测试用例加入测试集合
3、testsuite的run()方法运行测试集合
注意:run方法的参数是testresult的对象:re=unittest.TestResult()
testresult中存储的是测试执行的结果
print(re. dict)
TestLoader:
1、创建TestLoader对象:loader=unittest.TestLoader()
2、使用loader的方法loadtestsfromName()将指定的测试用例加载到测试集合
loadertestsfromName()的参数比较灵活(理解、会用即可)
1、可以是模块名:unitMymath
2、可以是模块中的类名:unitMymath.unitMymath
3、可以是模块中类中的某一个用例:unitMymath.unitMymath.test_add_1
3、使用loader的discover方法,将指定的文件(模块)中的测试用例一次性加载
discover()方法:suitt=unittest.defaultTestLoader.discover(r"./文件名/“,pattern=)
path:指定存放测试用例的目录即可(单元测试用例,使用unittest框架写的测试用例)
pattern:指定匹配规则,very*
unittest单元测试框架的工作原理:
TestCase:
一个TestCase的实例就是一个测试用例。什么是测试用例呢?就是一个完整的测试流程,包括测试前准备环境的搭建(setup),执行测试代码(test),以及测试后环境的还原(tearDown)
TestSuite:
多个测试用例集合在一起,就是TestSuite
TestLoader是用来加载TestCase到TestSuite中,其中有几个loadTestsForm_()方法,就是从各个地方寻找TestCase,创建它们的实例,然后add到TestSuite中,在返回一个TestSuite实例
TestRunner:
在前面测试用例,测试集合执行的时候都是用testsuite()的run()方法:suitt.run(result)
TextTestRunner()—>将结果能够以text文本形式展示的
使用TextTestRunner()运行器提供的run()方法运行测试集合
如何产生一个文件流对象,如果打开一个文本文件,想着往里写入数据
报告是以TextTestResult的形式展示的
TextTestRunner()是TestRunner()的子类
断言:一个自动化测试用例,测试步骤,测试的断言缺一不可
unittest中提供的断言方法有:
assertEqual(a,b,msg=” “):就是测试a和b是否相等,如果相等,则断言成功,不相等,则断言失败
assertNotEqual(a,b,msg=” “):就是测试a和b是否不相等
assertTrue(a):判断a是否为真
assertFalse(a):判断a是否为假
assertIs(a,b):判断身份是否相等,其实就是判断其内存地址是否相等
assertNotIs(a,b):断言a是否是b,不是则测试用例通过。
assertIsNone(x)断言x是否None,是None则测试用例通过。
assertIsNotNone(x):断言x是否None,不是None则测试用例通过。
assertIn(a,b):断言a是否在b中,在b中则测试用例通过。
assertNotIn(a,b):断言a是否在b中,不在b中则测试用例通过。
assertIsInstance(a,b):断言a是是b的一个实例,是则测试用例通过。
assertNotIsInstance(a,b):断言a是是b的一个实例,不是则测试用例通过。