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 用例运行允许失败次数,超过即停止
  • 相关阅读:
    UVA 1025 A Spy in the Metro DP水题
    ZOJ 3814 Sawtooth Puzzle BFS
    ZOJ 3816 Generalized Palindromic Number
    UVA 10859 Placing Lampposts 树形DP
    UVA 11825 Hackers' Crackdown 状压DP
    POJ 2887 Big String 线段树 离线处理
    POJ 1635 Subway tree systems Hash法判断有根树是否同构
    BZOJ 3110 k大数查询 & 树套树
    sdoi 2009 & 状态压缩
    来自于2016.2.24的flag
  • 原文地址:https://www.cnblogs.com/nimantou/p/12036128.html
Copyright © 2011-2022 走看看