pytest(二):fixtrue之conftest.py,allure报告详解

一、使用fixture实现部分前后置

语法:

@pytest.fixture(scope="作用域",params="数据驱动",autouser="自动执行",ids="自定义参数名称",name="别名")

1.1 scope="作用域"

functioin:在每个方法(测试用例)的前后执行一次。
​
class:在每个类的前后执行一次。
​
module:在每个py文件前后执行一次。
​
package/session:每个package前后执行一次

1)scope="function"

在每个函数的前后执行

@pytest.fixture(scope="function")
def execute_sql():
print("执行数据库的验证,查询数据库。")
yield
print("关闭数据库的连接")

注意:如果加入autouse=True参数,那么表示自动使用,那么和setup、teardown功能一致.

调用:

1 def test_get(self,execute_sql):
2 print("get请求"+execute_sql)

yield和return,都可以返回值,并且返回的值可以在测试用例中获取。

yield生成器,反复一个对象,对象中可以有多个值,yield后面可以接代码。

return 返回一个值,return后面不能接代码。

2)scope="class"

在每个类的前后执行一次

@pytest.fixture(scope="class")
def execute_sql():
print("执行数据库的验证,查询数据库。")
yield
print("关闭数据库的连接")

调用

 @pytest.mark.usefixtures("execute_sql")
 class TestApi2:
​
 def test_do_class(self):
 print("多个类的情况")

3)scope="module"

在每个模块的前后执行一次。和setup_module和teardown_module效果一样

 @pytest.fixture(scope="module",autouse=True)
 def execute_sql():
 print("执行数据库的验证,查询数据库。")
 yield "1"
 print("关闭数据库的连接")

4).package、sesion级别,一般是和conftest.py文件一起使用。

1.2 params=数据

数据可以是(list,tuple,字典列表,字典元祖)可以参考第一篇文章第四部分数据驱动

import pytest
​
def read_yaml():
    return ['水饺','黄焖鸡',"拉面"]
​
@pytest.fixture(scope="function",params=read_yaml())
def execute_sql(request):
    print(request.param)
    print("执行数据库的验证,查询数据库。")
    yield request.param
    print("关闭数据库的连接")

1.3 ids="自定义参数名称"

ids参数:它要和params一起使用,自定义参数名称。意义不大。

1.4 name参数=夹具的别名

对fixtrue固件取的别名。意义不大。了解即可,用了别名后,那么真名会失效,只能使用别名。

二、fixture和conftest.py(一般选择使用)

当fixture的级别为package,session时,那么一般和conftest.py文件一起使用。

1.名称是固定的conftest.py,主要用于单独的存放fixture固件的。

2.级别为package,sesion时,那么可以在多个包甚至多个py文件里面共享前后置。 举例:登录。 模块:模块的共性。

3.发现conftest.py文件里面的fixture不需要导包可以直接使用。

4.conftest.py文件,可以有多个。 作用:出现重复日志,初始化一次日志对象。规避日志重复。连接数据库。关闭数据库。

注意:多个前置同时存在的优先级。

1.conftest.py为函数级别时优先级高于setup/teardown

2.conftest.py为class级别时优先级高于setup_class/teardown_class

3.conftest.py为session级别时优先级高于setup_module/teardown_module

三 allure实现定制

1 logo定制

 

1)修改D:\pycharm\allure-2.20.1\config下的allure.yml配置文件,加入:自定义logo插件。

 

plugins:
  - junit-xml-plugin
  - xunit-xml-plugin
  - trx-plugin
  - behaviors-plugin
  - packages-plugin
  - screen-diff-plugin
  - xctest-plugin
  - jira-plugin
  - xray-plugin
  - custom-logo-plugin

2)修改插件里面的图片和样式

/*.side-nav__brand {
  background: url('custom-logo.svg') no-repeat left center !important;
  margin-left: 10px;
}*/
.side-nav__brand {
  background: url('logo.jpg') no-repeat left center !important;
  margin-left: 10px;
  height: 90px;
  background- size: contain !important;
}

2企业级定制

 左边的定制:

1.史诗(项目名称): 
@allure.epic("项目名称:接口自动化测试项目")
​
2.特性(模块名称):@allure.feature("模块名称:用户管理模块")
​
3.分组(接口名称):@allure.story("接口名称:查询商品")
​
4.测试用例标题:
​
(1)@allure.title("测试用例标题:输入正确的条件查询成功1"),适用于一个方法对应一个用例。
​
(2)allure.dynamic.title("测试用例标题:输入正确的条件查询成功2"),适用于一个方法对应多个用例。也就是有数据驱动的情况。
#demo
import allure
​
@allure.epic("项目名称:接口自动化测试项目")
@allure.feature("模块名称:用户管理模块")
class TestApi:
​
​
    @allure.story("接口名称:查询商品")
    @allure.title("测试用例标题:输入正确的条件查询成功1")
    def test_01(self):
        assert 1==1
        allure.dynamic.title("测试用例标题:输入正确的条件查询成功2")
        print('hello')
​
    @allure.story("接口名称:查询数量")
    def test_02(self):
        print("demo02")
        assert 1+1 >2
​
    @allure.story("接口名称:查询余额")
    def test_03(self):
        print("demo03")
效果展示

 

右边的定制:

1.用例的严重程度

blocker:中断缺陷:致命bug:内存泄漏,用户数据丢失,系统奔溃。
critical:临界缺陷:严重bug:功能未实现,功能错误,重复提交
normal:一般缺陷,一般bug,条件查询有误,大数据了无响应等
minor级别:次要缺陷:提示bug,颜色搭配不好,字体排列不整齐,错别字。
trivial级别:轻微缺陷:轻微bug,没有使用专业术语,必填项无提示。建议。

 

@allure.severity(allure.severity_level.BLOCKER) 注意:这个装饰器可以修饰方法也可以修饰类。

2.用例描述

@allure.description("测试用例描述")

 

3.测试用例链接的定制

接口地址:allure.link

Bug地址:allure.issue

测试用例的地址:allure.testcase

@allure.link(name="接口地址",url="http://www.baidu.com")
@allure.issue(name="bug地址",url="http://www.baidu.com")
@allure.testcase(name="用例地址",url="https://www.baidu.com")

 

 

4.测试用例步骤的定制

with allure.step("测试用例步骤")

 

5.附件的定制

 #附件的定制:body附件内容, name=None文件名,attachment_type=None文件扩展名

3常用的定制

1.@allure.epic("项目名称")
2.@allure.feature("模块名称")
3.@allure.story("接口名称")
4.@allure.severity(allure.severity_level.BLOCKER) 严重程度
5.allure.dynamic.title("用例名称:测试用例名称")
6.allure.dynamic.description("用例描述:测试用例描述")
7.with allure.step("测试步骤的名称"):
print("执行测试步骤代码")
8.allure.attach(body, name, attachment_type, extension) 测试用例附件
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值