pytest补充

1.pytest配置文件

pytest.ini : pytest的主配置文件,可以改变pytest的默认行为。也可以自定义参数。

conftest.py : 把公共代码写在里面.主要为把hook函数与fixture写在里面。作用于本目录的用例与子目录的用例

__init__.py:可以避免不同目录下有相同的模块名。没有这个,运行时报错。建议在测试用例的每个目录都有此文件。

2.查看ini文件。

pytest --help.可知道pytest目录支持哪些参数。也可以在conftest.py中写hook函数来实现自定义参数。

其中常用:

-v 列出用例详细信息

-s 显示print信息

-k 支持测试用例名关键字运行

-m 标记并分组

--markers 可以显示当前项目的所有标记。自定义的标记写在pytest.ini中进行注册。

norecursedirs = .* data config utils 缩小范围搜索,否则会递归所有目录,运行时

testpaths=tests  指定用例运行目录

3.fixture yield

yield可以实现返回数据。

session级别 yield前的内容在整个测试项目中只执行一次,yield后的内容也是只执行一次。

@pytest.fixture(scope = "session")
def env():
    print("start")
    # return 1
    yield 1
    print("end")

4.fixture 参数化

zip 函数的使用

import pytest

user_list = [{"name":"sophia","password":"111","caseName":"这是测试用例1"},{"name":"sophia222","password":"222","caseName":"这是测试用例2"}]
name_list = []
password_list = []
caseName_list = []
for user in user_list:
    name_list.append(user["name"])
    password_list.append(user["password"])
    caseName_list.append(user["caseName"])

#注意zip的使用
s = list(zip(name_list, password_list))

class TestDemo2:
    @pytest.mark.parametrize("name,password",s,ids=caseName_list)
    def test_a(self,env,name,password):
        print(env)
        print(name,password)
        print(s)
        assert 10 + 1 == 11

未完待续......

你可能感兴趣的:(pytest)