框架unittest学习

一、单元测试框架对比
基于Python语言: unittest和口pytest
基于Java语言:junit和testng

1.用例编写规则
unittest:提供了testcases测试用例、testsultes测试套件、testfixtures测试圄件或夹具、 testloadt试加载器,testrunner测试运行器。必须遵守以下规则:

(1 ) 测试文件必须先导入import unittest
(2)  测试类必须继承unittest. TestCase(3)测试方法必须以test开头。

pytest:它是python的第三方测试框架。基于unittest的扩展框架,必须遭守以下规则﹔

(1)测试文件名必须以test_开头或者是_test结尾。
(2)测试类命令必须以Test开头
(3 )测试方法必须test开头

2、用例的前置和后置unittest:
setup/tearDown
在每个用例之前或之后与运行一次。
打开浏览器,加载网页/关闭网页
setUpClass和tearDownClass在每个类运行之前或之后运行一次。
创建数据库连接,创建日志对象/关闭数据库连接,销毁日志对象。setupModule和tearDownModule在每个模块之前和之后执行一次

用例的前置和后置pytest:

方法级∶
setup_mothod/teardown_mothod在方法之前和之后setupr/teardown
函数级︰
setup_function/teardown_funciton在函数之前和之后类级
setup_class/teardown_class模块︰
setup_module/teardown_module
实现特定函数的前后置,在函数前加@pytest.fixture()

3.断言

unites : assertTrue , assertEqual , assertin
pytest : assert

4.报告

unittest : htmltestrunner
pytest :插件:pytest-HTML ,allure

5.失败重跑

unittest :没有
pytest : pytest-rerunfailures插件

6、数据驱动

unitest : ddt
pytest : @pytest.mark.parametrize装饰器

7.用例分类执行

unittest :默认执行所有,也可以通过testsuite来执行部分用例,或者-k参数。
pytest : @pytest.mark

二、unittest框架主要做了什么?

1.测试发现︰从多个py文件中收集并且加载测试用例
2测试执行:将测试用例按照一定的顺序和条件去执行并且生成结果。
3.测试判断∶通过断言去判断结果是否正确
4.测试报告∶统计测试进度,通过率,生成报告。

三、Unittest重要组件

1.TestCase
2.TestSuite
3.TestFixture
4.TestLoader
5.TesrRunner

四、TestCase用法import unittest

class EcshopLogin(unittest.TestCase):
#测试用例
def test01_jingtian(self)
print("测试景天")
1.使用unittest命令行的方式运行∶
python -m unittest -v ecshop_login.EcshopLogin
python -m 以脚本的方式去运行一个模块
unittest -v --verbose意思就是更详细的输出结果 ecshop_login.EcshopLogin模块名.类名.方法名
-k匹配模式:
1.通配符:-k *_weiwei2.字符串 :-l weiwei
2.使用unittest.main() 以模块的方式运行
配置pycharm环t境或者使用python橘块名.py

五、读懂执行的结果

.成功
F失败
E错误
s 跳过

六、用例执行的顺序
按ASCII码的规则: [0-9A-Z a-z] A=65 a=97

七、框架底层原理
module=‘main’,测试用例用例所在的路径_main_表示当前模块defaultTest=None,
待测用例的名称,默认是所有
argv=None,
接收外部的参数
testRunner=None,
测试运行器,TextTestRunner
testLoader=loader.defaultTestLoader,指定使用默认的测试用例加载器exit=True,
是否在测试完成之后结果python程序。
verbosity=1,
类似于命令行-v,o,1,2
failfast=None,
catchbreak=None,
buffer=None,
warnings=None,*.tb_locals=False

只运行部分用例使用testsuite:

if_name___= "main':
suite = unittest.Testsuite()
suite.addTest(EcshopLogin("test01_lili""))
suite.addTest(EcshopLogin("test02_weiwei"))
unittest.main(defaultTest='suite')
#unittest.TextTestRunner().run(suite)
if name_== "main':
suite = unittest.TestSuite(
testcases = [EcshopLogin(""test01_lili"),EcshopLogin(""test11_huahua")]
suite.addTests(testcases)
unittest.main(defaultTest='suite")
if_name___== "main':
suite = unittest.TestSuite(
testcases = unittest.defaultTestLoader.discover(start_dir=os.getcwd(), pattern=".py')suite.addTests(testcases)
unittest.main(defaultTest='suite")

八、unitest单元框架中的断言

assertEqual(a,b)               断言a==b
assertNotEquaka,b)          断言a!=b
assertTrue(a)                    断言a为真
assertFalse (a)                 断言a为假
assertin(a,b)                     断言a在b里面
assertNotin(a,b)               断言a不在b里面

九.DDT详解
1、ddt是通过装饰器的形式来调用的。
装饰器︰口红就是微微的装饰器。装饰器就是完成—种特定功能的函数(事物)。在python里面装饰器是以@开头,并且装饰器有两种:类装饰器,函数装饰器。
ddt里面有哪些装饰器︰
@ddt(关装饰器,申明当前类使用ddt框架)
@data(函数装饰器,用于给测试用例传递数据)
@unpack(函数装饰器,将传输的数据包解包),一般作用于元祖tuple和列表list。
@file_data(函数装饰器,可直接读取yamljson文件)

2、实战@ddt , @data
总结:当传单个值时,所有的类型都可以传,并且用例执行一次。
如果说:@data传入多个值的时候,那么传几个值,那么用例执行几次。

3、实战@unpack
如果是数字或者字符串∶那么不需要@unpack
如果是元祖和列表的话,那么可以通过@unpack,但是参数的个数必须和解完包后的值的个数一杜如果是集合无法解包
如果是字典,那么可以通过@unpack解包,但是参数的名字和个数必须和字典的键保持一致。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

javascript_good

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值