![ac358af86190c1952a855b454051e44b.png](https://i-blog.csdnimg.cn/blog_migrate/04717e308c879d909db9f789eb5d2618.jpeg)
胖友圈经常有各种小姐姐发励志减肥的状态,印象很深的一句话是,没有人愿意透过你粗糙的外表,没有人愿意透过你邋遢的外表去触及你美好的心灵,在自动化测试中也是一样,漂亮的报告在自动化测试框架中可以起到画龙点睛的作用。
报告接触过不少,之前看了Kitty老师写的Java自动化测试集成Allure美化报告,感觉报告很漂亮,于是尝试着将其应用到python中。
既然要生成报告,那我们首先需要引入测试框架,pytest是python的第三方测试框架,是基于unittest的扩展框架。
根据pytest的官方网站介绍,它具有如下特点:
1、简单灵活,容易上手,文档丰富;
2、支持参数化,可以细粒度地控制要测试的测试用例;
3、能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试、接口自动化测试(pytest+requests);
4、pytest具有很多第三方插件,并且可以自定义扩展,比较好用的如pytest-selenium(集成selenium)、pytest-html(完美html测试报告生成)、pytest-rerunfailures(失败case重复执行)、pytest-xdist(多CPU分发)等;
5、测试用例的skip和xfail处理;
6、可以很好的和CI工具结合,例如jenkins
首先我们需要在python环境上安装pytest库,这里建议通过pip安装:pip install pytest
然后编写一个简单的pytest测试用例,这里我们需要满足以下条件
测试文件以test_开头(以_test结尾也可以)
测试类以Test开头,并且不能带有 init 方法
测试函数以test_开头
断言使用基本的assert即可
编写简单代码如下,test_sample.py
import pytest
class TestClass(object):
@pytest.fixture(scope='function')
def setup_function(request):
def teardown_function():
print("teardown_function called.")
request.addfinalizer(teardown_function) # 此内嵌函数做teardown工作
print('setup_function called.')
@pytest.fixture(scope='module')
def setup_module(request):
def teardown_module():
print("teardown_module called.")
request.addfinalizer(teardown_module)
print('setup_module called.')
@pytest.mark.website
def test_1(setup_function):
print('Test_1 called.')
def test_2(setup_module):
print('Test_2 called.')
def test_3(setup_module):
print('Test_3 called.')
assert 2==1+1 # 通过assert断言确认测试结果是否符合预期
调用pytest,只需要在命令行里定位到测试文件所在路径,然后运行pytest即可
接下来,我们引入Allure 来生成漂亮的报告。
同样,也是通过pip来安装allure插件:
pip install allure-pytest
接着下载allure:2.7.0版本
https://dl.bintray.com/qameta/generic/io/qameta/allure/allure/2.7.0/allure-2.7.0.zip
解压之后,将allure/bin目录添加到环境变量path中:
接着,在测试脚本中,添加allure特性,直接看下面的脚本,我通过在脚本中添加注释的方式给大家解释allure特性的用途。
import pytestimport allure@allure.feature('测试用例功能') # feature定义功能class TestClass(object): @pytest.fixture(scope='function') def setup_function(request): def teardown_function(): print("teardown_function called.") request.addfinalizer(teardown_function) # 此内嵌函数做teardown工作 print('setup_function called.') @pytest.fixture(scope='module') def setup_module(request): def teardown_module(): print("teardown_module called.") request.addfinalizer(teardown_module) print('setup_module called.') @allure.story('功能测试用例1') # story定义用户场景 @pytest.mark.website def test_1(setup_function): print('Test_1 called.') @allure.story('功能测试用例2') # story定义用户场景 def test_2(setup_module): print('Test_2 called.') @allure.story('功能测试用例3') # story定义用户场景 def test_3(setup_module): print('Test_3 called.') assert 2==1+1 # 通过assert断言确认测试结果是否符合预期
运行pytest --alluredir ./result/去生成测试结果
该目录下为测试结果
接下来,用allure generate ./result/ -o ./report/ --clean命令将测试结果生成测试报告
该目录下为测试报告所在,直接打开该报告有点问题,我们需要在pycharm中通过右键点击用浏览器打开
![a85ce21faaae3e9b29c926da64dc012f.gif](https://i-blog.csdnimg.cn/blog_migrate/f0d8e43e3ccc2454181bfa20e58b6af5.gif)
Bye~
RECOMMEND 推荐阅读