生成失败_pytest + allure生成测试报告

Allure 是一款轻量级、支持多语言的开源自动化测试报告生成框架,由Java语言开发,可以集成到 Jenkins。 pytest 测试框架支持Allure 报告生成。

pytest也可以生成junit格式的xml报告和HTML报告,命令如下:

pytest test_demo.py --junitxml=report.xmlpytest test_demo.py --html=report.html #需要安装插件:pip install pytest-html

Allure 报告更加灵活美观,本文介绍如何使用pytest 生成 allure测试报告

环境安装

安装allure

  1. allure包下载:https://github.com/allure-framework/allure2/releases
  2. 解压 -> 进入bin目录 -> 运行allure.bat,
  3. 把bin目录加入PATH环境变量
d9e3d683e014c44fba7a03025e0aac2c.png

allure官网 : http://allure.qatools.ru/

allure文档 : https://docs.qameta.io/allure/#

安装 allure-pytest插件

pip install allure-pytest

生成Allure报告

运行

pytest [测试文件] -s -q --alluredir=./result #--alluredir用于指定存储测试结果的路径)

查看测试报告

方式一:直接打开默认浏览器展示报告

allure serve ./result/

方式二:从结果生成报告

  • 生成报告allure generate ./result/ -o ./report/ --clean (覆盖路径加--clean)
  • 打开报告allure open -h 127.0.0.1 -p 8883 ./report/

实例代码:https://docs.qameta.io/allure/#_pytest

test_allure.py:

import pytestdef test_success():    """this test succeeds"""    assert Truedef test_failure():    """this test fails"""    assert Falsedef test_skip():    """this test is skipped"""    pytest.skip('for a reason!')def test_broken():    raise Exception('oops')

方法1

执行测试用例:

pytest test_allure.py --alluredir=./result/1
f921e8ee2196333dc3b733e94d647f7a.png

打开报告:

> allure serve ./result/1Generating report to temp directory...Report successfully generated to C:甥敳獲10287AppDataLocalTemp6968593833275403330allure-reportStarting web server...2020-10-25 20:59:42.368:INFO::main: Logging initialized @4873ms to org.eclipse.jetty.util.log.StdErrLogServer started at . Press  to exit
bef90c3d8f52f5f0929924d987d20ca5.png

方法2

allure generate ./result/1 -o ./report/1/ --cleanallure open -h 127.0.0.1 -p 8883 ./report/1

浏览器访问地址 http://127.0.0.1:8883/ ,会显示跟上图一样的报告。

allure特性—feature, storry, step

可以在报告中添加用例描述信息,比如测试功能,子功能或场景,测试步骤以及测试附加信息:

  • @allure.feature(‘功能名称’):相当于 testsuite
  • @allure.story(’子功能名称‘):对应这个功能或者模块下的不同场景,相当于 testcase
  • @allure.step('步骤'):测试过程中的每个步骤,放在具体逻辑方法中allure.step('步骤') 只能以装饰器的形式放在类或者方法上面with allure.step:可以放在测试用例方法里面
  • @allure.attach('具体文本信息')附加信息:数据,文本,图片,视频,网页

测试用例 test_feature_story_step.py:

import pytestimport allure@allure.feature("登录")class TestLogin():    @allure.story("登录成功")    def test_login_success(self):        print("登录成功")        pass    @allure.story("密码错误")    def test_login_failure(self):        with allure.step("输入用户名"):            print("输入用户名")        with allure.step("输入密码"):            print("输入密码")        print("点击登录")        with allure.step("登录失败"):            assert '1' == 1            print("登录失败")        pass    @allure.story("用户名密码错误")    def test_login_failure_a(self):        print("用户名或者密码错误,登录失败")        pass@allure.feature("注册")class TestRegister():    @allure.story("注册成功")    def test_register_success(self):        print("测试用例:注册成功")        pass    @allure.story("注册失败")    def test_register_failure(self):        with allure.step("输入用户名"):            print("输入用户名")        with allure.step("输入密码"):            print("输入密码")        with allure.step("再次输入密码"):            print("再次输入密码")        print("点击注册")        with allure.step("注册失败"):            assert 1 + 1 == 2            print("注册失败")        pass

用例执行、生成报告

pytest test_feature_story.py --alluredir=./result/2 allure generate ./result/2 -o ./report/2/ --cleanallure open -h 127.0.0.1 -p 8883 ./report/2

报告:

3843ae3b34637455e6eedf222c22ed84.png

allure特性—link, issue, testcase

可以在测试报告中添加链接、bug地址、测试用例地址。

关联bug需要在用例执行时添加参数:

  • --allure-link-pattern=issue:[bug地址]{}
  • 例如:--allure-link-pattern=issue:http://www.bugfree.com/issue/{}

test_allure_link_issue.py:

import allure@allure.link("http://www.baidu.com", name="baidu link")def test_with_link():    pass@allure.issue("140","this is a issue")def test_with_issue_link():    passTEST_CASE_LINK = 'https://github.com'@allure.testcase(TEST_CASE_LINK, 'Test case title')def test_with_testcase_link():    pass

用例执行:

pytest test_allure_link_issue.py --allure-link-pattern=issue:http://www.bugfree.com/issue/{} --alluredir=./result/3allure serve ./result/3

报告:

40c57c4341151e0a1931da2de5f01ffa.png

点击 this is a issue,页面会跳转到bug页面:http://www.bugfree.com/issue/140

allure特性—severity

有时候在上线前,由于时间关系,我们只需要把重要模块测试一遍,在这样的场景下我们怎么实现呢?主要有三种方法:

  1. 可以使用pytest.mark来标记用例,Pytest测试框架(一):pytest安装及用例执行 介绍了这种方法。@pytest.mark.webtest # 添加标签 @pytest.mark.sec pytest -m "webtest and not sec"
  2. 通过 allure.feature, allure.story来实现pytest test_feature_story_step.py --allure-features "登录" //只运行登录模块 pytest test_feature_story_step.py --allure-stories "登录成功" //只运行登录成功子模块
  3. 通过 allure.severity按重要性级别来标记,有5种级别:Blocker级别:阻塞Critical级别:严重Normal级别:正常Minor级别:不太重要Trivial级别:不重要

test_allure_severity.py:

import allureimport pytestdef test_with_no_severity_label():    pass@allure.severity(allure.severity_level.TRIVIAL)def test_with_trivial_severity():    pass@allure.severity(allure.severity_level.NORMAL)def test_with_normal_severity():    pass@allure.severity(allure.severity_level.NORMAL)class TestclassWithNormalSeverity(object):    def test_inside_the_normalseverity_test_class(self):        pass    @allure.severity(allure.severity_level.CRITICAL)    def test_inside_the_normal_severity_test_class_with_overriding_critical_severity(self):        pass

用例执行:

pytest test_allure_severity.py --alluredir=./result/4 --allure-severities normal,criticalallure serve ./result/4

结果:

2bcf4c9e1cf8b6ba85089acffdbce162.png

allure.attach()

可以在报告中附加文本、图片以及html网页,用来补充测试步骤或测试结果,比如错误截图或者关键步骤的截图。

test_allure_attach.py:

import allureimport pytestdef test_attach_text():    allure.attach("纯文本", attachment_type=allure.attachment_type.TEXT)def test_attach_html():    allure.attach("这是一段htmlbody块", "html页面", attachment_type=allure.attachment_type.HTML)def test_attach_photo():    allure.attach.file("test.jpg", name="图片", attachment_tye=allure.attachment_type.JPG)

用例执行:

pytest test_allure_attach.py --alluredir=./result/5allure serve ./result/5

结果:

5b85eaf0ebfe3a7968b46c78982cab15.png

pytest+selenium+allure报告

测试步骤:

  1. 打开百度
  2. 搜索关键词
  3. 搜索结果截图,保存到报告中
  4. 退出浏览器

test_allure_baidu.py:

import allureimport pytestfrom selenium import webdriverimport time@allure.testcase("http://www.github.com")@allure.feature("百度搜索")@pytest.mark.parametrize('test_data1', ['allure', 'pytest', 'unittest'])def test_steps_demo(test_data1):    with allure.step("打开百度网页"):        driver = webdriver.Chrome("D:/testing_tools/chromedriver85/chromedriver.exe")        driver.get("http://www.baidu.com")    with allure.step("搜索关键词"):        driver.find_element_by_id("kw").send_keys(test_data1)        time.sleep(2)        driver.find_element_by_id("su").click()        time.sleep(2)    with allure.step("保存图片"):        driver.save_screenshot("./result/b.png")        allure.attach.file("./result/b.png", attachment_type=allure.attachment_type.PNG)        allure.attach('首页', 'Attach with HTML type', allure.attachment_type.HTML)    with allure.step("退出浏览器"):        driver.quit()

用例执行:

pytest test_allure_baidu.py --alluredir=./result/6allure serve ./result/6

结果:

db4d2a31890992685dfb9dcc61fdcb58.png

--THE END--


本文作者:hiyo
本文链接:https://www.cnblogs.com/hiyong/p/14163298.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值