Pytest与Unittest自动化框架区别

pytest unittest测试框架

1、报告

2、用例收集

3、执行用例

4、断言

5、数据驱动

6、重新运行失败的用例

7、筛选

8、前置后置的处理

9、加载测试用例

pytest目录

1、pytest介绍

2、pytest之mark功能

3、pytest之命令运行用例

4、pytest之fixture功能

pytest之fixture参数化-多运行、pytest层级覆盖,测试用例与其同级或者在其子目录

5、pytest之参数化

6、pytest之重运行

7、pytest之html测试报告

8、pytest之allure测试报告

9、pytest之jenkins集成

pytest和unittest区别

1、表达用例

         unittest:定义一个类,继承unittest.TestCase

         pytest:类/函数

2、断言的表达:

        unittest: self.assertxxxx()

        pytest: assert 表达式(结果为True-断言成功,否则断言失败) 逻辑/成员/比较/函数返回值

3、收集用例:

        unittest:TestLoader类+TestSuite类.discover收集用例

        pytest:自动收集用例

收集的机制:

        1)、从哪个目录开始收集,

                pytest命令在哪个目录下执行,就默认从哪个目录下开始搜索用例

        2)、文件:目录下所有的文件都需要去看是否有用例吗?

                不需要,目录下,有文件/子包

                符合一下标准的文件,才会去文件中确认是否有用例

                标准:1) .py  2)文件名以test_开头,或者以_test结尾

        3)、用例名称:以test_开头的函数,或者以Test开头的类(不含__init__方法)名下,以test_开头的方法。

        4)、执行顺序:

                1)、文件名称顺序,-ASCII排序

                哪个文件先识别,哪个文件下的用例,先执行

                2)、文件内部,代码的先后顺序,从上到下

4、fixture:setup& teardown 前置后置

        unittest:setup &teardown 、setupClass&teardownClass ---固定的名称

        pytest:function(用例)->class(测试类)->model(.py) ->Session(会话)

        pytest:不固定的名字(函数)/前置后置放在一个函数里,/独立的,不与测试类放在一起

      定义:  1)、怎么知道函数它是一个前置后置

        2)、怎么区分前置和后置

        3)、作用域是什么?测试函数/类/模块/会话

       4)、如果返回数据

        共享: conftest.py ----名称固定,专门用来存放fixture./

                   作用域(哪些范围内的用例都可以使用):conftest.py所在的文件夹内的用例都可以使用,

                  可以在不同的层级,创建conftest.py

      调用:  4)、测试用例当中,如何调用这个前置后置

                  5)、如何接收fixture的返回值

        定义:1)、怎么知道函数它是一个前置后置, 在函数前面: @pytest.fixture

        @pytest.fixture

        def init():

                pass

          2)、怎么区分前置和后置,yield--前后置的分割线

         @pytest.fixture()

          def init():

                driver = webdriver.Chrome()

                driver.get("http://www.baidu.com")

                yield

                driver.quit

         3)、作用域是什么?测试函数/类/模块/会话

         function: 默认值,--unittest当中setup和teardown,夹了测试用

        class:测试类,--unittest当中setupClass 和teardownClass

        module:模块.py  --整个py文件,

        session:会话, --收集到的所有测试用例

     调用:   4)、测试用例当中,如何调用这个前置后置?

      在测试用例/类的前面:

        @pytest.mark.usefixture("定义的fixture名称")  

        5)、接收返回值的方式

               将fixture的函数名称,作为用例的参数

                用例的参数=返回值

import pytest
from selenium import webdriver


# 定义fixture
@pytest.fixture()
def init():
    # 前置
    print("我是前置")
    driver = webdriver.Chrome()
    driver.get("http://www.baidu.com")
    yield
    # 后置
    print("我是后置")
    driver.quit()


@pytest.fixture(scope="class")
def mycc():
    print("我是类级别的前置")
    yield
    print("我是类级别的后置")


# 测试用例
def test_baidu():
    print("234333333")


# 只在淘宝这个方法初始化了
@pytest.mark.usefixtures("init")
def test_taobao():
    print("taobao.....")


class TestAA:

    def test_aa(self):
        print('aaaaaaaaa')

5、插件:

unittest:无

pytest:700+

html插件

allure插件

重运行

6、筛选用例,使用方法:

注册标签名

在测试用例/测试类前面加上,@pytest.mark已注册的标记名

注册方式:

1)、创建pytest.ini文件,在文件中按如下形式添加标签名

[pytest]

markers =

        demo: marks tests as slow 

        注:冒号之后是可选的描述信息

代码中的写法

@pytest.mark.demo
def test_aaa():
    print("aaaaaaa")
    assert True

执行的时候,命令

pytest -s -v -m demo,只执行demo的标记用例

2)、在conftest.py文件中,通过hook注册

def pytest_configure(config):

        config.addinivalue_line("markers", "smoke1:标记只运行冒烟用例")

        config.addinivalue_line("markers", "demo1: 示例运行")

总结:

1、区别- 自动收集/断言/写用例/插件/前置和后置

2、筛选用例:1)注册标签,2)打标记,@pytest.mark.标记名 ,3)运行时过滤: pytest.main(["-m", "标签名称", "-s", "-v"])

fixture -总结:定义/调用

定义:申明pytest.fixture/yield 区分前后置/作用域scope

1)测试用例文件当中定义

2)conftest.py当中定义 ,共享

      conftest.py定义的fixture,哪些范围内的用例可以调用我

       conftest.py所在的包下,所有的用例均可以

       在不同的包下,可以创建自己的conftest.py

调用:测试用例/测试类

1) 用例不需要使用fixture返回值

2)用例要使用fixture的返回值:

        方式一:@pytest.mark.userfixtures("")fixture函数名称作为用例参数

        方式二: fixture函数名称作为用例参数

用例的参数有2种: 1)数据驱动 2)fixture

3)需要的时候才调用

4)如果测试类下面,所有的测试用例,都是用同一个函数级别的前置后置

那么可以直接在类名上,声明调用:@pytest.mark.userfixtures("函数级别的fixture")

conftest.py 所在目录下,全局共享。含子目录同样共享

html的测试报告

安装:pip install pytest-html

命令:pytest --html=相对路径

allure报告

allure:命令行工具,

在windows中使用,首先下载 allure包

Central Repository: io/qameta/allure/allure-commandline

找到zip格式的下载下来。

然后配置path中 环境变量。

安装一个插件库,pip install allure-pytest 

使用,pytest --alluredir=/tmp/my_allure_results

使用allure命令,生成html样式的报告

allure serve alluredir的路径

解决问题

1、日志,失败截图

日志,记录用例执行的过程

失败截图,用例失败,在失败的操作截取当前的页面

用例中每一个步骤 === 调页面对象的行为 + 测试数据

                                        页面对象

                                        selenium webdriver API

                                        日志/失败截图

                                        1、等待可见

                                        2、查找元素

                                        3、点击-必然的前提,等待和查找

                                        4、输入-必然的前提,等待和查找

                                         5、获取属性-必然的前提,等待和查找

                                        6、获取文本-必然的前提,等待和查找

2、减少pageobjects的行为封装

等待可见

查找元素

点击-必然的前提,等待和查找

输入-必然的前提,等待和查找

获取属性-必然的前提,等待和查找

获取文本,必然的前提,等待和查找

1、测试报告

2、有地写用例,运行用例

3、日志/失败截图

4、筛选用例/重运行功能

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NeilNiu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值