python自动化笔记(九)——unittest框架四大核心概念学习
python⾃动化笔记(九)——unittest框架四⼤核⼼概念学习unittest框架最核⼼的四个概念:
⼀、unittest中测试⽤例的编写规范
在测试类当中,以test_开头,定义测试函数
每⼀个test_开头的函数,就是⼀个测试⽤例
⽤例编写步骤:
1 导⼊unittest模块,被测⽂件或者其中的类
2 创建⼀个测试类,并继承unittest模块中的TestCase类
3 定义测试函数,函数名以test_开头(⼀个test开头的⽅法就是⼀条测试⽤例)
4 将测试⽤例执⾏的代码逻辑写到对应的测试⽅法中:
第⼀步:准备⽤例数据
第⼆步: 调⽤被测的功能函数(发送请求调⽤接⼝),获取实际结果
第三步: 断⾔,预期结果与实际结果的对⽐
下⾯编写测试登陆功能的测试⽤例:
登录的功能逻辑定义在login模块⾥
def test_login_ok(self):# ⽤例1
# 第⼀步:准备⽤例数据
params ={'username':"cyy","password":123456}
expected ={"code":0,"msg":"登录成功"}
# 第⼆步:调⽤被测的功能函数(发送请求调⽤接⼝),获取实际结果        result = login_check(**params)
# 第三步:断⾔
self.assertEqual(result, expected)
上述只是执⾏了⼀条⽤例,下⾯再看下五条⽤例的:
⽤例1 账号密码正确
⼊参:账号cyy,密码:123456
预期结果:{“code”:0,“msg”:“登录成功”}
实际结果:
⽤例2 账号正确,密码错误
如何挽回男友⼊参:账号cyy,密码:fdgg
预期结果:{“code”:1,“msg”:“账号或密码不正确”}
实际结果:
⽤例3 账号错误,密码正确
⼊参:账号cyy1,密码:123456
预期结果:{“code”:1,“msg”:“账号或密码不正确”}
实际结果:
⽤例4 账号为空
⼊参:账号,密码:123456
预期结果:{“code”:1,“msg”:“所有的参数不能为空”}
实际结果:
⽤例5 密码为空
⼊参:账号cyy,密码:
预期结果:{“code”:1,“msg”:“所有的参数不能为空”}
实际结果:
def test_login_ok(self):# ⽤例1
# 第⼀步:准备⽤例数据
params ={'username':"cyy","password":123456}
expected ={"code":0,"msg":"登录成功"}
# 第⼆步:调⽤被测的功能函数(发送请求调⽤接⼝),获取实际结果
result = login_check(**params)
# 第三步:断⾔
self.assertEqual(result, expected)
def test_login_password_wrong(self):# ⽤例2
params ={'username':"cyy","password":"fdgg"}
expected ={"code":1,"msg":"账号或密码不正确"}
result = login_check(**params)
self.assertEqual(result, expected)
def test_login_user_wrong(self):# ⽤例3
params ={'username':"cyy1","password":123456}
expected ={"code":1,"msg":"账号或密码不正确"}
result = login_check(**params)
self.assertEqual(result, expected)
def test_login_no_user(self):# ⽤例4
params ={'username':None,"password":123456}
expected ={"code":1,"msg":"所有的参数不能为空"}
result = login_check(**params)
笔记本屏幕贴膜
self.assertEqual(result, expected)
def test_login_no_password(self):# ⽤例5
电脑听不到声音params ={'username':"cyy","password":None}
expected ={"code":1,"msg":"所有的参数不能为空"}
result = login_check(**params)
self.assertEqual(result, expected)
# 以上代码存于 test_case_01.py模块
执⾏结果:
这⾥要注意,每个⽤例之间都是互相独⽴,如果其中⼀个⽤例报错了,不会影响其他⽤例的执⾏。
其中,我们断⾔⽤到的是assertEqual(a,b),作⽤是判断a和b是否相等,如果不相等则断⾔失败,报错AssertionError,⽽AssertionError是unittest框架识别⽤例失败的标识之⼀
另外unittest还有很多常⽤的断⾔⽅法如下:
⼆、收集⽤例TestSuite(测试套件),TestLoader加载⽤例
import unittest
# 1、创建套件
s = unittest.TestSuite()
# 2、创建⼀个⽤例加载器,并加载测试⽤例到套件(⼀般⽤TestLoader加载⽤例(收集⽤例))什么眼霜最好
s = unittest.TestLoader().discover("D:\pythoncharm01\python01")
print(type(s))# 打印出是⼀个TestSuite类(把发现的测试⽤例丢到TestSuite类⾥⾯)
# 以上代码存于 run.py模块,与test_case_01.py模块同级⽬录
unittest.TestLoader().discover(搜索⽬录),搜索⽤例的⽅式:discover
从start_directory这个⽬录下开始,搜索所有的测试⽤例,并加载到测试套件中。遵循以下原则:
1、指定搜索⽬录
2、⽂件过滤规则:以⽂件名匹配(test*.py),以test开头,.py结尾
3、在⽂件当中过滤⽤例:继承了unittest.TestCase类的测试类,类当中以test_开头的测试函数。
这种⽅式⽅便以后的更改,因为是从⽬录中获取的
还有其他的⽤例收集⽅法,例如:
谈判技巧实例化测试套件TestSuite
s = unittest.TestSuite()货腰什么意思
1添加⼀个⽤例 addTest(类名(”⽤例名“))
s.addTest()
2添加多个⽤例 addTest(类名(”⽤例名1“),类名(”⽤例名2“),类名(”⽤例名3“))
s.addTests()
3 TestLoader还可以通过类名、模块名,⽅式去收集⽤例
这些收集⽤例⽅法⽐较费劲⼀般不⽤,了解即可。
三、执⾏⽤例+测试报告
为了验证第⼆点收集⽤例功能,同级⽬下再创建⼀个测试⽤例模块(定义了两条⽤例,⼀条是错的),看执⾏⽤例时是否会和test_case_01.py模块的⽤例⼀起加载出来
接下来我们要运⾏测试⽤例,并⽣成结果
这⾥我们⽤⼀个今年7⽉份发布的⼀个资源包unittestreport,关于它的详细介绍可以到了解
安装:pip install unittestreport
import unittest
# 1、创建套件
s = unittest.TestSuite()
# 2、创建⼀个⽤例加载器,并加载测试⽤例到套件(⼀般⽤TestLoader加载⽤例(收集⽤例))
s = unittest.TestLoader().discover("D:\pythoncharm01\python01")
>>>>>>>>>>>>>>####
from unittestreport import TestRunner #从unittestreport中导⼊TestRunner类
#先实例化TestRunner,
runner = TestRunner(s,filename ="python01.html",tester='⼩菜',desc="⼩菜项⽬测试报告")
# 再执⾏⽤例,⽣成报告
runner.run()
#以上代码存于 run.py模块

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。

发表评论