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 用例运行允许失败次数,超过即停止
posted @ 2019-12-13 16:56  spellbound  阅读(901)  评论(0编辑  收藏  举报