UnitTest框架
1.框架英文单词framework
2.为解决一类事情的功能集合
3.需要安装框架的规定(套路)去书写代码
UnitTest框架是python自带的单元测试框架,用它做单元测试
自带框架:不需要单外安装,只需要安装了Python就能使用
第三方框架:想要使用需要先安装,(pytest)
**作用:**自动化脚本(用例代码)执行框架,管理运行多个测试用例
为什么要使用UnitTest框架:
1.能够组织多个用例去执行
2.提供丰富的断言方法(让程序代码代替人工自动的判断预期结果和实际结果是否相符)
3.能够生成测试报告
alt+‘回车键’ 快速导入包
Testcase:
是一个代码文件,输入真正的用例代码
步骤:
测试文件名以test_开头,或者_test结尾
测试类以Test开头,测试方法以test_开头,
自定义测试类,需要继承UnitTest模块的TestCase类即可:
class Testdemo(UnitTest.TestCase):
问题:
TestSuite:
方式一:使用套件对象.addTest(测试类名(“测试方法名”))
方式二:将一个测试类的所有方法进行添加
套件对象.addTest(unittest.makeSuite(测试类名))
TestLoader的使用:
对TestSuite功能的补充,如果TestCase的代码文件有很多
**一定注意:**Testloader()后面应该有()
2种方法:
1.实例化加载对象并且添加用例
suite = unittest.TestLoader().discover('用例所在路径', '用例的代码文件名')
2.使用默认的加载对象并添加用例
suite = unittest.defaultTestLoader.discover('用例所在路径', '用例的代码文件名')
Fixture
测试夹具,是一种代码结构,某些特定的情况下会自动执行
方法级别:
类级别:
模块级别:
方法级别和类级别前后的方法不需要同时出现
自行选择使用
注意类级别上面需要添加:
@classmethod
随笔:
Python还是一种动态类型的语言,即:python中的变量类型可以随时改变:即,可以通过 x = 12 创建一个整型变量 x ,接着执行语句 x = “lalalal” ,那么这条语句执行后,创建了一个字符串类型的变量x ,之前创建的整型变量 x 自动失效。
方法之后跟一个 ->none 是什么意思
@classmethod
def setUpClass(cls) -> None:
print('打开浏览器')
它是一个对函数的类型注解,简单表示方法什么都不返回。这个类型注解是Python3.5介绍进来的。注解表示函数的返回类型,用标识符-> 。它是可选的,如果删掉,什么都不会影响。对执行完全没有影响 。
UnitTest 断言
让程序代替人为判断测试程序执行结果是否符合预期结果的过程
断言2种结果:
1.
True,用例通过
2.
False,代码抛出异常,用例不通过
常用断言方法:
尤其是3和7
在unittest中使用断言,都需要通过self.断言方法来使用
参数化:
unittest框架本身不支持参数化,想要使用参数化,必须安装插件
联网进行安装
pip install parameterized
参数化代码步骤:
示例:
此处 不小心只点了左边一个方法的运行符号,一直不对,原因是@parameterized在运行按键上方,于是我给下方其他方法都加了skip不让运行,然后点击类的类型符号解决,data里的数字不需要加引号。
注意不要在传参代码下面右键点击运行,会报错
注意,python逻辑运算符是:and or not
比较运算符 : !=
将数据移到json文件中:
怎么使用:
注意json中的数据只能双引号,不能单引号
必定需要有返回值
跳过
举例:
自带的测试报告只有只有单独运行TestCase的代码才会生成测试报告。
HTMLTestRunner:
流程:
中文报告:
中文报告多加了一个报告人参数,也是可选,注意只有文件对象是必填参数