知乎-最新最全 Allure快速入门 自动化测试报告 - 知乎 (zhihu.com)
python3.7
jdk-11.0.12_windows-x64_bin
allure-2.18.1
-<解压到C:\Program Files>
- 添加环境变量: 将“C:\Program Files\allure-2.18.1\bin” 添加到path
- windows的cmd目录下通过 allure --version 判断是否生效
pip install allure-pytest
# pytest.ini
[pytest]
testpaths = ./
# ./ 代表执行命令的当前文件夹
markers=
pro:pro
test:test
p1:p1
addopts: -vs --alluredir ./report --clean-alluredir
# --alluredir :报告生成地址
# --clean-alluredir: 清除之前的记录
bejson.com
生成报告
执行测试用例后,自动生成report目录。
当前执行路径,指定report 目录,allure serve report就会自动生成allure测试报告,报告放到临时目录
# 放到固定木
allure generate report # 生成allure-report
allure generate report -o ABC # 生成重新命名的allure-report,名称叫ABC
allure open allure-report # 打开allure-report
# test_one.py
import allure
import pytest
@allure.epic("TestOne_Automation")
@allure.feature("test_one,feature")
class TestOne:
@allure.story("test_one,story")
@allure.title("test_one,title")
@allure.testcase("www.baidu.com","testcase_link")
@allure.issue("www.baidu.com","bug_tracker")
@allure.description("This is a test_one description")
@allure.severity("blocker")
@allure.link("www.baidu.com",name="link")
def test_one(self):
with allure.step("step1"):
pass
with allure.step("step2"):
pass
assert 1 == 1
@allure.story("test_two,story")
@allure.title("test_two,title")
def test_two(self):
assert 1 == 1
def test_three(self):
assert 1 == 2
@pytest.mark.skip
def test_four(self):
assert 1 == 1
pytest -k test_one
allure serve report # 自动打开报告
钩子函数完成失败用例截图
project > conftest.py
project > pytest.ini
project > test_allure.py
project > data > data.yaml
project > utils > read.py
project > utils > get_filepath.py
# conftest.py
import allure
import pytest
from selenium import webdriver
from utils.get_filepath import get_screen_shot_path
@pytest.fixture(scope="session")
def driver():
global driver
driver = webdriver.Chrome()
driver.maximize_window()
print("打开浏览器")
yield driver
print("关闭浏览器")
driver.close()
driver.quit()
# 钩子函数,结果
@pytest.hookimpl(hookwrapper=True, tryfirst=True)
def pytest_runtest_makereport(item, call):
"""
:param item: 代表测试函数或方法,包含测试相关的信心,比如名称,位置,标记
:param call: 包含测试函数执行的详细信息,比如结果,执行时间
:return:
when = setup:前置
when = call:执行测试用例
when = teardown:后置
"""
print("=========================")
# 获取钩子函数的结果
out = yield
# 获取测试报告
report = out.get_result()
# print(f"测试报告:{report}")
# print(f"步骤:{report.when}")
# print(f"nodeid:{report.nodeid}")
# print(f"运行结果:{report.outcome}")
# 失败测试用例截图
if report.when == 'call' and report.failed:
# 保存到本地
driver.save_screenshot(get_screen_shot_path())
# 截图,get_screenshot_as_png二进制数据
# 使用allure.attach将二进制数据附加到allure报告中
allure.attach(driver.get_screenshot_as_png(), "失败截图", allure.attachment_type.PNG)
# pytest.ini
[pytest]
testpaths = ./testcases
markers=
pro:pro
test:test
p1:p1
addopts: -vs --alluredir ./report --clean-alluredir
# test_allure.py
from time import sleep
import allure
import pytest
from selenium.webdriver.common.by import By
from utils.read import read_yaml
class TestLogin:
@pytest.mark.parametrize("username,password", read_yaml()['userinfo_list'])
def test_login(self, driver, username, password):
allure.dynamic.title("登录功能,账号为:" + username)
driver.get("http://sellshop.5istudy.online/sell/user/login_page")
driver.find_element(By.ID, 'username').send_keys(username)
driver.find_element(By.ID, 'password').send_keys(password)
driver.find_element(By.CSS_SELECTOR, '#login > form > p.login.button > input[type=submit]').click()
if username == 'admin':
text = driver.find_element(By.CSS_SELECTOR, "body > div > div > div > div > strong").text
assert text == "用户不存在1"
sleep(2)
# project > utils > read.py
import configparser
import yaml
from utils.get_filepath import get_yaml_path, get_ini_path
path = get_yaml_path()
ini_path = get_ini_path()
def read_yaml():
with open(path, encoding="utf8") as f:
data = yaml.safe_load(f)
return data
def read_ini():
config = configparser.ConfigParser()
config.read(ini_path, encoding='utf8')
return config
if __name__ == '__main__':
print(read_yaml())
# print(read_ini()['mysql']['HOST'])
# project > utils > get_filepath.py
import os
import time
def get_report_path():
path = os.path.join(os.path.dirname(os.path.dirname(os.path.realpath(__file__))), "allure-report/export",
'prometheusData.txt')
return path
def get_screen_shot_path():
file_name = "截图{}.png".format(time.strftime("%Y-%m-%d_%H-%M-%S"))
path = os.path.join(os.path.dirname(os.path.dirname(os.path.realpath(__file__))), "file", file_name)
return path
def get_logo_path():
path = os.path.join(os.path.dirname(os.path.dirname(os.path.realpath(__file__))), "file", "logo.jpg")
return path
def download_file_path():
path = os.path.join(os.path.dirname(os.path.dirname(os.path.realpath(__file__))), "file")
return path
def get_yaml_path():
path = os.path.join(os.path.dirname(os.path.dirname(os.path.realpath(__file__))), "data", "data.yaml")
return path
def get_ini_path():
path = os.path.join(os.path.dirname(os.path.dirname(os.path.realpath(__file__))), "config", "settings.ini")
return path
def get_log_path():
path = os.path.join(os.path.dirname(os.path.dirname(os.path.realpath(__file__))), "log")
return path
if __name__ == '__main__':
print(get_report_path())
# project > data > data.yaml
userinfo:
username: admin
password: 123456
skill:
- 接口自动化
- UI自动化
- 性能测试
userinfos:
- username: admin
password: 123456
- username: test01
password: 123456
userinfo_list:
- [ admin,123456 ]
- [ test01,123456 ]
skills:
- - 接口自动化
- UI自动化
- 性能测试
skills2:
- [ 接口自动化, UI自动化, 性能测试 ]
#项目
register_ok:
mobile: 13800001112
password: 123456
register_failed:
mobile: 13800001112
password: 123456
register_exist:
mobile: 13017744356
user_login:
- mobile: ''
password: 123456
- mobile: 13800001111
password: ''
- mobile: 13800001111
password: 123451
- mobile: 13800001111
password: 123456
user_address:
province: 天津市
city: 天津城区
district: 和平区
username: 老白
useraddress: 人民广场100
mobile: 13800001111
allure动态报告内容
# test_allure.py
from time import sleep
import allure
import pytest
from selenium.webdriver.common.by import By
from utils.read import read_yaml
class TestLogin:
@pytest.mark.parametrize("username,password", read_yaml()['userinfo_list'])
def test_login(self, driver, username, password):
allure.dynamic.title("登录功能,账号为:" + username)
driver.get("http://sellshop.5istudy.online/sell/user/login_page")
driver.find_element(By.ID, 'username').send_keys(username)
driver.find_element(By.ID, 'password').send_keys(password)
driver.find_element(By.CSS_SELECTOR, '#login > form > p.login.button > input[type=submit]').click()
if username == 'admin':
text = driver.find_element(By.CSS_SELECTOR, "body > div > div > div > div > strong").text
assert text == "用户不存在1"
sleep(2)
环境信息
pytest文档45-allure添加环境配置(environment)-腾讯云开发者社区-腾讯云 (tencent.com)
网友评论