Allure详细安装请看之前的博客
1.Allure配置与⼊⻔
运⾏⽤例,⽣成allure报告
pip install allure-pytest -i
https://mirrors.aliyun.com/pypi/simple/
运⾏⽤例,⽣成allure报告
# main.py
import os
import pytest
if __name__ == '__main__':
# 如果加了`-s`或者`-vs`命令,那么打印的内容就不会显示在报
告中。
pytest.main(['--alluredir', './result', '--clean-alluredir'])
os.system('allure generate ./result/ -o ./report/ --clean')
看到这个命令表示allure报告⽣成成功了:
打开report的如下这个
allure报告清空上⼀次运⾏的记录
如果不加清楚的命令,会导致历史数据有缓存,导致不会⽣成最新的数据(例如:更改⽤例的名称后,⽣成的报告依旧是历史的
--alluredir:指定报告的⽬录路径
--clean-alluredir:如果已经存在报告,就先清空它
示例:
pytest.main(['--alluredir', './result', '--clean-alluredir'])
--clean:清除系统中的allure缓存
示例:
os.system('allure generate ./result/ -o ./report/ --clean')
2.Allure报告添加失败截
固定的钩⼦函数名称(不能随意修改) :pytest_runtest_makereport
钩⼦函数需要配置在conftest.py中:
import allure
import pytest
from selenium import webdriver@pytest.fixture()
def browser():global driver# 01 用例的前置步骤,初始化浏览器对象driver = webdriver.Chrome()# 02 用例执行,返回driveryield driver# 03 用例的后置步骤,关闭浏览器driver.quit()@pytest.hookimpl(hookwrapper=True)
def pytest_runtest_makereport():# 获取测试用例的执行结果,yield,返回给out对象,然后再去转化为result对象out = yield"""从result对象out获取调用结果的测试报告,返回一个report对象report对象的属性:包括when(setup,call,teardown等三个值)、nodeid(测试用例的名称)、outcome(用例的执行结果, passed, failed)"""report = out.get_result() # 返回一个report对象# 仅仅获取用例call阶段的执行结果,不包含setup、teardownif report.when == "call":# 获取用例call执行结果为失败的情况xfail = hasattr(report, "wasxfail") # hasattr方法会:返回对象是否具有给定名称的属性# 如果测试用例被跳过且标记为预期失败,或者测试用例执行失败且不是预期失败if (report.skipped and xfail) or (report.failed and not xfail):# 添加allure报告截图with allure.step("添加失败的截图 ---> "):allure.attach(driver.get_screenshot_as_png(), "失败的截图",allure.attachment_type.PNG)elif report.passed:# 如果测试用例执行通过,添加allure报告截图with allure.step("添加成功的截图 ---> "):allure.attach(driver.get_screenshot_as_png(), "成功的截图",allure.attachment_type.PNG)
3.Allure⽤例描述详解
作⽤:提⾼测试报告的可读性,减少团队沟通成本,提升⼯作效率
# 登录模块
import allure@allure.epic("读书屋项目")
@allure.feature("读书屋 - 登录模块")
class TestReadBookHomesLogin:@allure.step("步骤1:打开项目地址")def step01(self, browser):# 步骤1:打开项目地址browser.get("http://novel.hctestedu.com/user/userinfo.html")@allure.step("步骤2:输入账号")def step02(self, browser):browser.find_element("id", "txtUName").send_keys("17798989898")@allure.step("步骤3:输入密码")def step03(self, browser):browser.find_element("id", "txtPassword").send_keys("123456")@allure.step("步骤4:点击登录")def step04(self, browser):browser.find_element("id", "btnLogin").click()@allure.title("login01测试用例")@allure.story("登录流程用例:流程/场景01")@allure.testcase("http://novel.hctestedu.com/user/login.html")@allure.issue("https://www.baidu.com/?tn=49055317_54_hao_pg")@allure.description("2024年5月25日20:26:00")def test_read_login01(self, browser):self.step01(browser)self.step02(browser)self.step03(browser)self.step04(browser)print("读书屋项目 - 登录 - login01测试用例")@allure.title("login02测试用例")@allure.story("登录流程用例:流程/场景02")@allure.testcase("https://fanyi.youdao.com/index.html#/")def test_read_login02(self, browser):print("读书屋项目 - 登录 - login02测试用例")@allure.epic("读书屋项目")
@allure.feature("读书屋 - 作家专区")
# 作家专区
class TestReadBookHomesWRITER:@allure.title("writer01测试用例")@allure.story("作家专区流程用例:流程/场景01")def test_read_writer01(self, browser):print("读书屋项目 - 作家专区 - writer01测试用例")
4.⽤例等级设置
通过 @allure.severity() 对测试⽤例设置不同的等级
blocker 阻塞缺陷(功能未实现,⽆法下⼀步)
critical 严重缺陷(功能点缺失)
normal ⼀般缺陷(边界情况,格式错误)
minor 次要缺陷(界⾯错误与ui需求不符)
trivial 轻微缺陷(必须项⽆提示,或者提示不规范)