一、pytest优势
- 可以和selenium、requests、appium结合实现web自动化、接口自动化、APP自动化
- 可跳过用例且失败用例可重跑
- 结合allure生成美观的测试报告
- 与Jenkins实现持续集
- 有丰富的插件
pytest-xdist 多线程运行
pytest-ordering 改变测试用例执行顺序
pytest-rerunfailures 失败用例重跑
allure-pytest 生成allure测试报告
二、pytest前后置
1、setup/teardown 每个用例之前、之后执行一次
2、setup_class/teardown_class 每个类之前、之后执行一次
3、@pytest.fixture(scope=“作用域”,params=“数据驱动”,autouse=“自动执行”,ids=“自定义参数名”,name=“重命名”)
作用域:
function 函数级别
class 类级别
module 模块级别
session 会话级别
autouse:
True 自动执行
False 需要调用才执行
示例代码:
@pytest.fixture(scope="function",params=MySqlDB)
def get_resrc_id_fixture():
'''获取数据源的id前置'''
dbinfo = {
"host": MySqlDB[0]["MySqlDB"]["host"],
"user": MySqlDB[0]["MySqlDB"]["user"],
"password": MySqlDB[0]["MySqlDB"]["mysql_psw"],
"port": MySqlDB[0]["MySqlDB"]["port"]
}
db = DbConnect(db_cof=dbinfo, database="aio")
select_sql = "select * from aio_resource where resrc_name='mysql数据源';"
result = db.select(select_sql)
print(result)
id = result[0]["id"]
return id
注意:
- @pytest.fixture()一般与conftest.py一起使用
- conftest.py名称是固定的,不可改变
- conftest.py单独存放@pytest.fixture()方法,可以在多个py文件之间实现前置的共享
- conftest.py里的方法不需导入,可直接使用
- conftest.py可以有多个,可有多个不同层级