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:

 

posted @ 2021-08-24 23:11  Avicii_2018  阅读(92)  评论(0编辑  收藏  举报