pytest单元测试框架(二)

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

@pytest.fixture(scope=“作用域”,params=“数据驱动”,autouser=“自动执行”,ids=“自定义参数名称”,name=“别名”)
参数说明:
scope=“作用域”
    functioin:在每个方法(测试用例)的前后执行一次。
    class:在每个类的前后执行一次。
    module:在每个py文件前后执行一次。
    package/session:每个package前后执行一次。
实例:

import pytest
@pytest.fixture(scope="function")
def  func():
    print("在用例执行前执行")
    yield “测试”
    print("在用例执行后执行")
class Test_demo():
    def test_NO1(self,func):
        print("这是第一个例子"+func)

yield和return,都可以返回值,并且返回的值可以在测试用例中获取
yield生成器,反复一个对象,对象中可以有多个值,yield后面可以接代码
return 返回一个值,return后面不能接代码
注意:如果加入autouse=True参数,那么表示自动使用,那么和setup、
teardown功能一致

2.class级别:在每个类的前后执行一次

import pytest
@pytest.fixture(scope="class")
def  func():
    print("在用例执行前执行")
    yield "测试"
    print("在用例执行后执行")
class Test_demo():
    def test_NO1(self,func):
        print("这是第一个例子"+func)
        
    def test_NO2(self):
        print("这是第2个例子")

3.module级别:在每个模块的前后执行一次。和setup_module和teardown_module效果一样。

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

5.params=数据(list,tuple,字典列表,字典元祖)

def retrun_data():
    return ["小明","小红","小刚"]
import pytest
@pytest.fixture(scope="function",params=retrun_data())
def func(request):
    print("在用例执行前执行")
    yield request.param
    print("在用例执行后执行")
class Test_demo():
    def test_NO1(self,func):
        print("这是第一个例子"+func)


    def test_NO2(self):
        print("这是第2个例子")

这里的params用于传输数据(list,tuple,字典列表,字典元祖),需要在夹
具里面通过request(固定写法)接收,然后通过request.param(固定写法)
获取数据,然后再通过yield把数据返回到测试用例中,然后使用。

6.ids参数:它要和params一起使用,自定义参数名称。意义不大。了解即可

def retrun_data():
    return ["小明","小红","小刚"]
import pytest
@pytest.fixture(scope="function",params=retrun_data(),ids=["a","b","c"])
def func(request):
    print("在用例执行前执行")
    yield request.param
    print("在用例执行后执行")
class Test_demo():
    def test_NO1(self,func):
        print("这是第一个例子"+func)

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

def retrun_data():
    return ["小明","小红","小刚"]
import pytest
@pytest.fixture(scope="function",params=retrun_data(),ids=["a","b","c"],name="func111")
def func(request):
    print("在用例执行前执行")
    yield request.param
    print("在用例执行后执行")
class Test_demo():
    def test_NO1(self,func111):
        print("这是第一个例子"+func111)


    def test_NO2(self):
        print("这是第2个例子")

8.优先级
当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

二、pytest的断言

断言使用的是assert

def test_NO2(self):
print(“这是第2个例子”)
assert 1>2

三、结合allure-pytest实现生成allure报告

第一步
1.官网下载allure文件:https://github.com/allure-framework/allure2/releases
2.下载之后解压到非中文的目录
3.把bin路径配置到系统变量path中:E:\allure-2.13.7\bin

第二步:
安装allure报告:pip install allure-pytest
验证:allure --version
注意:可能需要重启pycharm。
pip文件配置如下

[pytest] 
addopts = -vs --alluredir=reports/temps --clean‐alluredir
testpaths = pytest_demo/
python_files = pytest_demo/test_project1.py
#python_classes = Test* 改变默认的类搜索规则
#python_functions = test_* 改变默认的测试用例的搜索规则。
markers =
	smoke:冒烟用例
	productmanage:商品管理模块

主程序如下:

import  pytest
import os
import time

if __name__ == '__main__':
    pytest.main()
    time.sleep(3)
    # 加上--clean表示:每执行一次把原来的清除
    os.system("allure generate reports/temps ‐o reports/allures -‐clean")

四、实现allure测试报告logo定制

1.修改E:\allure-2.13.7\config下的allure.yml配置文件,加入:自定义logo插件。最后一句。(‐ custom‐logo‐plugin)
2.修改插件里面的图片和样式
allure-2.13.7\plugins\custom-logo-plugin\static\styles.css

/*
.side‐nav__brand {
 background: url('custom‐logo.svg') no‐repeat left center !important;
 margin‐left: 10px;
}
 */

.side‐nav__brand{
background: url('logo.png') no‐repeat left center !important;
 margin‐left: 20px;
height: 90px;
background‐size: contain !important;
 }
.side‐nav__brand‐text{
display: none;
 }
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值