pytest -- Allure报告
创始人
2024-02-15 00:26:06

执行和生成报告:

1)在main文件中加入如下代码:

1)在main文件中加入如下代码:
if __name__ == '__main__':# 指定临时json文件生成位置    pytest.main(["./case/test_visit_url_screenshot.py",                 "-sv", "--alluredir", "./report/temp_jsonreport"])# 指定html报告生成位置,清理上次生成的报告    os.system("allure generate ./report/temp_jsonreport -o ./report/html --clean")

2)生成报告包含两个文件:

先生成temp_jsonreport,再生成html,用浏览器打开index.html即可

@allure.feature()、@allure.story()、@allure.title()、with allure.step 使用

使用举例1***:

1、把基础操作,写成函数放到action.py,方便重复调用

2、在测试用例里写清feature用例模块、story用例场景、title用例名称、用例步骤step,调用action里的函数即可

import allure
import loggingfrom utils.yaml_reader import *
from utils.path_dealer import *
from utils.url_dealer import *
from utils.action import *
from conf.conf import *@allure.feature("模块")
class TestUrlScreenshot:"""Step1、input one URLStep2、generate multi-language URLStep3、visit URL, take screenshot"""@allure.story("生成指定多语言URL后访问")def test_take_screenshot(self, driver):url_list = read_yaml(data_folder, "url.yaml")# logging.info("urls list: %s" % url_list)language_dict = read_yaml(data_folder, "language.yaml")if not language_dict:language_dict = default_language_dict# logging.info("language dict: %s" % language_dict)task_name = read_yaml(data_folder, "other.yaml")["task_name"]logging.info("task_name: %s" % task_name)urls = gen_multi_language_url(language_dict=language_dict, url_list=url_list)folder_path = gene_folder_path(task_name_pa=task_name)# 设置访问URLfor language, urls_list in urls.items():logging.info("language: %s", language)for each_url in urls_list:Action.visit_url(driver=driver, url=each_url)time.sleep(5)# 生成截图的文件路径png_path = gene_screenshot_abs_path(folder_path_pa=folder_path, language_pa=language)Action.save_screenshot(driver, png_path)# 将截图嵌入报告allure.attach(driver.get_screenshot_as_png(), "截图", allure.attachment_type.PNG)

跳过测试 -- @pytest.mark.skip(reason=”hhh”)

# 参数化 ,传入字典数据json = ({"username": "alex", "password": "123456"}, {"username": "rongrong", "password": "123456"})@pytest.mark.parametrize("json", json)
@pytest.mark.skip()
def test_para5(self, json):print("{json}")  # 语法:{json} 且必须加引号print('username: {json["username"]}, password: {json["password"]}') # 语法:{json}

执行结果:

 参数化 -- @pytest.mark.parametrize

# 单个值,运行一次@allure.story("场景:pytest.mark.parametrize使用")
@allure.title("单个参数,单个值")
@pytest.mark.parametrize("name", ["san"])
def test_para(self, name):print(name)

# N个值,运行N次
@allure.title("单个参数,多个值")
@pytest.mark.parametrize("name", ["san", "si", "wu"])
def test_para(self, name):print(name)

# N个值,运行N次
@allure.title("多个参数,多个值")
@pytest.mark.parametrize("name, pw", [("san", "123456"), ("si", "123456"), ("wu", "123456")])
def test_para(self, name, pw):print("%s %s" %(name, pw))

# 多个参数的混合使用,笛卡儿积data1 = [1, 2]
data2 = ["wu", "liu"]
data3 = ["biu", "kuang"]@pytest.mark.parametrize("a", data1)
@pytest.mark.parametrize("b", data2)
@pytest.mark.parametrize("c", data3)
def test_para(self, a, b, c):print("new sentence: [{a}, {b}, {c}]")

# 参数化 ,传入字典数据json = ({"username": "alex", "password": "123456"}, {"username": "rongrong", "password": "123456"})@pytest.mark.parametrize("json", json)
def test_para(self, json):print("{json}")  # 语法:{json} 且必须加引号print('username: {json["username"]}, password: {json["password"]}') # 语法:{json}

失败case重复执行 -- pytest-rerunfailures

& @pytest.mark.flaky(reruns=2, reruns_delay=5)

背景:当服务器不稳定,偶尔出现波动、本地网络偶尔出现不稳定等情况,导致用例执行失败,这种情况大家都觉得用例标记失败不太合理,想要在用例执行失败后延时一些时间再次进行执行,如果超过3次仍然失败,则表明用例执行失败;所以就需要失败重跑功能。

前提条件: pytest (>=5.3) 和python >=3.6

安装:pip install pytest-rerunfailures

查看安装版本:pip show pytest-rerunfailures

方式一:加装饰器:

# 参数化 ,传入字典数据json = ({"username": "alex", "password": "123456"}, {"username": "rongrong", "password": "123456"})@pytest.mark.parametrize("json", json)
@pytest.mark.flaky(reruns=2, reruns_delay=5)
def test_para5(self, json):print("{json}")  # 语法:{json} 且必须加引号print('username: {json["username"]}, password: {json["password"]}') # 语法:{json}assert 1 == 2
注:失败用例重试2次,每次延时5秒
方式二:命令行执行
在命令行输入: pytest -v --reruns 3 --reruns-delay 5 test_rerun.py失败用例重试3次,每次延时5秒,

命令行会覆盖用例的装饰器

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...