Pytest @allure.feature @allure.story 装饰器
1. 代码示例
# -*- coding: utf-8 -*- from selenium import webdriver from selenium.webdriver import ActionChains import os import time import pytest import allure # 定义目标内容, 测试用例中断言 悬浮菜单中商品title是否与之相同. xiaomi_shouji = ['Xiaomi MIX 4', '小米MIX FOLD', '小米11 Ultra', '小米11 Pro', '小米11 青春版', '小米10S'] redmi_shouji = ['Redmi Note 10 Pro', 'Redmi Note 10 5G', 'K40 游戏增强版', 'K40 Pro 系列', 'Redmi K40', 'Redmi Note 9 4G'] def setup_module(): global driver # 全局变量 print('\n\n执行初始化,并访问目标页面') # 配置启动项 # 实例化一个启动参数对象 startup_Options = webdriver.ChromeOptions() # 设置无界面模式运行浏览器 # startup_Options.add_argument('--headless') # 设置启动浏览器时窗口最大化运行 startup_Options.add_argument('--start-maximized') # 设置禁用'Chrome正受自动测试软件的控制'的提示 startup_Options.add_experimental_option("excludeSwitches", ['enable-automation']) driver = webdriver.Chrome(options=startup_Options) # 按startup_options中的配置启动浏览器 driver.get("https://www.mi.com/") def teardown_module(): print('\n执行清除,退出浏览器') global driver driver.quit() # allure 定制化标签 # feature 测试用例特性, 主要功能模块, 用法: @allure.feature() # story 用户故事 feature子功能, 用法: @allure.story() @allure.feature('小米商城悬浮菜单') @allure.story('小米手机悬浮菜单') def test_xiaomi(): global driver print('\n执行test_xiaomi测试用例') menu = driver.find_element_by_css_selector('#J_navCategory+li') # 兄弟节点定位 ActionChains(driver).move_to_element(menu).perform() time.sleep(5) elements = driver.find_elements_by_css_selector('#J_navMenu .title') data = [element.text for element in elements] print(data) print(f'小米手机悬浮菜单下有{len(data)}款产品') # 断言小米手机悬浮菜单中的商品 与 指定的列表是否相同 assert data == xiaomi_shouji @allure.feature('小米商城悬浮菜单') @allure.story('Redmi 红米悬浮菜单') def test_redmi(): global driver print('执行test_redmi测试用例') menu = driver.find_element_by_css_selector('[data-index="1"]') # 兄弟节点定位 ActionChains(driver).move_to_element(menu).perform() time.sleep(5) elements = driver.find_elements_by_css_selector('#J_navMenu .title') data = [element.text for element in elements] print(data) print(f'Redmi 红米悬浮菜单下有{len(data)}款产品') # 断言小米手机悬浮菜单中的商品 与 指定的列表是否相同 assert data == redmi_shouji if __name__ == '__main__': # 执行测试脚本test_script01.py中的测试用例(test开头,如test01 或者 test_01) # '-s' : 关闭捕捉,输出打印信息 # '--alluredir=test_report' : 指定生成allure测试报告的路径 pytest.main(["test_script01.py","-s","--alluredir=test_report"]) # 打开测试报告 也可在 terminal终端 输入 allure serve test_report 打开测试报告 os.system('allure serve test_report')
2. 控制台输出:
platform win32 -- Python 3.8.2, pytest-6.2.2, py-1.10.0, pluggy-0.13.1 rootdir: E:\PycharmProjects\Pytest-Webui-songqin plugins: allure-pytest-2.8.40, html-3.1.1, metadata-1.11.0 collected 2 items test_script01.py 执行初始化,并访问目标页面 执行test_xiaomi测试用例 ['Xiaomi MIX 4', '小米MIX FOLD', '小米11 Ultra', '小米11 Pro', '小米11 青春版', '小米10S'] 小米手机悬浮菜单下有6款产品 .执行test_redmi测试用例 ['Redmi Note 10 Pro', 'Redmi Note 10 5G', 'K40 游戏增强版', 'K40 Pro 系列', 'Redmi K40', 'Redmi Note 9 4G'] Redmi 红米悬浮菜单下有6款产品 . 执行清除,退出浏览器 ============================= 2 passed in 20.17s ============================== Generating report to temp directory... Report successfully generated to C:\Users\yaoze\AppData\Local\Temp\4142386060352290657\allure-report Starting web server... 2021-08-27 00:04:52.369:INFO::main: Logging initialized @4660ms to org.eclipse.jetty.util.log.StdErrLog Server started at <http://192.168.1.105:52478/>. Press <Ctrl+C> to exit
3. allure测试报告
图1:
图2:
钟声敲响了日落,柏油路跃过山坡,一直通向北方的是我们想象,长大后也未曾经过~