前言
在做自动化的过程中,编写用例时候需要用到用例的前置和用例的后置,其中pytest中有setup_class和teardown_class可以帮助我们完成这些,但是不够完善而且灵活性不够强。举个简单的例子,一个calss中有3条用例,其中2条需要登录,1条不需要登录,这个时候如果在用setup和teardown来做就有点不方便。这个时候就引入了新的知识点fixture。
Fixture简单介绍
fixture属于pytest中的一个方法。fixture可以用作测试用例的前置和后置操作,其中fixture命令规范没有像setup和teardown固定格式。可以随意命名。控制fixture的前置和后置操作是通过yield关键字进行来区分的,代码在yield前面的属于前置操作,代码在yield后面的属于后置操作。并且fixture也没有强烈的要求必须要前后置同时存在,可以只存在前置也可以只存在后置。fixture如果有后置内容,无论遇到什么问题,都会进行执行后置的代码。
return和yeild的区别: 都是表示返回值的意思,但是return的后面不能有代码,yeild很后面可以有代码
yield语句之前的就会在测试用例之前使用,yield之后的语句就会在测试用例执行完成之后再执行。
常见的应用场景:
- @pytest.fixture可以用在selenium中测试用例执行前后打开、关闭浏览器的操作; yield返回driver对象去操作浏览器;
- @pytest.fixture可以用在接口自动化测试中操作登录,yield返回token;
fixture中一共有5个参数分别是:scope,params,autouse,ids,name
fixture使用方法
前面已经介绍了fixture是干什么的,但是具体的用法没有说,先介绍下具体用法,这里通过将登录操作写在一个函数中。然后通过装饰器的方法进行使其变成fixture。那条用例需要用到对应的前置和后置操作的时,直接将fixture的名称通过传参的形式放到用例中。
一个class中存在3条用例,其中2条需要登录,1条不需要登录。运营fixture进行完成前后置操作。
import pytest
@pytest.fixture()
def login():
print("log In")
yield "Token:xxxxxxxxxxxxxxxxx" #yield之前的内容是setup的相关内容,之后的内容是teardown的操作
print("Log out")
class TestFixture:
def test_case001(self,login):
assert 1==1
def test_case002(self):
assert 1==1
def test_case003(self,login):