Python测试框架之unittest与pytest

一.unittest

介绍:

识别指定目录下的以test开头的文件(test*.py)。

在文件中执行继承了TestCase的类中的以test_开头的用例。

想要按照顺序执行时,在test*.py中加入序号就好,如test_01login.py,test_02register.py

1.编写用例(用例名称,用例前置,用例步骤,用例断言,用例后置)

1)用例类型:必须要写在类中,并且类要继承unittest.TestCase,类中用例名称要以test_开头。

2)前置后置用例

2.收集用例并执行(收集到测试套件,并用各种方法去执行)

1)收集用例:TestSuite类

①addTest(): addTest()方法是将测试用例添加到测试套件中,如下方,是将test_baidu模块下的BaiduTest类下的test_baidu测试用例添加到测试套件。

suite = unittest.TestSuite()
suite.addTest(test_baidu.BaiduTest('test_baidu'))

TestSuite类内部有run()方法,可以直接运行套件中的用例,但是没有相应的文本或HTML等测试结果文件的输出,它只是执行了一遍,所以不方便查看结果。

②unittest.defaultTestLoader(): defaultTestLoader()类,通过该类下面的discover()方法可自动根据测试目录start_dir匹配查找测试用例文件(test*.py),并将查找到的测试用例组装到测试套件,因此可以直接通过run()方法执行discover。用法如下:

runner=unittest.defaultTestLoader.discover(test_dir, pattern='test_*.py')
runner.run()

上面的方法也是直接用套件自带的run()方法运行用例,所以也是没有相应的文本或HTML等测试结果文件的输出,它只是执行了一遍,不方便查看结果。

③unittest.TestLoader().discover():和第二个方法原理一样。上面的方法点击进去就会发现底层逻辑如下。

defaultTestLoader = TestLoader()

所以直接使用TestLoader类时用法应该是:

runner=unittest.TestLoader().discover(test_dir, pattern='test_*.py')
runner.run()

2)执行用例(带输出的那种,文本文件或是html文件)

①TextTextRunner()类:通过该类下面的run()方法来运行suite所组装的测试用例,入参为suite测试套件。用法如下:

with open('result_unittest.txt', 'w+', encoding='utf-8') as file:
    runner = unittest.TextTestRunner(file, descriptions="asdf", verbosity=2)
    runner.run(suite)

生成的测试结果报告为文本形式。

②HTMLTestRunner类:第三方模块中的类,里面有run()方法,入参为suite测试套件。

③BeautifulReport使用方法:

from BeautifulReport import BeautifulReport

br=BeautifulReport(suite)
br.report("测试报告名称","bfreport.html")

④unittestreport(基于unittest二次开发的功能扩展库)

文档地址:gitee.com/lemon-test-official/unittestreport

除了可以生成html的测试报告外,还有失败重运行,并发执行用例等功能。

详细用法看文档。

3)默认执行顺序:

①同一层级的文件名通过ASC码排序,先找到的文件,先收集里面的用例

②不同层级的文件:从外到内,即先把外层目录下的收集完成后,在找文件夹里面的

③文件当中的用例执行顺序:从上到下,按照代码顺序。

4)过滤文件和用例:识别测试用例规则

识别指定目录下的以test开头的文件(test*.py)。

在文件中执行继承了TestCase的类中的以test_开头的用例。

想要按照顺序执行时,在test*.py中加入序号就好,如

test_01login.py,test_02register.py

二.pytest

介绍:

提供编写用例,收集用例,运行用例及输出测试报告的功能。

并且能识别并收集unittest的用例。断言时直接使用assert表达式即可。

pip install pytest,在main文件里收集用例时导入。

有模块级别/会话级别的fixtrue

在单个测试文件里执行时不用导入也可。

1.编写用例(用例名称,用例前置,用例步骤,用例断言,用例后置)

1)用例类型:可以写在类中,也可以直接写一个函数,都能被框架识别为测试用例;测试类不必像unittest一样继承TestCase类。

2)前置后置用例:支持两种,类unittest的,或是使用fixture

2.收集用例并执行---自动收集用例(选定目录,过滤文件,过滤用例)

1)选定目录:

命令行:输入pytest执行,可以在当前项目目录下自动收集到符合pattern的用例。

main.py文件:导入pytest,调用pytest.main()。效果是当前代码所在文件在哪个目录下,就以哪个目录为rootdir去搜索用例并收集。

2)默认执行顺序:

①同一层级的文件名通过ASC码排序,先找到的文件,先收集里面的用例

②不同层级的文件:从外到内,即先把外层目录下的收集完成后,在找文件夹里面的

③文件当中的用例执行顺序:从上到下,按照代码顺序。

3)过滤文件和用例:识别测试用例规则

识别以test_开头,或以_test结尾的文件(test_*.py)

识别以Test开头的类(class Test*)类中不能有init方法,类中以test_开头的方法

以test_开头的函数

3.输出报告

第一个是需要和jenkins集成时要用。生成这种格式的文件后,jenkins就能从中识别用例总数以及成功和失败的用例数量。

第二个用不上,就是在控制台输出的那种。

常用的是allure。

-allure测试报告

文档地址:docs.qameta.io/allure/

mac电脑安装allure可以使用命令:brew install allure

allure与pytest结合使用,需要安装插件,如上图的第二步。

问题1:allure工具怎样才能获取测试结果并展示?

pytest不能只是运行,需要生成allure工具可以解析的测试结果文件。

问题2:pytest怎么能生成allure工具可以解析的文件?

在pytest中安装allure插件,如上图的第二步,然后通过在命令行加参数,就能生成。

a.生成解析文件。

如上图的命令,意为在相对于根目录下的目录中生成allure工具可以解析的文件。

b.使用allure工具,去展现2当中的测试结果。

跳转到rootdir下,cmd中运行:allure serve /tmp/my_allure_results(serve后面的地址为测试结果文件相对路径)

c.执行的同时删除上次执行时生成的解析文件,保证测试报告中数据的正确性

4.其他细分功能

1)pytest的mark功能

详细的mark功能可以查看下面这个文章,讲的很详细。

pytest系列(二) - 筛选用例新姿势,mark 一下,你就知道。 - 简---- - 博客园

在执行只有一个mark时的命令需要将-m和mark分开输入,我也不知道为啥,但反正写到一起就会报错:

在执行有多个mark时的命令就可以正常的将-m和nark放在一起。

上图中的例子是执行同时拥有login和demo两个标签的,如果想要执行有login的或者有demo的,那么用or连接即可

2)pytest的fixture功能

详细的可以看:pytest系列(三) - fixture 的多样玩法 - 简---- - 博客园

①类unitstyle的夹具

有函数,类,和模块级别的夹具。用法和unittest中的夹具一样。

②使用fixture的夹具

-定义fixture

-在用例中主动调用fixture

-fixture支持全局共享&层级共享

3)pytest参数化

4)pytest重运行

当碰到了运行失败的用例时,使用重运行机制会即时重运行,不会等到所有用例执行结束后再执行。

(即时重运行更合理,因为环境还有前置工作等都还在。)

5)pytest-allure测试报告

allure的更多玩法:testingpai.com/article/1595507295429

Pytest学习笔记5——Allure测试报告用例详细描述_像蚂蚁一样工作,像蝴蝶一样生活-CSDN博客_allure用例描述

6)指定用例的执行顺序:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值