zoukankan      html  css  js  c++  java
  • pytest的详细教程及与unittest对比

    一、pytest与unittest对比

    二、pytest基本操作

    测试用例命名

    1)文件命名:

    test_*.py或*_test.py命名

    2)测试用例类以Test开头命名,方法以test开头命名3

    前置后置

    格式为:

    @pytest.fixture(scope="class")
    def init_driver():
        driver=webdriver.Chrome()
        driver.get("https://www.baidu.com")
        yield driver    #yield区分前后置,以上为前置,以下为后置,返回参数直接写在yield后面(相当于return的作用)
        driver.quit()     

    scope=“级别”,其中session>module>class>function

    session 可跨文件调用,多个文件调用一次
    module 每一个.py文件调用一次
    class 每一个类调用一次
    function 没一个函数或方法都会调用,级别默认不填即是此级别

    调用前置后置:

    如上定义了一个级别为class的前置后置,在Test开头的类中,不需要再去编写setup和teardown,直接在类前面加上@pytest.mark.usefixtures("前置后置函数名称"),具体如下:

    @pytest.mark.usefixtures("init_driver")    #括号里面加上前置后置的函数名称
    class Testlogin(self,init_driver):     #前置后置若有返回值,需要在测试用例类里面加上前置后置的函数名称(与前置后置的函数名称保持一致,不可自定义)
        init_driver.refresh()    #使用driver时全部改为init_driver

    前置后置共享:

    在需要共享的目录下创建conftest.py,作用域仅限于其当前目录和子目录的用例都可共享此前置后置,使用时可直接调用(作用:可用于全部测试用例数据准备和清理)

    @pytest.fixture(scope="session",autouse=True)    #autouse默认为false,所以需要调用才会生效,这里设置为True,会自动执行一次
    def init():
        driver=webdriver.Chrome()
        yield driver
        driver.quit()

    前置后置内部继承:

    可定义多个前置后置的函数,之间可以内部继承使用,但注意继承规则:级别低的可以继承级别高的,同级别也可调用继承

    举例:login_web调用了init_driver,并用init_driver接收了返回值(这里init_driver和login_web是同级,函数级别),调用时直接使用login_web就可以了

    其执行的顺序是:init_driver的前置——login_web的前置——执行用例——login_web的后置——init_driver的后置

    参数化

    pytest使用参数化实现数据驱动,直接在需要测试用例前面加上:

    @pytest.mark.parametrize("参数名",列表数据)

    参数名:用来接收每一项数据,并作为测试用例的参数

    列表数据:一组测试数据

    举例:@pytest.mark.parametrize("参数1,参数2",[(数据1,数据2),(数据1,数据2)])  #每次会将一个元组里面的数据1传给参数1,数据2传给参数2

    @pytest.mark.parametrize("参数名",[数据1,数据2,数据3])  #每次传入单个参数,第一次将数据1传给参数1,第二次将数据二传给参数二,依次类推

    断言

    pytest使用assert表达式

    举例:assert a==b

    用例标记

    注册标记:

    创建pytest.ini文件,在文件中按照以下方式添加标签名:

    [pytest]
    markers=
        标记名:注释
    
    
    备注:若要注册多个标记名,换行写即可,冒号之后是可选的描述信息(可不填),另:标记名和注释需要为英文,目前不支持中文

    用例添加标记:

    在用例前面添加标记,格式为:

    @pytest.mark.标记名1
    @pytest,mark.标记名2
    def test_login():
        pass

    运行打标记的测试用例:

    在命令行输入:@pytest -m 标记名

    在代码航写入:@pytest main(["-m","标记名"])

    用例运行

    在命令行输入:cd到要运行用例的根目录下,输入pytest

    在代码行输入:pytest.mian()

    用例执行顺序

    按照以下顺序进行搜索执行:

    1、先识别到的文件里面的用例先执行(按照文件命名排序,ASCII码)

    2、在.py文件里,按照代码的先后执行顺序执行用例

    三、pytest常用命令参数

    pytest -s  输出我们用例中的调试信息(譬如代码里面的print)
    pytest --collect-onty 收集要执行的用例,但不会执行
    pytest -v 输出用例更加详细的执行信息
    pytest -m 标记名 执行标记的指定用例
    pytest -k args 执行包干关键字的用例
    pytest -x 用例运行失败立马停止执行
    pytest --maixfial=num 用例运行允许失败次数,超过即停止
  • 相关阅读:
    一个机智的数组去重方法
    gets(),fgets()的作用机制探究
    性能优化之布局优化
    android 中theme和style的语法相关
    可以一直滚动的跑马灯
    ExpandableListView的OnitemLongclickListener事件
    关于 edittext 软键盘退出监听解决办法
    Android 开发之拦截EditText的输入内容,定制输入内容
    decimalFormat(小数格式)
    oracle常用
  • 原文地址:https://www.cnblogs.com/nimantou/p/12036128.html
Copyright © 2011-2022 走看看